Skip to content

Commit face229

Browse files
committed
Load DefIds from the per owner table
1 parent 76d5040 commit face229

7 files changed

Lines changed: 80 additions & 73 deletions

File tree

compiler/rustc_resolve/src/check_unused.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ impl<'a, 'ra, 'tcx> UnusedImportCheckVisitor<'a, 'ra, 'tcx> {
8282
// used now. If an import is not used at all, we signal a lint error.
8383
fn check_import(&mut self, id: ast::NodeId) {
8484
let used = self.r.used_imports.contains(&id);
85-
let def_id = self.r.local_def_id(id);
85+
let def_id = self.r.owners[&id].def_id;
8686
if !used {
8787
if self.r.maybe_unused_trait_imports.contains(&def_id) {
8888
// Check later.
@@ -101,7 +101,7 @@ impl<'a, 'ra, 'tcx> UnusedImportCheckVisitor<'a, 'ra, 'tcx> {
101101
}
102102

103103
fn check_use_tree(&mut self, use_tree: &'a ast::UseTree, id: ast::NodeId) {
104-
if self.r.effective_visibilities.is_exported(self.r.local_def_id(id)) {
104+
if self.r.effective_visibilities.is_exported(self.r.owners[&id].def_id) {
105105
self.check_import_as_underscore(use_tree, id);
106106
return;
107107
}
@@ -211,7 +211,7 @@ impl<'a, 'ra, 'tcx> UnusedImportCheckVisitor<'a, 'ra, 'tcx> {
211211

212212
let module = self
213213
.r
214-
.get_nearest_non_block_module(self.r.local_def_id(extern_crate.id).to_def_id());
214+
.get_nearest_non_block_module(self.r.owners[&extern_crate.id].def_id.to_def_id());
215215
if module.no_implicit_prelude {
216216
// If the module has `no_implicit_prelude`, then we don't suggest
217217
// replacing the extern crate with a use, as it would not be
@@ -416,7 +416,7 @@ impl Resolver<'_, '_> {
416416
}
417417
}
418418
ImportKind::ExternCrate { id, .. } => {
419-
let def_id = self.local_def_id(id);
419+
let def_id = self.owners[&id].def_id;
420420
if self.extern_crate_map.get(&def_id).is_none_or(|&cnum| {
421421
!tcx.is_compiler_builtins(cnum)
422422
&& !tcx.is_panic_runtime(cnum)
@@ -479,7 +479,7 @@ impl Resolver<'_, '_> {
479479
None
480480
} else {
481481
let parent_module = visitor.r.get_nearest_non_block_module(
482-
visitor.r.local_def_id(unused.use_tree_id).to_def_id(),
482+
visitor.r.owners[&unused.use_tree_id].def_id.to_def_id(),
483483
);
484484
match module_to_string(parent_module) {
485485
Some(module)

compiler/rustc_resolve/src/effective_visibilities.rs

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
use std::mem;
22

33
use rustc_ast::visit::Visitor;
4-
use rustc_ast::{Crate, EnumDef, ast, visit};
4+
use rustc_ast::{Crate, EnumDef, NodeId, ast, visit};
55
use rustc_data_structures::fx::FxHashSet;
66
use rustc_hir::def_id::{CRATE_DEF_ID, LocalDefId};
77
use rustc_middle::middle::privacy::{EffectiveVisibilities, EffectiveVisibility, Level};
@@ -47,7 +47,7 @@ impl Resolver<'_, '_> {
4747
Visibility::Restricted(
4848
import
4949
.id()
50-
.map(|id| self.nearest_normal_mod(self.local_def_id(id)))
50+
.map(|id| self.nearest_normal_mod(self.owners[&id].def_id))
5151
.unwrap_or(CRATE_DEF_ID),
5252
)
5353
}
@@ -97,7 +97,7 @@ impl<'a, 'ra, 'tcx> EffectiveVisibilitiesVisitor<'a, 'ra, 'tcx> {
9797
for (decl, eff_vis) in visitor.import_effective_visibilities.iter() {
9898
let DeclKind::Import { import, .. } = decl.kind else { unreachable!() };
9999
if let Some(node_id) = import.id() {
100-
r.effective_visibilities.update_eff_vis(r.local_def_id(node_id), eff_vis, r.tcx)
100+
r.effective_visibilities.update_eff_vis(r.owners[&node_id].def_id, eff_vis, r.tcx)
101101
}
102102
if decl.ambiguity.get().is_some() && eff_vis.is_public_at_level(Level::Reexported) {
103103
exported_ambiguities.insert(*decl);
@@ -206,11 +206,16 @@ impl<'a, 'ra, 'tcx> EffectiveVisibilitiesVisitor<'a, 'ra, 'tcx> {
206206
fn update_field(&mut self, def_id: LocalDefId, parent_id: LocalDefId) {
207207
self.update_def(def_id, self.r.tcx.local_visibility(def_id), ParentId::Def(parent_id));
208208
}
209+
210+
fn child_def_id(&self, parent: NodeId, child: NodeId) -> LocalDefId {
211+
let owner = &self.r.owners[&parent];
212+
owner.resolver_data.as_ref().unwrap().node_id_to_def_id[&child]
213+
}
209214
}
210215

211216
impl<'a, 'ra, 'tcx> Visitor<'a> for EffectiveVisibilitiesVisitor<'a, 'ra, 'tcx> {
212217
fn visit_item(&mut self, item: &'a ast::Item) {
213-
let def_id = self.r.local_def_id(item.id);
218+
let def_id = self.r.owners[&item.id].def_id;
214219
// Update effective visibilities of nested items.
215220
// If it's a mod, also make the visitor walk all of its items
216221
match item.kind {
@@ -233,16 +238,16 @@ impl<'a, 'ra, 'tcx> Visitor<'a> for EffectiveVisibilitiesVisitor<'a, 'ra, 'tcx>
233238
ast::ItemKind::Enum(_, _, EnumDef { ref variants }) => {
234239
self.set_bindings_effective_visibilities(def_id);
235240
for variant in variants {
236-
let variant_def_id = self.r.local_def_id(variant.id);
241+
let variant_def_id = self.child_def_id(item.id, variant.id);
237242
for field in variant.data.fields() {
238-
self.update_field(self.r.local_def_id(field.id), variant_def_id);
243+
self.update_field(self.child_def_id(item.id, field.id), variant_def_id);
239244
}
240245
}
241246
}
242247

243248
ast::ItemKind::Struct(_, _, ref def) | ast::ItemKind::Union(_, _, ref def) => {
244249
for field in def.fields() {
245-
self.update_field(self.r.local_def_id(field.id), def_id);
250+
self.update_field(self.child_def_id(item.id, field.id), def_id);
246251
}
247252
}
248253

compiler/rustc_resolve/src/imports.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -227,7 +227,7 @@ impl<'ra> ImportData<'ra> {
227227
}
228228

229229
pub(crate) fn simplify(&self, r: &Resolver<'_, '_>) -> Reexport {
230-
let to_def_id = |id| r.local_def_id(id).to_def_id();
230+
let to_def_id = |id| r.owners[&id].def_id.to_def_id();
231231
match self.kind {
232232
ImportKind::Single { id, .. } => Reexport::Single(to_def_id(id)),
233233
ImportKind::Glob { id, .. } => Reexport::Glob(to_def_id(id)),
@@ -737,7 +737,7 @@ impl<'ra, 'tcx> Resolver<'ra, 'tcx> {
737737
&& glob_decl.res() != Res::Err
738738
&& let DeclKind::Import { import: glob_import, .. } = glob_decl.kind
739739
&& let Some(glob_import_id) = glob_import.id()
740-
&& let glob_import_def_id = self.local_def_id(glob_import_id)
740+
&& let glob_import_def_id = self.owners[&glob_import_id].def_id
741741
&& self.effective_visibilities.is_exported(glob_import_def_id)
742742
&& glob_decl.vis().is_public()
743743
&& !binding.vis().is_public()
@@ -766,7 +766,7 @@ impl<'ra, 'tcx> Resolver<'ra, 'tcx> {
766766

767767
if let DeclKind::Import { import, .. } = binding.kind
768768
&& let Some(binding_id) = import.id()
769-
&& let import_def_id = self.local_def_id(binding_id)
769+
&& let import_def_id = self.owners[&binding_id].def_id
770770
&& self.effective_visibilities.is_exported(import_def_id)
771771
&& let Res::Def(reexported_kind, reexported_def_id) = binding.res()
772772
&& !matches!(reexported_kind, DefKind::Ctor(..))
@@ -1149,7 +1149,7 @@ impl<'ra, 'tcx> Resolver<'ra, 'tcx> {
11491149
if let Some(max_vis) = max_vis.get()
11501150
&& !max_vis.is_at_least(import.vis, self.tcx)
11511151
{
1152-
let def_id = self.local_def_id(id);
1152+
let def_id = self.owners[&id].def_id;
11531153
self.lint_buffer.buffer_lint(
11541154
UNUSED_IMPORTS,
11551155
id,
@@ -1394,7 +1394,7 @@ impl<'ra, 'tcx> Resolver<'ra, 'tcx> {
13941394
if !any_successful_reexport {
13951395
let (ns, binding) = reexport_error.unwrap();
13961396
if let Some(extern_crate_id) = pub_use_of_private_extern_crate_hack(import, binding) {
1397-
let extern_crate_sp = self.tcx.source_span(self.local_def_id(extern_crate_id));
1397+
let extern_crate_sp = self.tcx.source_span(self.owners[&extern_crate_id].def_id);
13981398
self.lint_buffer.buffer_lint(
13991399
PUB_USE_OF_PRIVATE_EXTERN_CRATE,
14001400
import_id,
@@ -1489,7 +1489,7 @@ impl<'ra, 'tcx> Resolver<'ra, 'tcx> {
14891489
// Skip if the import is public or was used through non scope-based resolution,
14901490
// e.g. through a module-relative path.
14911491
if self.import_use_map.get(&import) == Some(&Used::Other)
1492-
|| self.effective_visibilities.is_exported(self.local_def_id(id))
1492+
|| self.effective_visibilities.is_exported(self.owners[&id].def_id)
14931493
{
14941494
return false;
14951495
}

compiler/rustc_resolve/src/late.rs

Lines changed: 44 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -662,7 +662,7 @@ enum MaybeExported<'a> {
662662
impl MaybeExported<'_> {
663663
fn eval(self, r: &Resolver<'_, '_>) -> bool {
664664
let def_id = match self {
665-
MaybeExported::Ok(node_id) => Some(r.local_def_id(node_id)),
665+
MaybeExported::Ok(node_id) => Some(r.node_id_to_def_id[&node_id]),
666666
MaybeExported::Impl(Some(trait_def_id)) | MaybeExported::ImplItem(Ok(trait_def_id)) => {
667667
trait_def_id.as_local()
668668
}
@@ -1015,36 +1015,38 @@ impl<'ast, 'ra, 'tcx> Visitor<'ast> for LateResolutionVisitor<'_, 'ast, 'ra, 'tc
10151015
);
10161016
}
10171017
fn visit_foreign_item(&mut self, foreign_item: &'ast ForeignItem) {
1018-
self.resolve_doc_links(&foreign_item.attrs, MaybeExported::Ok(foreign_item.id));
1019-
let def_kind = self.r.local_def_kind(foreign_item.id);
1020-
match foreign_item.kind {
1021-
ForeignItemKind::TyAlias(box TyAlias { ref generics, .. }) => {
1022-
self.with_generic_param_rib(
1023-
&generics.params,
1024-
RibKind::Item(HasGenericParams::Yes(generics.span), def_kind),
1025-
foreign_item.id,
1026-
LifetimeBinderKind::Item,
1027-
generics.span,
1028-
|this| visit::walk_item(this, foreign_item),
1029-
);
1030-
}
1031-
ForeignItemKind::Fn(box Fn { ref generics, .. }) => {
1032-
self.with_generic_param_rib(
1033-
&generics.params,
1034-
RibKind::Item(HasGenericParams::Yes(generics.span), def_kind),
1035-
foreign_item.id,
1036-
LifetimeBinderKind::Function,
1037-
generics.span,
1038-
|this| visit::walk_item(this, foreign_item),
1039-
);
1040-
}
1041-
ForeignItemKind::Static(..) => {
1042-
self.with_static_rib(def_kind, |this| visit::walk_item(this, foreign_item))
1043-
}
1044-
ForeignItemKind::MacCall(..) => {
1045-
panic!("unexpanded macro in resolve!")
1018+
self.with_owner(foreign_item.id, |this| {
1019+
this.resolve_doc_links(&foreign_item.attrs, MaybeExported::Ok(foreign_item.id));
1020+
let def_kind = this.r.local_def_kind(foreign_item.id);
1021+
match foreign_item.kind {
1022+
ForeignItemKind::TyAlias(box TyAlias { ref generics, .. }) => {
1023+
this.with_generic_param_rib(
1024+
&generics.params,
1025+
RibKind::Item(HasGenericParams::Yes(generics.span), def_kind),
1026+
foreign_item.id,
1027+
LifetimeBinderKind::Item,
1028+
generics.span,
1029+
|this| visit::walk_item(this, foreign_item),
1030+
);
1031+
}
1032+
ForeignItemKind::Fn(box Fn { ref generics, .. }) => {
1033+
this.with_generic_param_rib(
1034+
&generics.params,
1035+
RibKind::Item(HasGenericParams::Yes(generics.span), def_kind),
1036+
foreign_item.id,
1037+
LifetimeBinderKind::Function,
1038+
generics.span,
1039+
|this| visit::walk_item(this, foreign_item),
1040+
);
1041+
}
1042+
ForeignItemKind::Static(..) => {
1043+
this.with_static_rib(def_kind, |this| visit::walk_item(this, foreign_item))
1044+
}
1045+
ForeignItemKind::MacCall(..) => {
1046+
panic!("unexpanded macro in resolve!")
1047+
}
10461048
}
1047-
}
1049+
})
10481050
}
10491051
fn visit_fn(&mut self, fn_kind: FnKind<'ast>, _: &AttrVec, sp: Span, fn_id: NodeId) {
10501052
let previous_value = self.diag_metadata.current_function;
@@ -2704,7 +2706,7 @@ impl<'a, 'ast, 'ra, 'tcx> LateResolutionVisitor<'a, 'ast, 'ra, 'tcx> {
27042706
LifetimeBinderKind::Item,
27052707
generics.span,
27062708
|this| {
2707-
let item_def_id = this.r.local_def_id(item.id).to_def_id();
2709+
let item_def_id = this.r.owners[&item.id].def_id.to_def_id();
27082710
this.with_self_rib(
27092711
Res::SelfTyAlias { alias_to: item_def_id, is_trait_impl: false },
27102712
|this| {
@@ -2818,7 +2820,7 @@ impl<'a, 'ast, 'ra, 'tcx> LateResolutionVisitor<'a, 'ast, 'ra, 'tcx> {
28182820
LifetimeBinderKind::Item,
28192821
generics.span,
28202822
|this| {
2821-
let local_def_id = this.r.local_def_id(item.id).to_def_id();
2823+
let local_def_id = this.r.owners[&item.id].def_id.to_def_id();
28222824
this.with_self_rib(Res::SelfTyParam { trait_: local_def_id }, |this| {
28232825
this.visit_generics(generics);
28242826
walk_list!(this, visit_param_bound, bounds, BoundKind::SuperTraits);
@@ -2837,7 +2839,7 @@ impl<'a, 'ast, 'ra, 'tcx> LateResolutionVisitor<'a, 'ast, 'ra, 'tcx> {
28372839
LifetimeBinderKind::Item,
28382840
generics.span,
28392841
|this| {
2840-
let local_def_id = this.r.local_def_id(item.id).to_def_id();
2842+
let local_def_id = this.r.owners[&item.id].def_id.to_def_id();
28412843
this.with_self_rib(Res::SelfTyParam { trait_: local_def_id }, |this| {
28422844
this.visit_generics(generics);
28432845
walk_list!(this, visit_param_bound, bounds, BoundKind::Bound);
@@ -2847,7 +2849,7 @@ impl<'a, 'ast, 'ra, 'tcx> LateResolutionVisitor<'a, 'ast, 'ra, 'tcx> {
28472849
}
28482850

28492851
ItemKind::Mod(..) => {
2850-
let module = self.r.expect_module(self.r.local_def_id(item.id).to_def_id());
2852+
let module = self.r.expect_module(self.r.owners[&item.id].def_id.to_def_id());
28512853
let orig_module = replace(&mut self.parent_scope.module, module);
28522854
self.with_rib(ValueNS, RibKind::Module(module), |this| {
28532855
this.with_rib(TypeNS, RibKind::Module(module), |this| {
@@ -2970,7 +2972,7 @@ impl<'a, 'ast, 'ra, 'tcx> LateResolutionVisitor<'a, 'ast, 'ra, 'tcx> {
29702972
// Maintain macro_rules scopes in the same way as during early resolution
29712973
// for diagnostics and doc links.
29722974
if macro_def.macro_rules {
2973-
let def_id = self.r.local_def_id(item.id);
2975+
let def_id = self.r.owners[&item.id].def_id;
29742976
self.parent_scope.macro_rules = self.r.macro_rules_scopes[&def_id];
29752977
}
29762978

@@ -3131,7 +3133,7 @@ impl<'a, 'ast, 'ra, 'tcx> LateResolutionVisitor<'a, 'ast, 'ra, 'tcx> {
31313133
continue;
31323134
}
31333135

3134-
let def_id = self.r.local_def_id(param.id);
3136+
let def_id = self.r.node_id_to_def_id[&param.id];
31353137

31363138
// Plain insert (no renaming).
31373139
let (rib, def_kind) = match param.kind {
@@ -3446,7 +3448,7 @@ impl<'a, 'ast, 'ra, 'tcx> LateResolutionVisitor<'a, 'ast, 'ra, 'tcx> {
34463448
|this, trait_id| {
34473449
this.resolve_doc_links(attrs, MaybeExported::Impl(trait_id));
34483450

3449-
let item_def_id = this.r.local_def_id(item_id);
3451+
let item_def_id = this.r.owners[&item_id].def_id;
34503452

34513453
// Register the trait definitions from here.
34523454
if let Some(trait_id) = trait_id {
@@ -3837,7 +3839,7 @@ impl<'a, 'ast, 'ra, 'tcx> LateResolutionVisitor<'a, 'ast, 'ra, 'tcx> {
38373839
self.visit_path(&delegation.path);
38383840

38393841
self.r.delegation_infos.insert(
3840-
self.r.local_def_id(item_id),
3842+
self.r.owners[&item_id].def_id,
38413843
DelegationInfo {
38423844
attrs: create_delegation_attrs(attrs),
38433845
resolution_node: if is_in_trait_impl { item_id } else { delegation.id },
@@ -4975,7 +4977,7 @@ impl<'a, 'ast, 'ra, 'tcx> LateResolutionVisitor<'a, 'ast, 'ra, 'tcx> {
49754977
&& let ItemKind::MacroDef(..) = item.kind
49764978
{
49774979
num_macro_definition_ribs += 1;
4978-
let res = self.r.local_def_id(item.id).to_def_id();
4980+
let res = self.r.owners[&item.id].def_id.to_def_id();
49794981
self.ribs[ValueNS].push(Rib::new(RibKind::MacroDefinition(res)));
49804982
self.label_ribs.push(Rib::new(RibKind::MacroDefinition(res)));
49814983
}
@@ -5458,7 +5460,7 @@ impl ItemInfoCollector<'_, '_, '_> {
54585460
attrs: &[Attribute],
54595461
) {
54605462
self.r.delegation_fn_sigs.insert(
5461-
self.r.local_def_id(id),
5463+
self.r.owners[&id].def_id,
54625464
DelegationFnSig {
54635465
header,
54645466
param_count: decl.inputs.len(),
@@ -5538,7 +5540,7 @@ impl<'ast> Visitor<'ast> for ItemInfoCollector<'_, '_, '_> {
55385540
self.collect_fn_info(sig.header, &sig.decl, item.id, &item.attrs);
55395541
}
55405542

5541-
let def_id = self.r.local_def_id(item.id);
5543+
let def_id = self.r.owners[&item.id].def_id;
55425544
let count = generics
55435545
.params
55445546
.iter()
@@ -5582,7 +5584,7 @@ impl<'ast> Visitor<'ast> for ItemInfoCollector<'_, '_, '_> {
55825584
}
55835585

55845586
if let AssocItemKind::Type(box ast::TyAlias { generics, .. }) = &item.kind {
5585-
let def_id = self.r.local_def_id(item.id);
5587+
let def_id = self.r.owners[&item.id].def_id;
55865588
if let Some(suggestion) = required_generic_args_suggestion(generics) {
55875589
self.r.item_required_generic_args_suggestions.insert(def_id, suggestion);
55885590
}

compiler/rustc_resolve/src/late/diagnostics.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2801,7 +2801,7 @@ impl<'ast, 'ra, 'tcx> LateResolutionVisitor<'_, 'ast, 'ra, 'tcx> {
28012801
if self
28022802
.r
28032803
.delegation_fn_sigs
2804-
.get(&self.r.local_def_id(assoc_item.id))
2804+
.get(&self.r.node_id_to_def_id[&assoc_item.id])
28052805
.is_some_and(|sig| sig.has_self) =>
28062806
{
28072807
AssocSuggestion::MethodWithSelf { called }
@@ -3408,7 +3408,7 @@ impl<'ast, 'ra, 'tcx> LateResolutionVisitor<'_, 'ast, 'ra, 'tcx> {
34083408
for (param_index, param) in params.iter().enumerate() {
34093409
let GenericParamKind::Lifetime = param.kind else { continue };
34103410

3411-
let def_id = self.r.local_def_id(param.id);
3411+
let def_id = self.r.node_id_to_def_id[&param.id];
34123412

34133413
let use_set = self.lifetime_uses.remove(&def_id);
34143414
debug!(

0 commit comments

Comments
 (0)