@@ -29,7 +29,7 @@ pub(super) struct NodeCollector<'a, 'hir> {
29
29
/// The crate
30
30
krate : & ' hir Crate ,
31
31
/// The node map
32
- map : Vec < MapEntry < ' hir > > ,
32
+ map : Vec < Option < Entry < ' hir > > > ,
33
33
/// The parent of this node
34
34
parent_node : NodeId ,
35
35
@@ -114,7 +114,11 @@ impl<'a, 'hir> NodeCollector<'a, 'hir> {
114
114
hcx,
115
115
hir_body_nodes,
116
116
} ;
117
- collector. insert_entry ( CRATE_NODE_ID , RootCrate ( root_mod_sig_dep_index) ) ;
117
+ collector. insert_entry ( CRATE_NODE_ID , Entry {
118
+ parent : CRATE_NODE_ID ,
119
+ dep_node : root_mod_sig_dep_index,
120
+ node : Node :: Crate ,
121
+ } ) ;
118
122
119
123
collector
120
124
}
@@ -124,9 +128,8 @@ impl<'a, 'hir> NodeCollector<'a, 'hir> {
124
128
cstore : & dyn CrateStore ,
125
129
source_map : & SourceMap ,
126
130
commandline_args_hash : u64 )
127
- -> ( Vec < MapEntry < ' hir > > , Svh ) {
128
- self
129
- . hir_body_nodes
131
+ -> ( Vec < Option < Entry < ' hir > > > , Svh ) {
132
+ self . hir_body_nodes
130
133
. sort_unstable_by ( |& ( ref d1, _) , & ( ref d2, _) | d1. cmp ( d2) ) ;
131
134
132
135
let node_hashes = self
@@ -178,44 +181,24 @@ impl<'a, 'hir> NodeCollector<'a, 'hir> {
178
181
( self . map , svh)
179
182
}
180
183
181
- fn insert_entry ( & mut self , id : NodeId , entry : MapEntry < ' hir > ) {
184
+ fn insert_entry ( & mut self , id : NodeId , entry : Entry < ' hir > ) {
182
185
debug ! ( "hir_map: {:?} => {:?}" , id, entry) ;
183
186
let len = self . map . len ( ) ;
184
187
if id. as_usize ( ) >= len {
185
- self . map . extend ( repeat ( NotPresent ) . take ( id. as_usize ( ) - len + 1 ) ) ;
188
+ self . map . extend ( repeat ( None ) . take ( id. as_usize ( ) - len + 1 ) ) ;
186
189
}
187
- self . map [ id. as_usize ( ) ] = entry;
190
+ self . map [ id. as_usize ( ) ] = Some ( entry) ;
188
191
}
189
192
190
193
fn insert ( & mut self , id : NodeId , node : Node < ' hir > ) {
191
- let parent = self . parent_node ;
192
- let dep_node_index = if self . currently_in_body {
193
- self . current_full_dep_index
194
- } else {
195
- self . current_signature_dep_index
196
- } ;
197
-
198
- let entry = match node {
199
- NodeItem ( n) => EntryItem ( parent, dep_node_index, n) ,
200
- NodeForeignItem ( n) => EntryForeignItem ( parent, dep_node_index, n) ,
201
- NodeTraitItem ( n) => EntryTraitItem ( parent, dep_node_index, n) ,
202
- NodeImplItem ( n) => EntryImplItem ( parent, dep_node_index, n) ,
203
- NodeVariant ( n) => EntryVariant ( parent, dep_node_index, n) ,
204
- NodeField ( n) => EntryField ( parent, dep_node_index, n) ,
205
- NodeAnonConst ( n) => EntryAnonConst ( parent, dep_node_index, n) ,
206
- NodeExpr ( n) => EntryExpr ( parent, dep_node_index, n) ,
207
- NodeStmt ( n) => EntryStmt ( parent, dep_node_index, n) ,
208
- NodeTy ( n) => EntryTy ( parent, dep_node_index, n) ,
209
- NodeTraitRef ( n) => EntryTraitRef ( parent, dep_node_index, n) ,
210
- NodeBinding ( n) => EntryBinding ( parent, dep_node_index, n) ,
211
- NodePat ( n) => EntryPat ( parent, dep_node_index, n) ,
212
- NodeBlock ( n) => EntryBlock ( parent, dep_node_index, n) ,
213
- NodeStructCtor ( n) => EntryStructCtor ( parent, dep_node_index, n) ,
214
- NodeLifetime ( n) => EntryLifetime ( parent, dep_node_index, n) ,
215
- NodeGenericParam ( n) => EntryGenericParam ( parent, dep_node_index, n) ,
216
- NodeVisibility ( n) => EntryVisibility ( parent, dep_node_index, n) ,
217
- NodeLocal ( n) => EntryLocal ( parent, dep_node_index, n) ,
218
- NodeMacroDef ( n) => EntryMacroDef ( dep_node_index, n) ,
194
+ let entry = Entry {
195
+ parent : self . parent_node ,
196
+ dep_node : if self . currently_in_body {
197
+ self . current_full_dep_index
198
+ } else {
199
+ self . current_signature_dep_index
200
+ } ,
201
+ node,
219
202
} ;
220
203
221
204
// Make sure that the DepNode of some node coincides with the HirId
@@ -326,13 +309,13 @@ impl<'a, 'hir> Visitor<'hir> for NodeCollector<'a, 'hir> {
326
309
debug_assert_eq ! ( i. hir_id. owner,
327
310
self . definitions. opt_def_index( i. id) . unwrap( ) ) ;
328
311
self . with_dep_node_owner ( i. hir_id . owner , i, |this| {
329
- this. insert ( i. id , NodeItem ( i) ) ;
312
+ this. insert ( i. id , Node :: Item ( i) ) ;
330
313
this. with_parent ( i. id , |this| {
331
314
match i. node {
332
315
ItemKind :: Struct ( ref struct_def, _) => {
333
316
// If this is a tuple-like struct, register the constructor.
334
317
if !struct_def. is_struct ( ) {
335
- this. insert ( struct_def. id ( ) , NodeStructCtor ( struct_def) ) ;
318
+ this. insert ( struct_def. id ( ) , Node :: StructCtor ( struct_def) ) ;
336
319
}
337
320
}
338
321
_ => { }
@@ -343,23 +326,23 @@ impl<'a, 'hir> Visitor<'hir> for NodeCollector<'a, 'hir> {
343
326
}
344
327
345
328
fn visit_foreign_item ( & mut self , foreign_item : & ' hir ForeignItem ) {
346
- self . insert ( foreign_item. id , NodeForeignItem ( foreign_item) ) ;
329
+ self . insert ( foreign_item. id , Node :: ForeignItem ( foreign_item) ) ;
347
330
348
331
self . with_parent ( foreign_item. id , |this| {
349
332
intravisit:: walk_foreign_item ( this, foreign_item) ;
350
333
} ) ;
351
334
}
352
335
353
336
fn visit_generic_param ( & mut self , param : & ' hir GenericParam ) {
354
- self . insert ( param. id , NodeGenericParam ( param) ) ;
337
+ self . insert ( param. id , Node :: GenericParam ( param) ) ;
355
338
intravisit:: walk_generic_param ( self , param) ;
356
339
}
357
340
358
341
fn visit_trait_item ( & mut self , ti : & ' hir TraitItem ) {
359
342
debug_assert_eq ! ( ti. hir_id. owner,
360
343
self . definitions. opt_def_index( ti. id) . unwrap( ) ) ;
361
344
self . with_dep_node_owner ( ti. hir_id . owner , ti, |this| {
362
- this. insert ( ti. id , NodeTraitItem ( ti) ) ;
345
+ this. insert ( ti. id , Node :: TraitItem ( ti) ) ;
363
346
364
347
this. with_parent ( ti. id , |this| {
365
348
intravisit:: walk_trait_item ( this, ti) ;
@@ -371,7 +354,7 @@ impl<'a, 'hir> Visitor<'hir> for NodeCollector<'a, 'hir> {
371
354
debug_assert_eq ! ( ii. hir_id. owner,
372
355
self . definitions. opt_def_index( ii. id) . unwrap( ) ) ;
373
356
self . with_dep_node_owner ( ii. hir_id . owner , ii, |this| {
374
- this. insert ( ii. id , NodeImplItem ( ii) ) ;
357
+ this. insert ( ii. id , Node :: ImplItem ( ii) ) ;
375
358
376
359
this. with_parent ( ii. id , |this| {
377
360
intravisit:: walk_impl_item ( this, ii) ;
@@ -381,9 +364,9 @@ impl<'a, 'hir> Visitor<'hir> for NodeCollector<'a, 'hir> {
381
364
382
365
fn visit_pat ( & mut self , pat : & ' hir Pat ) {
383
366
let node = if let PatKind :: Binding ( ..) = pat. node {
384
- NodeBinding ( pat)
367
+ Node :: Binding ( pat)
385
368
} else {
386
- NodePat ( pat)
369
+ Node :: Pat ( pat)
387
370
} ;
388
371
self . insert ( pat. id , node) ;
389
372
@@ -393,15 +376,15 @@ impl<'a, 'hir> Visitor<'hir> for NodeCollector<'a, 'hir> {
393
376
}
394
377
395
378
fn visit_anon_const ( & mut self , constant : & ' hir AnonConst ) {
396
- self . insert ( constant. id , NodeAnonConst ( constant) ) ;
379
+ self . insert ( constant. id , Node :: AnonConst ( constant) ) ;
397
380
398
381
self . with_parent ( constant. id , |this| {
399
382
intravisit:: walk_anon_const ( this, constant) ;
400
383
} ) ;
401
384
}
402
385
403
386
fn visit_expr ( & mut self , expr : & ' hir Expr ) {
404
- self . insert ( expr. id , NodeExpr ( expr) ) ;
387
+ self . insert ( expr. id , Node :: Expr ( expr) ) ;
405
388
406
389
self . with_parent ( expr. id , |this| {
407
390
intravisit:: walk_expr ( this, expr) ;
@@ -410,23 +393,23 @@ impl<'a, 'hir> Visitor<'hir> for NodeCollector<'a, 'hir> {
410
393
411
394
fn visit_stmt ( & mut self , stmt : & ' hir Stmt ) {
412
395
let id = stmt. node . id ( ) ;
413
- self . insert ( id, NodeStmt ( stmt) ) ;
396
+ self . insert ( id, Node :: Stmt ( stmt) ) ;
414
397
415
398
self . with_parent ( id, |this| {
416
399
intravisit:: walk_stmt ( this, stmt) ;
417
400
} ) ;
418
401
}
419
402
420
403
fn visit_ty ( & mut self , ty : & ' hir Ty ) {
421
- self . insert ( ty. id , NodeTy ( ty) ) ;
404
+ self . insert ( ty. id , Node :: Ty ( ty) ) ;
422
405
423
406
self . with_parent ( ty. id , |this| {
424
407
intravisit:: walk_ty ( this, ty) ;
425
408
} ) ;
426
409
}
427
410
428
411
fn visit_trait_ref ( & mut self , tr : & ' hir TraitRef ) {
429
- self . insert ( tr. ref_id , NodeTraitRef ( tr) ) ;
412
+ self . insert ( tr. ref_id , Node :: TraitRef ( tr) ) ;
430
413
431
414
self . with_parent ( tr. ref_id , |this| {
432
415
intravisit:: walk_trait_ref ( this, tr) ;
@@ -440,21 +423,21 @@ impl<'a, 'hir> Visitor<'hir> for NodeCollector<'a, 'hir> {
440
423
}
441
424
442
425
fn visit_block ( & mut self , block : & ' hir Block ) {
443
- self . insert ( block. id , NodeBlock ( block) ) ;
426
+ self . insert ( block. id , Node :: Block ( block) ) ;
444
427
self . with_parent ( block. id , |this| {
445
428
intravisit:: walk_block ( this, block) ;
446
429
} ) ;
447
430
}
448
431
449
432
fn visit_local ( & mut self , l : & ' hir Local ) {
450
- self . insert ( l. id , NodeLocal ( l) ) ;
433
+ self . insert ( l. id , Node :: Local ( l) ) ;
451
434
self . with_parent ( l. id , |this| {
452
435
intravisit:: walk_local ( this, l)
453
436
} )
454
437
}
455
438
456
439
fn visit_lifetime ( & mut self , lifetime : & ' hir Lifetime ) {
457
- self . insert ( lifetime. id , NodeLifetime ( lifetime) ) ;
440
+ self . insert ( lifetime. id , Node :: Lifetime ( lifetime) ) ;
458
441
}
459
442
460
443
fn visit_vis ( & mut self , visibility : & ' hir Visibility ) {
@@ -463,7 +446,7 @@ impl<'a, 'hir> Visitor<'hir> for NodeCollector<'a, 'hir> {
463
446
VisibilityKind :: Crate ( _) |
464
447
VisibilityKind :: Inherited => { }
465
448
VisibilityKind :: Restricted { id, .. } => {
466
- self . insert ( id, NodeVisibility ( visibility) ) ;
449
+ self . insert ( id, Node :: Visibility ( visibility) ) ;
467
450
self . with_parent ( id, |this| {
468
451
intravisit:: walk_vis ( this, visibility) ;
469
452
} ) ;
@@ -475,20 +458,20 @@ impl<'a, 'hir> Visitor<'hir> for NodeCollector<'a, 'hir> {
475
458
let def_index = self . definitions . opt_def_index ( macro_def. id ) . unwrap ( ) ;
476
459
477
460
self . with_dep_node_owner ( def_index, macro_def, |this| {
478
- this. insert ( macro_def. id , NodeMacroDef ( macro_def) ) ;
461
+ this. insert ( macro_def. id , Node :: MacroDef ( macro_def) ) ;
479
462
} ) ;
480
463
}
481
464
482
465
fn visit_variant ( & mut self , v : & ' hir Variant , g : & ' hir Generics , item_id : NodeId ) {
483
466
let id = v. node . data . id ( ) ;
484
- self . insert ( id, NodeVariant ( v) ) ;
467
+ self . insert ( id, Node :: Variant ( v) ) ;
485
468
self . with_parent ( id, |this| {
486
469
intravisit:: walk_variant ( this, v, g, item_id) ;
487
470
} ) ;
488
471
}
489
472
490
473
fn visit_struct_field ( & mut self , field : & ' hir StructField ) {
491
- self . insert ( field. id , NodeField ( field) ) ;
474
+ self . insert ( field. id , Node :: Field ( field) ) ;
492
475
self . with_parent ( field. id , |this| {
493
476
intravisit:: walk_struct_field ( this, field) ;
494
477
} ) ;
0 commit comments