@@ -81,13 +81,12 @@ pub struct Definitions {
81
81
82
82
def_id_to_span : IndexVec < LocalDefId , Span > ,
83
83
84
- // FIXME(eddyb) don't go through `ast::NodeId` to convert between `HirId`
85
- // and `LocalDefId` - ideally all `LocalDefId`s would be HIR owners.
86
84
node_id_to_def_id : FxHashMap < ast:: NodeId , LocalDefId > ,
87
85
def_id_to_node_id : IndexVec < LocalDefId , ast:: NodeId > ,
88
86
89
- pub ( super ) node_id_to_hir_id : IndexVec < ast:: NodeId , Option < hir:: HirId > > ,
90
- /// The pre-computed mapping of `hir_id_to_node_id` -> `node_id_to_def_id`.
87
+ // FIXME(eddyb) ideally all `LocalDefId`s would be HIR owners.
88
+ pub ( super ) def_id_to_hir_id : IndexVec < LocalDefId , Option < hir:: HirId > > ,
89
+ /// The reverse mapping of `def_id_to_hir_id`.
91
90
pub ( super ) hir_id_to_def_id : FxHashMap < hir:: HirId , LocalDefId > ,
92
91
93
92
/// If `ExpnId` is an ID of some macro expansion,
@@ -327,9 +326,7 @@ impl Definitions {
327
326
328
327
#[ inline]
329
328
pub fn local_def_id ( & self , node : ast:: NodeId ) -> LocalDefId {
330
- self . opt_local_def_id ( node) . unwrap_or_else ( || {
331
- panic ! ( "no entry for node id: `{:?}` / `{:?}`" , node, self . node_id_to_hir_id. get( node) )
332
- } )
329
+ self . opt_local_def_id ( node) . unwrap_or_else ( || panic ! ( "no entry for node id: `{:?}`" , node) )
333
330
}
334
331
335
332
#[ inline]
@@ -339,14 +336,12 @@ impl Definitions {
339
336
340
337
#[ inline]
341
338
pub fn local_def_id_to_hir_id ( & self , id : LocalDefId ) -> hir:: HirId {
342
- let node_id = self . def_id_to_node_id [ id] ;
343
- self . node_id_to_hir_id [ node_id] . unwrap ( )
339
+ self . def_id_to_hir_id [ id] . unwrap ( )
344
340
}
345
341
346
342
#[ inline]
347
343
pub fn opt_local_def_id_to_hir_id ( & self , id : LocalDefId ) -> Option < hir:: HirId > {
348
- let node_id = self . def_id_to_node_id [ id] ;
349
- self . node_id_to_hir_id [ node_id]
344
+ self . def_id_to_hir_id [ id]
350
345
}
351
346
352
347
#[ inline]
@@ -461,16 +456,20 @@ impl Definitions {
461
456
mapping : IndexVec < ast:: NodeId , Option < hir:: HirId > > ,
462
457
) {
463
458
assert ! (
464
- self . node_id_to_hir_id . is_empty( ) ,
465
- "trying to initialize `NodeId` -> `HirId` mapping twice"
459
+ self . def_id_to_hir_id . is_empty( ) ,
460
+ "trying to initialize `LocalDefId` < -> `HirId` mappings twice"
466
461
) ;
467
- self . node_id_to_hir_id = mapping;
468
462
469
- // Build the pre-computed mapping of `hir_id_to_node_id` -> `node_id_to_def_id`.
470
- self . hir_id_to_def_id = self
471
- . node_id_to_hir_id
472
- . iter_enumerated ( )
473
- . filter_map ( |( node_id, & hir_id) | {
463
+ self . def_id_to_hir_id = self
464
+ . def_id_to_node_id
465
+ . iter ( )
466
+ . map ( |& node_id| mapping. get ( node_id) . and_then ( |& hir_id| hir_id) )
467
+ . collect ( ) ;
468
+
469
+ // Build the reverse mapping of `def_id_to_hir_id`.
470
+ self . hir_id_to_def_id = mapping
471
+ . into_iter_enumerated ( )
472
+ . filter_map ( |( node_id, hir_id) | {
474
473
hir_id. and_then ( |hir_id| {
475
474
self . node_id_to_def_id . get ( & node_id) . map ( |& def_id| ( hir_id, def_id) )
476
475
} )
0 commit comments