@@ -29,7 +29,7 @@ pub(super) struct NodeCollector<'a, 'hir> {
2929 /// The crate
3030 krate : & ' hir Crate ,
3131 /// The node map
32- map : Vec < MapEntry < ' hir > > ,
32+ map : Vec < Option < Entry < ' hir > > > ,
3333 /// The parent of this node
3434 parent_node : NodeId ,
3535
@@ -114,7 +114,11 @@ impl<'a, 'hir> NodeCollector<'a, 'hir> {
114114 hcx,
115115 hir_body_nodes,
116116 } ;
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+ } ) ;
118122
119123 collector
120124 }
@@ -124,9 +128,8 @@ impl<'a, 'hir> NodeCollector<'a, 'hir> {
124128 cstore : & dyn CrateStore ,
125129 source_map : & SourceMap ,
126130 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
130133 . sort_unstable_by ( |& ( ref d1, _) , & ( ref d2, _) | d1. cmp ( d2) ) ;
131134
132135 let node_hashes = self
@@ -178,44 +181,24 @@ impl<'a, 'hir> NodeCollector<'a, 'hir> {
178181 ( self . map , svh)
179182 }
180183
181- fn insert_entry ( & mut self , id : NodeId , entry : MapEntry < ' hir > ) {
184+ fn insert_entry ( & mut self , id : NodeId , entry : Entry < ' hir > ) {
182185 debug ! ( "hir_map: {:?} => {:?}" , id, entry) ;
183186 let len = self . map . len ( ) ;
184187 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 ) ) ;
186189 }
187- self . map [ id. as_usize ( ) ] = entry;
190+ self . map [ id. as_usize ( ) ] = Some ( entry) ;
188191 }
189192
190193 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,
219202 } ;
220203
221204 // 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> {
326309 debug_assert_eq ! ( i. hir_id. owner,
327310 self . definitions. opt_def_index( i. id) . unwrap( ) ) ;
328311 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) ) ;
330313 this. with_parent ( i. id , |this| {
331314 match i. node {
332315 ItemKind :: Struct ( ref struct_def, _) => {
333316 // If this is a tuple-like struct, register the constructor.
334317 if !struct_def. is_struct ( ) {
335- this. insert ( struct_def. id ( ) , NodeStructCtor ( struct_def) ) ;
318+ this. insert ( struct_def. id ( ) , Node :: StructCtor ( struct_def) ) ;
336319 }
337320 }
338321 _ => { }
@@ -343,23 +326,23 @@ impl<'a, 'hir> Visitor<'hir> for NodeCollector<'a, 'hir> {
343326 }
344327
345328 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) ) ;
347330
348331 self . with_parent ( foreign_item. id , |this| {
349332 intravisit:: walk_foreign_item ( this, foreign_item) ;
350333 } ) ;
351334 }
352335
353336 fn visit_generic_param ( & mut self , param : & ' hir GenericParam ) {
354- self . insert ( param. id , NodeGenericParam ( param) ) ;
337+ self . insert ( param. id , Node :: GenericParam ( param) ) ;
355338 intravisit:: walk_generic_param ( self , param) ;
356339 }
357340
358341 fn visit_trait_item ( & mut self , ti : & ' hir TraitItem ) {
359342 debug_assert_eq ! ( ti. hir_id. owner,
360343 self . definitions. opt_def_index( ti. id) . unwrap( ) ) ;
361344 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) ) ;
363346
364347 this. with_parent ( ti. id , |this| {
365348 intravisit:: walk_trait_item ( this, ti) ;
@@ -371,7 +354,7 @@ impl<'a, 'hir> Visitor<'hir> for NodeCollector<'a, 'hir> {
371354 debug_assert_eq ! ( ii. hir_id. owner,
372355 self . definitions. opt_def_index( ii. id) . unwrap( ) ) ;
373356 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) ) ;
375358
376359 this. with_parent ( ii. id , |this| {
377360 intravisit:: walk_impl_item ( this, ii) ;
@@ -381,9 +364,9 @@ impl<'a, 'hir> Visitor<'hir> for NodeCollector<'a, 'hir> {
381364
382365 fn visit_pat ( & mut self , pat : & ' hir Pat ) {
383366 let node = if let PatKind :: Binding ( ..) = pat. node {
384- NodeBinding ( pat)
367+ Node :: Binding ( pat)
385368 } else {
386- NodePat ( pat)
369+ Node :: Pat ( pat)
387370 } ;
388371 self . insert ( pat. id , node) ;
389372
@@ -393,15 +376,15 @@ impl<'a, 'hir> Visitor<'hir> for NodeCollector<'a, 'hir> {
393376 }
394377
395378 fn visit_anon_const ( & mut self , constant : & ' hir AnonConst ) {
396- self . insert ( constant. id , NodeAnonConst ( constant) ) ;
379+ self . insert ( constant. id , Node :: AnonConst ( constant) ) ;
397380
398381 self . with_parent ( constant. id , |this| {
399382 intravisit:: walk_anon_const ( this, constant) ;
400383 } ) ;
401384 }
402385
403386 fn visit_expr ( & mut self , expr : & ' hir Expr ) {
404- self . insert ( expr. id , NodeExpr ( expr) ) ;
387+ self . insert ( expr. id , Node :: Expr ( expr) ) ;
405388
406389 self . with_parent ( expr. id , |this| {
407390 intravisit:: walk_expr ( this, expr) ;
@@ -410,23 +393,23 @@ impl<'a, 'hir> Visitor<'hir> for NodeCollector<'a, 'hir> {
410393
411394 fn visit_stmt ( & mut self , stmt : & ' hir Stmt ) {
412395 let id = stmt. node . id ( ) ;
413- self . insert ( id, NodeStmt ( stmt) ) ;
396+ self . insert ( id, Node :: Stmt ( stmt) ) ;
414397
415398 self . with_parent ( id, |this| {
416399 intravisit:: walk_stmt ( this, stmt) ;
417400 } ) ;
418401 }
419402
420403 fn visit_ty ( & mut self , ty : & ' hir Ty ) {
421- self . insert ( ty. id , NodeTy ( ty) ) ;
404+ self . insert ( ty. id , Node :: Ty ( ty) ) ;
422405
423406 self . with_parent ( ty. id , |this| {
424407 intravisit:: walk_ty ( this, ty) ;
425408 } ) ;
426409 }
427410
428411 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) ) ;
430413
431414 self . with_parent ( tr. ref_id , |this| {
432415 intravisit:: walk_trait_ref ( this, tr) ;
@@ -440,21 +423,21 @@ impl<'a, 'hir> Visitor<'hir> for NodeCollector<'a, 'hir> {
440423 }
441424
442425 fn visit_block ( & mut self , block : & ' hir Block ) {
443- self . insert ( block. id , NodeBlock ( block) ) ;
426+ self . insert ( block. id , Node :: Block ( block) ) ;
444427 self . with_parent ( block. id , |this| {
445428 intravisit:: walk_block ( this, block) ;
446429 } ) ;
447430 }
448431
449432 fn visit_local ( & mut self , l : & ' hir Local ) {
450- self . insert ( l. id , NodeLocal ( l) ) ;
433+ self . insert ( l. id , Node :: Local ( l) ) ;
451434 self . with_parent ( l. id , |this| {
452435 intravisit:: walk_local ( this, l)
453436 } )
454437 }
455438
456439 fn visit_lifetime ( & mut self , lifetime : & ' hir Lifetime ) {
457- self . insert ( lifetime. id , NodeLifetime ( lifetime) ) ;
440+ self . insert ( lifetime. id , Node :: Lifetime ( lifetime) ) ;
458441 }
459442
460443 fn visit_vis ( & mut self , visibility : & ' hir Visibility ) {
@@ -463,7 +446,7 @@ impl<'a, 'hir> Visitor<'hir> for NodeCollector<'a, 'hir> {
463446 VisibilityKind :: Crate ( _) |
464447 VisibilityKind :: Inherited => { }
465448 VisibilityKind :: Restricted { id, .. } => {
466- self . insert ( id, NodeVisibility ( visibility) ) ;
449+ self . insert ( id, Node :: Visibility ( visibility) ) ;
467450 self . with_parent ( id, |this| {
468451 intravisit:: walk_vis ( this, visibility) ;
469452 } ) ;
@@ -475,20 +458,20 @@ impl<'a, 'hir> Visitor<'hir> for NodeCollector<'a, 'hir> {
475458 let def_index = self . definitions . opt_def_index ( macro_def. id ) . unwrap ( ) ;
476459
477460 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) ) ;
479462 } ) ;
480463 }
481464
482465 fn visit_variant ( & mut self , v : & ' hir Variant , g : & ' hir Generics , item_id : NodeId ) {
483466 let id = v. node . data . id ( ) ;
484- self . insert ( id, NodeVariant ( v) ) ;
467+ self . insert ( id, Node :: Variant ( v) ) ;
485468 self . with_parent ( id, |this| {
486469 intravisit:: walk_variant ( this, v, g, item_id) ;
487470 } ) ;
488471 }
489472
490473 fn visit_struct_field ( & mut self , field : & ' hir StructField ) {
491- self . insert ( field. id , NodeField ( field) ) ;
474+ self . insert ( field. id , Node :: Field ( field) ) ;
492475 self . with_parent ( field. id , |this| {
493476 intravisit:: walk_struct_field ( this, field) ;
494477 } ) ;
0 commit comments