Skip to content

Commit c10a1ce

Browse files
committed
Store next_disambiguator in Definitions.
1 parent b29fa94 commit c10a1ce

File tree

2 files changed

+10
-14
lines changed

2 files changed

+10
-14
lines changed

compiler/rustc_hir/src/definitions.rs

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,7 @@ impl DefPathTable {
9999
#[derive(Clone, Debug)]
100100
pub struct Definitions {
101101
table: DefPathTable,
102+
next_disambiguator: FxHashMap<(LocalDefId, DefPathData), u32>,
102103

103104
/// Item with a given `LocalDefId` was defined during macro expansion with ID `ExpnId`.
104105
expansions_that_defined: FxHashMap<LocalDefId, ExpnId>,
@@ -340,6 +341,7 @@ impl Definitions {
340341

341342
Definitions {
342343
table,
344+
next_disambiguator: Default::default(),
343345
expansions_that_defined: Default::default(),
344346
def_id_to_span,
345347
stable_crate_id,
@@ -357,15 +359,20 @@ impl Definitions {
357359
parent: LocalDefId,
358360
data: DefPathData,
359361
expn_id: ExpnId,
360-
mut next_disambiguator: impl FnMut(LocalDefId, DefPathData) -> u32,
361362
span: Span,
362363
) -> LocalDefId {
363364
debug!("create_def(parent={:?}, data={:?}, expn_id={:?})", parent, data, expn_id);
364365

365366
// The root node must be created with `create_root_def()`.
366367
assert!(data != DefPathData::CrateRoot);
367368

368-
let disambiguator = next_disambiguator(parent, data);
369+
// Find the next free disambiguator for this key.
370+
let disambiguator = {
371+
let next_disamb = self.next_disambiguator.entry((parent, data)).or_insert(0);
372+
let disambiguator = *next_disamb;
373+
*next_disamb = next_disamb.checked_add(1).expect("disambiguator overflow");
374+
disambiguator
375+
};
369376
let key = DefKey {
370377
parent: Some(parent.local_def_index),
371378
disambiguated_data: DisambiguatedDefPathData { data, disambiguator },

compiler/rustc_resolve/src/lib.rs

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1061,7 +1061,6 @@ pub struct Resolver<'a> {
10611061
/// and how the `impl Trait` fragments were introduced.
10621062
invocation_parents: FxHashMap<LocalExpnId, (LocalDefId, ImplTraitContext)>,
10631063

1064-
next_disambiguator: FxHashMap<(LocalDefId, DefPathData), u32>,
10651064
/// Some way to know that we are in a *trait* impl in `visit_assoc_item`.
10661065
/// FIXME: Replace with a more general AST map (together with some other fields).
10671066
trait_impl_items: FxHashSet<LocalDefId>,
@@ -1249,16 +1248,7 @@ impl ResolverAstLowering for Resolver<'_> {
12491248
self.definitions.def_key(self.node_id_to_def_id[&node_id]),
12501249
);
12511250

1252-
// Find the next free disambiguator for this key.
1253-
let next_disambiguator = &mut self.next_disambiguator;
1254-
let next_disambiguator = |parent, data| {
1255-
let next_disamb = next_disambiguator.entry((parent, data)).or_insert(0);
1256-
let disambiguator = *next_disamb;
1257-
*next_disamb = next_disamb.checked_add(1).expect("disambiguator overflow");
1258-
disambiguator
1259-
};
1260-
1261-
let def_id = self.definitions.create_def(parent, data, expn_id, next_disambiguator, span);
1251+
let def_id = self.definitions.create_def(parent, data, expn_id, span);
12621252

12631253
// Some things for which we allocate `LocalDefId`s don't correspond to
12641254
// anything in the AST, so they don't have a `NodeId`. For these cases
@@ -1430,7 +1420,6 @@ impl<'a> Resolver<'a> {
14301420
def_id_to_node_id,
14311421
placeholder_field_indices: Default::default(),
14321422
invocation_parents,
1433-
next_disambiguator: Default::default(),
14341423
trait_impl_items: Default::default(),
14351424
legacy_const_generic_args: Default::default(),
14361425
item_generics_num_lifetimes: Default::default(),

0 commit comments

Comments
 (0)