@@ -195,7 +195,7 @@ fn check_paths<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>,
195
195
}
196
196
} ;
197
197
198
- for & ( _, source_def_id, source_dep_node) in sources {
198
+ for & ( _, source_def_id, ref source_dep_node) in sources {
199
199
let dependents = query. transitive_successors ( source_dep_node) ;
200
200
for & ( target_span, ref target_pass, _, ref target_dep_node) in targets {
201
201
if !dependents. contains ( & target_dep_node) {
@@ -239,7 +239,7 @@ fn dump_graph(tcx: TyCtxt) {
239
239
{ // dump a .txt file with just the edges:
240
240
let txt_path = format ! ( "{}.txt" , path) ;
241
241
let mut file = File :: create ( & txt_path) . unwrap ( ) ;
242
- for & ( source, target) in & edges {
242
+ for & ( ref source, ref target) in & edges {
243
243
write ! ( file, "{:?} -> {:?}\n " , source, target) . unwrap ( ) ;
244
244
}
245
245
}
@@ -252,51 +252,51 @@ fn dump_graph(tcx: TyCtxt) {
252
252
}
253
253
}
254
254
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 > ) > ) ;
257
257
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 > > {
262
262
let nodes: Vec < _ > = self . 0 . iter ( ) . cloned ( ) . collect ( ) ;
263
263
nodes. into_cow ( )
264
264
}
265
- fn edges ( & self ) -> dot:: Edges < ( DepNode < DefId > , DepNode < DefId > ) > {
265
+ fn edges ( & self ) -> dot:: Edges < ( & ' q DepNode < DefId > , & ' q DepNode < DefId > ) > {
266
266
self . 1 [ ..] . into_cow ( )
267
267
}
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 > {
269
269
edge. 0
270
270
}
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 > {
272
272
edge. 1
273
273
}
274
274
}
275
275
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 > ) ;
279
279
fn graph_id ( & self ) -> dot:: Id {
280
280
dot:: Id :: new ( "DependencyGraph" ) . unwrap ( )
281
281
}
282
- fn node_id ( & self , n : & DepNode < DefId > ) -> dot:: Id {
282
+ fn node_id ( & self , n : & & ' q DepNode < DefId > ) -> dot:: Id {
283
283
let s: String =
284
284
format ! ( "{:?}" , n) . chars ( )
285
285
. map ( |c| if c == '_' || c. is_alphanumeric ( ) { c } else { '_' } )
286
286
. collect ( ) ;
287
287
debug ! ( "n={:?} s={:?}" , n, s) ;
288
288
dot:: Id :: new ( s) . unwrap ( )
289
289
}
290
- fn node_label ( & self , n : & DepNode < DefId > ) -> dot:: LabelText {
290
+ fn node_label ( & self , n : & & ' q DepNode < DefId > ) -> dot:: LabelText {
291
291
dot:: LabelText :: label ( format ! ( "{:?}" , n) )
292
292
}
293
293
}
294
294
295
295
// Given an optional filter like `"x,y,z"`, returns either `None` (no
296
296
// filter) or the set of nodes whose labels contain all of those
297
297
// 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 > > >
300
300
{
301
301
debug ! ( "node_set(filter={:?})" , filter) ;
302
302
@@ -307,10 +307,10 @@ fn node_set(query: &DepGraphQuery<DefId>, filter: &DepNodeFilter)
307
307
Some ( query. nodes ( ) . into_iter ( ) . filter ( |n| filter. test ( n) ) . collect ( ) )
308
308
}
309
309
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 > >
314
314
{
315
315
if let & Some ( ref sources) = sources {
316
316
if let & Some ( ref targets) = targets {
@@ -325,21 +325,21 @@ fn filter_nodes(query: &DepGraphQuery<DefId>,
325
325
}
326
326
}
327
327
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 > >
332
332
{
333
333
let mut set = FnvHashSet ( ) ;
334
- for start in starts {
334
+ for & start in starts {
335
335
debug ! ( "walk_nodes: start={:?} outgoing?={:?}" , start, direction == OUTGOING ) ;
336
- if set. insert ( * start) {
336
+ if set. insert ( start) {
337
337
let mut stack = vec ! [ query. indices[ start] ] ;
338
338
while let Some ( index) = stack. pop ( ) {
339
339
for ( _, edge) in query. graph . adjacent_edges ( index, direction) {
340
340
let neighbor_index = edge. source_or_target ( direction) ;
341
341
let neighbor = query. graph . node_data ( neighbor_index) ;
342
- if set. insert ( * neighbor) {
342
+ if set. insert ( neighbor) {
343
343
stack. push ( neighbor_index) ;
344
344
}
345
345
}
@@ -349,10 +349,10 @@ fn walk_nodes(query: &DepGraphQuery<DefId>,
349
349
set
350
350
}
351
351
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 > >
356
356
{
357
357
// This is a bit tricky. We want to include a node only if it is:
358
358
// (a) reachable from a source and (b) will reach a target. And we
@@ -365,16 +365,16 @@ fn walk_between(query: &DepGraphQuery<DefId>,
365
365
let mut node_states = vec ! [ State :: Undecided ; query. graph. len_nodes( ) ] ;
366
366
367
367
for & target in targets {
368
- node_states[ query. indices [ & target] . 0 ] = State :: Included ;
368
+ node_states[ query. indices [ target] . 0 ] = State :: Included ;
369
369
}
370
370
371
- for source in sources. iter ( ) . map ( |n| query. indices [ n] ) {
371
+ for source in sources. iter ( ) . map ( |& n| query. indices [ n] ) {
372
372
recurse ( query, & mut node_states, source) ;
373
373
}
374
374
375
375
return query. nodes ( )
376
376
. into_iter ( )
377
- . filter ( |n| {
377
+ . filter ( |& n| {
378
378
let index = query. indices [ n] ;
379
379
node_states[ index. 0 ] == State :: Included
380
380
} )
@@ -417,12 +417,12 @@ fn walk_between(query: &DepGraphQuery<DefId>,
417
417
}
418
418
}
419
419
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 > ) >
423
423
{
424
424
query. edges ( )
425
425
. into_iter ( )
426
- . filter ( |& ( source, target) | nodes. contains ( & source) && nodes. contains ( & target) )
426
+ . filter ( |& ( source, target) | nodes. contains ( source) && nodes. contains ( target) )
427
427
. collect ( )
428
428
}
0 commit comments