Skip to content

Commit 525f379

Browse files
committed
Store next_disambiguator in Definitions.
1 parent 6713fe9 commit 525f379

File tree

2 files changed

+9
-14
lines changed

2 files changed

+9
-14
lines changed

compiler/rustc_hir/src/definitions.rs

+8-2
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ pub struct DefPathTable {
2929
index_to_key: IndexVec<DefIndex, DefKey>,
3030
def_path_hashes: IndexVec<DefIndex, DefPathHash>,
3131
def_path_hash_to_index: DefPathHashMap,
32+
next_disambiguator: FxHashMap<(LocalDefId, DefPathData), u32>,
3233
}
3334

3435
impl DefPathTable {
@@ -380,15 +381,20 @@ impl Definitions {
380381
parent: LocalDefId,
381382
data: DefPathData,
382383
expn_id: ExpnId,
383-
mut next_disambiguator: impl FnMut(LocalDefId, DefPathData) -> u32,
384384
span: Span,
385385
) -> LocalDefId {
386386
debug!("create_def(parent={:?}, data={:?}, expn_id={:?})", parent, data, expn_id);
387387

388388
// The root node must be created with `create_root_def()`.
389389
assert!(data != DefPathData::CrateRoot);
390390

391-
let disambiguator = next_disambiguator(parent, data);
391+
// Find the next free disambiguator for this key.
392+
let disambiguator = {
393+
let next_disamb = self.table.next_disambiguator.entry((parent, data)).or_insert(0);
394+
let disambiguator = *next_disamb;
395+
*next_disamb = next_disamb.checked_add(1).expect("disambiguator overflow");
396+
disambiguator
397+
};
392398
let key = DefKey {
393399
parent: Some(parent.local_def_index),
394400
disambiguated_data: DisambiguatedDefPathData { data, disambiguator },

compiler/rustc_resolve/src/lib.rs

+1-12
Original file line numberDiff line numberDiff line change
@@ -1037,7 +1037,6 @@ pub struct Resolver<'a> {
10371037
/// and how the `impl Trait` fragments were introduced.
10381038
invocation_parents: FxHashMap<LocalExpnId, (LocalDefId, ImplTraitContext)>,
10391039

1040-
next_disambiguator: FxHashMap<(LocalDefId, DefPathData), u32>,
10411040
/// Some way to know that we are in a *trait* impl in `visit_assoc_item`.
10421041
/// FIXME: Replace with a more general AST map (together with some other fields).
10431042
trait_impl_items: FxHashSet<LocalDefId>,
@@ -1230,16 +1229,7 @@ impl ResolverAstLowering for Resolver<'_> {
12301229
self.definitions.def_key(self.node_id_to_def_id[&node_id]),
12311230
);
12321231

1233-
// Find the next free disambiguator for this key.
1234-
let next_disambiguator = &mut self.next_disambiguator;
1235-
let next_disambiguator = |parent, data| {
1236-
let next_disamb = next_disambiguator.entry((parent, data)).or_insert(0);
1237-
let disambiguator = *next_disamb;
1238-
*next_disamb = next_disamb.checked_add(1).expect("disambiguator overflow");
1239-
disambiguator
1240-
};
1241-
1242-
let def_id = self.definitions.create_def(parent, data, expn_id, next_disambiguator, span);
1232+
let def_id = self.definitions.create_def(parent, data, expn_id, span);
12431233

12441234
// Some things for which we allocate `LocalDefId`s don't correspond to
12451235
// anything in the AST, so they don't have a `NodeId`. For these cases
@@ -1406,7 +1396,6 @@ impl<'a> Resolver<'a> {
14061396
def_id_to_node_id,
14071397
placeholder_field_indices: Default::default(),
14081398
invocation_parents,
1409-
next_disambiguator: Default::default(),
14101399
trait_impl_items: Default::default(),
14111400
legacy_const_generic_args: Default::default(),
14121401
item_generics_num_lifetimes: Default::default(),

0 commit comments

Comments
 (0)