@@ -195,7 +195,7 @@ fn check_paths<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>,
195195 }
196196 } ;
197197
198- for & ( _, source_def_id, source_dep_node) in sources {
198+ for & ( _, source_def_id, ref source_dep_node) in sources {
199199 let dependents = query. transitive_successors ( source_dep_node) ;
200200 for & ( target_span, ref target_pass, _, ref target_dep_node) in targets {
201201 if !dependents. contains ( & target_dep_node) {
@@ -239,7 +239,7 @@ fn dump_graph(tcx: TyCtxt) {
239239 { // dump a .txt file with just the edges:
240240 let txt_path = format ! ( "{}.txt" , path) ;
241241 let mut file = File :: create ( & txt_path) . unwrap ( ) ;
242- for & ( source, target) in & edges {
242+ for & ( ref source, ref target) in & edges {
243243 write ! ( file, "{:?} -> {:?}\n " , source, target) . unwrap ( ) ;
244244 }
245245 }
@@ -252,51 +252,51 @@ fn dump_graph(tcx: TyCtxt) {
252252 }
253253}
254254
255- pub struct GraphvizDepGraph ( FnvHashSet < DepNode < DefId > > ,
256- Vec < ( DepNode < DefId > , DepNode < DefId > ) > ) ;
255+ pub struct GraphvizDepGraph < ' q > ( FnvHashSet < & ' q DepNode < DefId > > ,
256+ Vec < ( & ' q DepNode < DefId > , & ' q DepNode < DefId > ) > ) ;
257257
258- impl < ' a , ' tcx > dot:: GraphWalk < ' a > for GraphvizDepGraph {
259- type Node = DepNode < DefId > ;
260- type Edge = ( DepNode < DefId > , DepNode < DefId > ) ;
261- fn nodes ( & self ) -> dot:: Nodes < DepNode < DefId > > {
258+ impl < ' a , ' tcx , ' q > dot:: GraphWalk < ' a > for GraphvizDepGraph < ' q > {
259+ type Node = & ' q DepNode < DefId > ;
260+ type Edge = ( & ' q DepNode < DefId > , & ' q DepNode < DefId > ) ;
261+ fn nodes ( & self ) -> dot:: Nodes < & ' q DepNode < DefId > > {
262262 let nodes: Vec < _ > = self . 0 . iter ( ) . cloned ( ) . collect ( ) ;
263263 nodes. into_cow ( )
264264 }
265- fn edges ( & self ) -> dot:: Edges < ( DepNode < DefId > , DepNode < DefId > ) > {
265+ fn edges ( & self ) -> dot:: Edges < ( & ' q DepNode < DefId > , & ' q DepNode < DefId > ) > {
266266 self . 1 [ ..] . into_cow ( )
267267 }
268- fn source ( & self , edge : & ( DepNode < DefId > , DepNode < DefId > ) ) -> DepNode < DefId > {
268+ fn source ( & self , edge : & ( & ' q DepNode < DefId > , & ' q DepNode < DefId > ) ) -> & ' q DepNode < DefId > {
269269 edge. 0
270270 }
271- fn target ( & self , edge : & ( DepNode < DefId > , DepNode < DefId > ) ) -> DepNode < DefId > {
271+ fn target ( & self , edge : & ( & ' q DepNode < DefId > , & ' q DepNode < DefId > ) ) -> & ' q DepNode < DefId > {
272272 edge. 1
273273 }
274274}
275275
276- impl < ' a , ' tcx > dot:: Labeller < ' a > for GraphvizDepGraph {
277- type Node = DepNode < DefId > ;
278- type Edge = ( DepNode < DefId > , DepNode < DefId > ) ;
276+ impl < ' a , ' tcx , ' q > dot:: Labeller < ' a > for GraphvizDepGraph < ' q > {
277+ type Node = & ' q DepNode < DefId > ;
278+ type Edge = ( & ' q DepNode < DefId > , & ' q DepNode < DefId > ) ;
279279 fn graph_id ( & self ) -> dot:: Id {
280280 dot:: Id :: new ( "DependencyGraph" ) . unwrap ( )
281281 }
282- fn node_id ( & self , n : & DepNode < DefId > ) -> dot:: Id {
282+ fn node_id ( & self , n : & & ' q DepNode < DefId > ) -> dot:: Id {
283283 let s: String =
284284 format ! ( "{:?}" , n) . chars ( )
285285 . map ( |c| if c == '_' || c. is_alphanumeric ( ) { c } else { '_' } )
286286 . collect ( ) ;
287287 debug ! ( "n={:?} s={:?}" , n, s) ;
288288 dot:: Id :: new ( s) . unwrap ( )
289289 }
290- fn node_label ( & self , n : & DepNode < DefId > ) -> dot:: LabelText {
290+ fn node_label ( & self , n : & & ' q DepNode < DefId > ) -> dot:: LabelText {
291291 dot:: LabelText :: label ( format ! ( "{:?}" , n) )
292292 }
293293}
294294
295295// Given an optional filter like `"x,y,z"`, returns either `None` (no
296296// filter) or the set of nodes whose labels contain all of those
297297// substrings.
298- fn node_set ( query : & DepGraphQuery < DefId > , filter : & DepNodeFilter )
299- -> Option < FnvHashSet < DepNode < DefId > > >
298+ fn node_set < ' q > ( query : & ' q DepGraphQuery < DefId > , filter : & DepNodeFilter )
299+ -> Option < FnvHashSet < & ' q DepNode < DefId > > >
300300{
301301 debug ! ( "node_set(filter={:?})" , filter) ;
302302
@@ -307,10 +307,10 @@ fn node_set(query: &DepGraphQuery<DefId>, filter: &DepNodeFilter)
307307 Some ( query. nodes ( ) . into_iter ( ) . filter ( |n| filter. test ( n) ) . collect ( ) )
308308}
309309
310- fn filter_nodes ( query : & DepGraphQuery < DefId > ,
311- sources : & Option < FnvHashSet < DepNode < DefId > > > ,
312- targets : & Option < FnvHashSet < DepNode < DefId > > > )
313- -> FnvHashSet < DepNode < DefId > >
310+ fn filter_nodes < ' q > ( query : & ' q DepGraphQuery < DefId > ,
311+ sources : & Option < FnvHashSet < & ' q DepNode < DefId > > > ,
312+ targets : & Option < FnvHashSet < & ' q DepNode < DefId > > > )
313+ -> FnvHashSet < & ' q DepNode < DefId > >
314314{
315315 if let & Some ( ref sources) = sources {
316316 if let & Some ( ref targets) = targets {
@@ -325,21 +325,21 @@ fn filter_nodes(query: &DepGraphQuery<DefId>,
325325 }
326326}
327327
328- fn walk_nodes ( query : & DepGraphQuery < DefId > ,
329- starts : & FnvHashSet < DepNode < DefId > > ,
330- direction : Direction )
331- -> FnvHashSet < DepNode < DefId > >
328+ fn walk_nodes < ' q > ( query : & ' q DepGraphQuery < DefId > ,
329+ starts : & FnvHashSet < & ' q DepNode < DefId > > ,
330+ direction : Direction )
331+ -> FnvHashSet < & ' q DepNode < DefId > >
332332{
333333 let mut set = FnvHashSet ( ) ;
334- for start in starts {
334+ for & start in starts {
335335 debug ! ( "walk_nodes: start={:?} outgoing?={:?}" , start, direction == OUTGOING ) ;
336- if set. insert ( * start) {
336+ if set. insert ( start) {
337337 let mut stack = vec ! [ query. indices[ start] ] ;
338338 while let Some ( index) = stack. pop ( ) {
339339 for ( _, edge) in query. graph . adjacent_edges ( index, direction) {
340340 let neighbor_index = edge. source_or_target ( direction) ;
341341 let neighbor = query. graph . node_data ( neighbor_index) ;
342- if set. insert ( * neighbor) {
342+ if set. insert ( neighbor) {
343343 stack. push ( neighbor_index) ;
344344 }
345345 }
@@ -349,10 +349,10 @@ fn walk_nodes(query: &DepGraphQuery<DefId>,
349349 set
350350}
351351
352- fn walk_between ( query : & DepGraphQuery < DefId > ,
353- sources : & FnvHashSet < DepNode < DefId > > ,
354- targets : & FnvHashSet < DepNode < DefId > > )
355- -> FnvHashSet < DepNode < DefId > >
352+ fn walk_between < ' q > ( query : & ' q DepGraphQuery < DefId > ,
353+ sources : & FnvHashSet < & ' q DepNode < DefId > > ,
354+ targets : & FnvHashSet < & ' q DepNode < DefId > > )
355+ -> FnvHashSet < & ' q DepNode < DefId > >
356356{
357357 // This is a bit tricky. We want to include a node only if it is:
358358 // (a) reachable from a source and (b) will reach a target. And we
@@ -365,16 +365,16 @@ fn walk_between(query: &DepGraphQuery<DefId>,
365365 let mut node_states = vec ! [ State :: Undecided ; query. graph. len_nodes( ) ] ;
366366
367367 for & target in targets {
368- node_states[ query. indices [ & target] . 0 ] = State :: Included ;
368+ node_states[ query. indices [ target] . 0 ] = State :: Included ;
369369 }
370370
371- for source in sources. iter ( ) . map ( |n| query. indices [ n] ) {
371+ for source in sources. iter ( ) . map ( |& n| query. indices [ n] ) {
372372 recurse ( query, & mut node_states, source) ;
373373 }
374374
375375 return query. nodes ( )
376376 . into_iter ( )
377- . filter ( |n| {
377+ . filter ( |& n| {
378378 let index = query. indices [ n] ;
379379 node_states[ index. 0 ] == State :: Included
380380 } )
@@ -417,12 +417,12 @@ fn walk_between(query: &DepGraphQuery<DefId>,
417417 }
418418}
419419
420- fn filter_edges ( query : & DepGraphQuery < DefId > ,
421- nodes : & FnvHashSet < DepNode < DefId > > )
422- -> Vec < ( DepNode < DefId > , DepNode < DefId > ) >
420+ fn filter_edges < ' q > ( query : & ' q DepGraphQuery < DefId > ,
421+ nodes : & FnvHashSet < & ' q DepNode < DefId > > )
422+ -> Vec < ( & ' q DepNode < DefId > , & ' q DepNode < DefId > ) >
423423{
424424 query. edges ( )
425425 . into_iter ( )
426- . filter ( |& ( source, target) | nodes. contains ( & source) && nodes. contains ( & target) )
426+ . filter ( |& ( source, target) | nodes. contains ( source) && nodes. contains ( target) )
427427 . collect ( )
428428}
0 commit comments