Skip to content

Commit 8b3fb35

Browse files
committed
Revert "Pre-compute def_id_to_hir_id table"
This reverts commit 13104ef.
1 parent 1a4e2b6 commit 8b3fb35

File tree

1 file changed

+19
-18
lines changed

1 file changed

+19
-18
lines changed

src/librustc_hir/definitions.rs

Lines changed: 19 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -81,12 +81,13 @@ pub struct Definitions {
8181

8282
def_id_to_span: IndexVec<LocalDefId, Span>,
8383

84+
// FIXME(eddyb) don't go through `ast::NodeId` to convert between `HirId`
85+
// and `LocalDefId` - ideally all `LocalDefId`s would be HIR owners.
8486
node_id_to_def_id: FxHashMap<ast::NodeId, LocalDefId>,
8587
def_id_to_node_id: IndexVec<LocalDefId, ast::NodeId>,
8688

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`.
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`.
9091
pub(super) hir_id_to_def_id: FxHashMap<hir::HirId, LocalDefId>,
9192

9293
/// If `ExpnId` is an ID of some macro expansion,
@@ -326,7 +327,9 @@ impl Definitions {
326327

327328
#[inline]
328329
pub fn local_def_id(&self, node: ast::NodeId) -> LocalDefId {
329-
self.opt_local_def_id(node).unwrap_or_else(|| panic!("no entry for node id: `{:?}`", node))
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+
})
330333
}
331334

332335
#[inline]
@@ -336,12 +339,14 @@ impl Definitions {
336339

337340
#[inline]
338341
pub fn local_def_id_to_hir_id(&self, id: LocalDefId) -> hir::HirId {
339-
self.def_id_to_hir_id[id].unwrap()
342+
let node_id = self.def_id_to_node_id[id];
343+
self.node_id_to_hir_id[node_id].unwrap()
340344
}
341345

342346
#[inline]
343347
pub fn opt_local_def_id_to_hir_id(&self, id: LocalDefId) -> Option<hir::HirId> {
344-
self.def_id_to_hir_id[id]
348+
let node_id = self.def_id_to_node_id[id];
349+
self.node_id_to_hir_id[node_id]
345350
}
346351

347352
#[inline]
@@ -456,20 +461,16 @@ impl Definitions {
456461
mapping: IndexVec<ast::NodeId, Option<hir::HirId>>,
457462
) {
458463
assert!(
459-
self.def_id_to_hir_id.is_empty(),
460-
"trying to initialize `LocalDefId` <-> `HirId` mappings twice"
464+
self.node_id_to_hir_id.is_empty(),
465+
"trying to initialize `NodeId` -> `HirId` mapping twice"
461466
);
467+
self.node_id_to_hir_id = mapping;
462468

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)| {
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)| {
473474
hir_id.and_then(|hir_id| {
474475
self.node_id_to_def_id.get(&node_id).map(|&def_id| (hir_id, def_id))
475476
})

0 commit comments

Comments
 (0)