Skip to content

Commit 2b96641

Browse files
committed
resolve: Remove trait ToNameBinding
1 parent f9e62d1 commit 2b96641

File tree

5 files changed

+84
-79
lines changed

5 files changed

+84
-79
lines changed

compiler/rustc_resolve/src/build_reduced_graph.rs

Lines changed: 42 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -33,40 +33,42 @@ use crate::imports::{ImportData, ImportKind};
3333
use crate::macros::{MacroRulesBinding, MacroRulesScope, MacroRulesScopeRef};
3434
use crate::{
3535
BindingKey, Determinacy, ExternPreludeEntry, Finalize, MacroData, Module, ModuleKind,
36-
ModuleOrUniformRoot, NameBinding, NameBindingData, NameBindingKind, ParentScope, PathResult,
37-
ResolutionError, Resolver, ResolverArenas, Segment, ToNameBinding, Used, VisResolutionError,
38-
errors,
36+
ModuleOrUniformRoot, NameBinding, ParentScope, PathResult, ResolutionError, Resolver, Segment,
37+
Used, VisResolutionError, errors,
3938
};
4039

4140
type Res = def::Res<NodeId>;
4241

43-
impl<'ra, Id: Into<DefId>> ToNameBinding<'ra> for (Res, ty::Visibility<Id>, Span, LocalExpnId) {
44-
fn to_name_binding(self, arenas: &'ra ResolverArenas<'ra>) -> NameBinding<'ra> {
45-
arenas.alloc_name_binding(NameBindingData {
46-
kind: NameBindingKind::Res(self.0),
47-
ambiguity: None,
48-
warn_ambiguity: false,
49-
vis: self.1.to_def_id(),
50-
span: self.2,
51-
expansion: self.3,
52-
})
53-
}
54-
}
55-
5642
impl<'ra, 'tcx> Resolver<'ra, 'tcx> {
5743
/// Defines `name` in namespace `ns` of module `parent` to be `def` if it is not yet defined;
5844
/// otherwise, reports an error.
59-
pub(crate) fn define<T>(&mut self, parent: Module<'ra>, ident: Ident, ns: Namespace, def: T)
60-
where
61-
T: ToNameBinding<'ra>,
62-
{
63-
let binding = def.to_name_binding(self.arenas);
45+
pub(crate) fn define_binding(
46+
&mut self,
47+
parent: Module<'ra>,
48+
ident: Ident,
49+
ns: Namespace,
50+
binding: NameBinding<'ra>,
51+
) {
6452
let key = self.new_disambiguated_key(ident, ns);
6553
if let Err(old_binding) = self.try_define(parent, key, binding, false) {
6654
self.report_conflict(parent, ident, ns, old_binding, binding);
6755
}
6856
}
6957

58+
fn define(
59+
&mut self,
60+
parent: Module<'ra>,
61+
ident: Ident,
62+
ns: Namespace,
63+
res: Res,
64+
vis: ty::Visibility<impl Into<DefId>>,
65+
span: Span,
66+
expn_id: LocalExpnId,
67+
) {
68+
let binding = self.arenas.new_res_binding(res, vis.to_def_id(), span, expn_id);
69+
self.define_binding(parent, ident, ns, binding)
70+
}
71+
7072
/// Walks up the tree of definitions starting at `def_id`,
7173
/// stopping at the first encountered module.
7274
/// Parent block modules for arbitrary def-ids are not recorded for the local crate,
@@ -222,7 +224,7 @@ impl<'ra, 'tcx> Resolver<'ra, 'tcx> {
222224
_,
223225
)
224226
| Res::PrimTy(..)
225-
| Res::ToolMod => self.define(parent, ident, TypeNS, (res, vis, span, expansion)),
227+
| Res::ToolMod => self.define(parent, ident, TypeNS, res, vis, span, expansion),
226228
Res::Def(
227229
DefKind::Fn
228230
| DefKind::AssocFn
@@ -231,9 +233,9 @@ impl<'ra, 'tcx> Resolver<'ra, 'tcx> {
231233
| DefKind::AssocConst
232234
| DefKind::Ctor(..),
233235
_,
234-
) => self.define(parent, ident, ValueNS, (res, vis, span, expansion)),
236+
) => self.define(parent, ident, ValueNS, res, vis, span, expansion),
235237
Res::Def(DefKind::Macro(..), _) | Res::NonMacroAttr(..) => {
236-
self.define(parent, ident, MacroNS, (res, vis, span, expansion))
238+
self.define(parent, ident, MacroNS, res, vis, span, expansion)
237239
}
238240
Res::Def(
239241
DefKind::TyParam
@@ -706,7 +708,7 @@ impl<'a, 'ra, 'tcx> BuildReducedGraphVisitor<'a, 'ra, 'tcx> {
706708
let expansion = parent_scope.expansion;
707709

708710
// Define a name in the type namespace if it is not anonymous.
709-
self.r.define(parent, ident, TypeNS, (adt_res, adt_vis, adt_span, expansion));
711+
self.r.define(parent, ident, TypeNS, adt_res, adt_vis, adt_span, expansion);
710712
self.r.feed_visibility(feed, adt_vis);
711713
let def_id = feed.key();
712714

@@ -758,7 +760,7 @@ impl<'a, 'ra, 'tcx> BuildReducedGraphVisitor<'a, 'ra, 'tcx> {
758760
}
759761

760762
ItemKind::Mod(_, ident, ref mod_kind) => {
761-
self.r.define(parent, ident, TypeNS, (res, vis, sp, expansion));
763+
self.r.define(parent, ident, TypeNS, res, vis, sp, expansion);
762764

763765
if let ast::ModKind::Loaded(_, _, _, Err(_)) = mod_kind {
764766
self.r.mods_with_parse_errors.insert(def_id);
@@ -777,10 +779,10 @@ impl<'a, 'ra, 'tcx> BuildReducedGraphVisitor<'a, 'ra, 'tcx> {
777779
ItemKind::Const(box ConstItem { ident, .. })
778780
| ItemKind::Delegation(box Delegation { ident, .. })
779781
| ItemKind::Static(box StaticItem { ident, .. }) => {
780-
self.r.define(parent, ident, ValueNS, (res, vis, sp, expansion));
782+
self.r.define(parent, ident, ValueNS, res, vis, sp, expansion);
781783
}
782784
ItemKind::Fn(box Fn { ident, .. }) => {
783-
self.r.define(parent, ident, ValueNS, (res, vis, sp, expansion));
785+
self.r.define(parent, ident, ValueNS, res, vis, sp, expansion);
784786

785787
// Functions introducing procedural macros reserve a slot
786788
// in the macro namespace as well (see #52225).
@@ -789,11 +791,11 @@ impl<'a, 'ra, 'tcx> BuildReducedGraphVisitor<'a, 'ra, 'tcx> {
789791

790792
// These items live in the type namespace.
791793
ItemKind::TyAlias(box TyAlias { ident, .. }) | ItemKind::TraitAlias(ident, ..) => {
792-
self.r.define(parent, ident, TypeNS, (res, vis, sp, expansion));
794+
self.r.define(parent, ident, TypeNS, res, vis, sp, expansion);
793795
}
794796

795797
ItemKind::Enum(ident, _, _) | ItemKind::Trait(box ast::Trait { ident, .. }) => {
796-
self.r.define(parent, ident, TypeNS, (res, vis, sp, expansion));
798+
self.r.define(parent, ident, TypeNS, res, vis, sp, expansion);
797799

798800
self.parent_scope.module = self.r.new_module(
799801
Some(parent),
@@ -845,7 +847,7 @@ impl<'a, 'ra, 'tcx> BuildReducedGraphVisitor<'a, 'ra, 'tcx> {
845847
let feed = self.r.feed(ctor_node_id);
846848
let ctor_def_id = feed.key();
847849
let ctor_res = self.res(ctor_def_id);
848-
self.r.define(parent, ident, ValueNS, (ctor_res, ctor_vis, sp, expansion));
850+
self.r.define(parent, ident, ValueNS, ctor_res, ctor_vis, sp, expansion);
849851
self.r.feed_visibility(feed, ctor_vis);
850852
// We need the field visibility spans also for the constructor for E0603.
851853
self.insert_field_visibilities_local(ctor_def_id.to_def_id(), vdata.fields());
@@ -909,9 +911,7 @@ impl<'a, 'ra, 'tcx> BuildReducedGraphVisitor<'a, 'ra, 'tcx> {
909911
}
910912
.map(|module| {
911913
let used = self.process_macro_use_imports(item, module);
912-
let res = module.res().unwrap();
913-
let vis = ty::Visibility::<LocalDefId>::Public;
914-
let binding = (res, vis, sp, expansion).to_name_binding(self.r.arenas);
914+
let binding = self.r.arenas.new_pub_res_binding(module.res().unwrap(), sp, expansion);
915915
(used, Some(ModuleOrUniformRoot::Module(module)), binding)
916916
})
917917
.unwrap_or((true, None, self.r.dummy_binding));
@@ -968,7 +968,7 @@ impl<'a, 'ra, 'tcx> BuildReducedGraphVisitor<'a, 'ra, 'tcx> {
968968
);
969969
}
970970
}
971-
self.r.define(parent, ident, TypeNS, imported_binding);
971+
self.r.define_binding(parent, ident, TypeNS, imported_binding);
972972
}
973973

974974
/// Constructs the reduced graph for one foreign item.
@@ -985,7 +985,7 @@ impl<'a, 'ra, 'tcx> BuildReducedGraphVisitor<'a, 'ra, 'tcx> {
985985
let parent = self.parent_scope.module;
986986
let expansion = self.parent_scope.expansion;
987987
let vis = self.resolve_visibility(&item.vis);
988-
self.r.define(parent, ident, ns, (self.res(def_id), vis, item.span, expansion));
988+
self.r.define(parent, ident, ns, self.res(def_id), vis, item.span, expansion);
989989
self.r.feed_visibility(feed, vis);
990990
}
991991

@@ -1225,7 +1225,7 @@ impl<'a, 'ra, 'tcx> BuildReducedGraphVisitor<'a, 'ra, 'tcx> {
12251225
} else {
12261226
ty::Visibility::Restricted(CRATE_DEF_ID)
12271227
};
1228-
let binding = (res, vis, span, expansion).to_name_binding(self.r.arenas);
1228+
let binding = self.r.arenas.new_res_binding(res, vis.to_def_id(), span, expansion);
12291229
self.r.set_binding_parent_module(binding, parent_scope.module);
12301230
self.r.all_macro_rules.insert(ident.name);
12311231
if is_macro_export {
@@ -1244,7 +1244,7 @@ impl<'a, 'ra, 'tcx> BuildReducedGraphVisitor<'a, 'ra, 'tcx> {
12441244
});
12451245
self.r.import_use_map.insert(import, Used::Other);
12461246
let import_binding = self.r.import(binding, import);
1247-
self.r.define(self.r.graph_root, ident, MacroNS, import_binding);
1247+
self.r.define_binding(self.r.graph_root, ident, MacroNS, import_binding);
12481248
} else {
12491249
self.r.check_reserved_macro_name(ident, res);
12501250
self.insert_unused_macro(ident, def_id, item.id);
@@ -1272,7 +1272,7 @@ impl<'a, 'ra, 'tcx> BuildReducedGraphVisitor<'a, 'ra, 'tcx> {
12721272
if !vis.is_public() {
12731273
self.insert_unused_macro(ident, def_id, item.id);
12741274
}
1275-
self.r.define(module, ident, MacroNS, (res, vis, span, expansion));
1275+
self.r.define(module, ident, MacroNS, res, vis, span, expansion);
12761276
self.r.feed_visibility(feed, vis);
12771277
self.parent_scope.macro_rules
12781278
}
@@ -1408,7 +1408,7 @@ impl<'a, 'ra, 'tcx> Visitor<'a> for BuildReducedGraphVisitor<'a, 'ra, 'tcx> {
14081408
if ctxt == AssocCtxt::Trait {
14091409
let parent = self.parent_scope.module;
14101410
let expansion = self.parent_scope.expansion;
1411-
self.r.define(parent, ident, ns, (self.res(def_id), vis, item.span, expansion));
1411+
self.r.define(parent, ident, ns, self.res(def_id), vis, item.span, expansion);
14121412
} else if !matches!(&item.kind, AssocItemKind::Delegation(deleg) if deleg.from_glob) {
14131413
let impl_def_id = self.r.tcx.local_parent(local_def_id);
14141414
let key = BindingKey::new(ident.normalize_to_macros_2_0(), ns);
@@ -1493,7 +1493,7 @@ impl<'a, 'ra, 'tcx> Visitor<'a> for BuildReducedGraphVisitor<'a, 'ra, 'tcx> {
14931493
let feed = self.r.feed(variant.id);
14941494
let def_id = feed.key();
14951495
let vis = self.resolve_visibility(&variant.vis);
1496-
self.r.define(parent, ident, TypeNS, (self.res(def_id), vis, variant.span, expn_id));
1496+
self.r.define(parent, ident, TypeNS, self.res(def_id), vis, variant.span, expn_id);
14971497
self.r.feed_visibility(feed, vis);
14981498

14991499
// If the variant is marked as non_exhaustive then lower the visibility to within the crate.
@@ -1509,7 +1509,7 @@ impl<'a, 'ra, 'tcx> Visitor<'a> for BuildReducedGraphVisitor<'a, 'ra, 'tcx> {
15091509
let feed = self.r.feed(ctor_node_id);
15101510
let ctor_def_id = feed.key();
15111511
let ctor_res = self.res(ctor_def_id);
1512-
self.r.define(parent, ident, ValueNS, (ctor_res, ctor_vis, variant.span, expn_id));
1512+
self.r.define(parent, ident, ValueNS, ctor_res, ctor_vis, variant.span, expn_id);
15131513
self.r.feed_visibility(feed, ctor_vis);
15141514
}
15151515

compiler/rustc_resolve/src/ident.rs

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,10 @@ use Namespace::*;
33
use rustc_ast::{self as ast, NodeId};
44
use rustc_errors::ErrorGuaranteed;
55
use rustc_hir::def::{DefKind, Namespace, NonMacroAttrKind, PartialRes, PerNS};
6-
use rustc_middle::{bug, ty};
6+
use rustc_middle::bug;
77
use rustc_session::lint::BuiltinLintDiag;
88
use rustc_session::lint::builtin::PROC_MACRO_DERIVE_RESOLUTION_FALLBACK;
99
use rustc_session::parse::feature_err;
10-
use rustc_span::def_id::LocalDefId;
1110
use rustc_span::hygiene::{ExpnId, ExpnKind, LocalExpnId, MacroKind, SyntaxContext};
1211
use rustc_span::{Ident, Span, kw, sym};
1312
use tracing::{debug, instrument};
@@ -20,11 +19,9 @@ use crate::{
2019
AmbiguityError, AmbiguityErrorMisc, AmbiguityKind, BindingKey, Determinacy, Finalize,
2120
ImportKind, LexicalScopeBinding, Module, ModuleKind, ModuleOrUniformRoot, NameBinding,
2221
NameBindingKind, ParentScope, PathResult, PrivacyError, Res, ResolutionError, Resolver, Scope,
23-
ScopeSet, Segment, ToNameBinding, Used, Weak, errors,
22+
ScopeSet, Segment, Used, Weak, errors,
2423
};
2524

26-
type Visibility = ty::Visibility<LocalDefId>;
27-
2825
#[derive(Copy, Clone)]
2926
pub enum UsePrelude {
3027
No,
@@ -464,13 +461,11 @@ impl<'ra, 'tcx> Resolver<'ra, 'tcx> {
464461
) {
465462
Ok((Some(ext), _)) => {
466463
if ext.helper_attrs.contains(&ident.name) {
467-
let binding = (
464+
let binding = this.arenas.new_pub_res_binding(
468465
Res::NonMacroAttr(NonMacroAttrKind::DeriveHelperCompat),
469-
Visibility::Public,
470466
derive.span,
471467
LocalExpnId::ROOT,
472-
)
473-
.to_name_binding(this.arenas);
468+
);
474469
result = Ok((binding, Flags::empty()));
475470
break;
476471
}

compiler/rustc_resolve/src/imports.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -865,7 +865,7 @@ impl<'ra, 'tcx> Resolver<'ra, 'tcx> {
865865

866866
let imported_binding = this.import(binding, import);
867867
target_bindings[ns].set(Some(imported_binding));
868-
this.define(parent, target, ns, imported_binding);
868+
this.define_binding(parent, target, ns, imported_binding);
869869
}
870870
Err(Determined) => {
871871
// Don't update the resolution for underscores, because it was never added.

compiler/rustc_resolve/src/lib.rs

Lines changed: 34 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -768,16 +768,6 @@ impl std::hash::Hash for NameBindingData<'_> {
768768
}
769769
}
770770

771-
trait ToNameBinding<'ra> {
772-
fn to_name_binding(self, arenas: &'ra ResolverArenas<'ra>) -> NameBinding<'ra>;
773-
}
774-
775-
impl<'ra> ToNameBinding<'ra> for NameBinding<'ra> {
776-
fn to_name_binding(self, _: &'ra ResolverArenas<'ra>) -> NameBinding<'ra> {
777-
self
778-
}
779-
}
780-
781771
#[derive(Clone, Copy, Debug)]
782772
enum NameBindingKind<'ra> {
783773
Res(Res),
@@ -1230,6 +1220,32 @@ pub struct ResolverArenas<'ra> {
12301220
}
12311221

12321222
impl<'ra> ResolverArenas<'ra> {
1223+
fn new_res_binding(
1224+
&'ra self,
1225+
res: Res,
1226+
vis: ty::Visibility<DefId>,
1227+
span: Span,
1228+
expansion: LocalExpnId,
1229+
) -> NameBinding<'ra> {
1230+
self.alloc_name_binding(NameBindingData {
1231+
kind: NameBindingKind::Res(res),
1232+
ambiguity: None,
1233+
warn_ambiguity: false,
1234+
vis,
1235+
span,
1236+
expansion,
1237+
})
1238+
}
1239+
1240+
fn new_pub_res_binding(
1241+
&'ra self,
1242+
res: Res,
1243+
span: Span,
1244+
expn_id: LocalExpnId,
1245+
) -> NameBinding<'ra> {
1246+
self.new_res_binding(res, Visibility::Public, span, expn_id)
1247+
}
1248+
12331249
fn new_module(
12341250
&'ra self,
12351251
parent: Option<Module<'ra>>,
@@ -1253,9 +1269,8 @@ impl<'ra> ResolverArenas<'ra> {
12531269
}
12541270
if let Some(def_id) = def_id {
12551271
module_map.insert(def_id, module);
1256-
let vis = ty::Visibility::<DefId>::Public;
12571272
let res = module.res().unwrap();
1258-
let binding = (res, vis, module.span, LocalExpnId::ROOT).to_name_binding(self);
1273+
let binding = self.new_pub_res_binding(res, module.span, LocalExpnId::ROOT);
12591274
module_self_bindings.insert(module, binding);
12601275
}
12611276
module
@@ -1443,8 +1458,6 @@ impl<'ra, 'tcx> Resolver<'ra, 'tcx> {
14431458
}
14441459

14451460
let registered_tools = tcx.registered_tools(());
1446-
1447-
let pub_vis = ty::Visibility::<DefId>::Public;
14481461
let edition = tcx.sess.edition();
14491462

14501463
let mut resolver = Resolver {
@@ -1493,29 +1506,28 @@ impl<'ra, 'tcx> Resolver<'ra, 'tcx> {
14931506
macro_expanded_macro_export_errors: BTreeSet::new(),
14941507

14951508
arenas,
1496-
dummy_binding: (Res::Err, pub_vis, DUMMY_SP, LocalExpnId::ROOT).to_name_binding(arenas),
1509+
dummy_binding: arenas.new_pub_res_binding(Res::Err, DUMMY_SP, LocalExpnId::ROOT),
14971510
builtin_types_bindings: PrimTy::ALL
14981511
.iter()
14991512
.map(|prim_ty| {
1500-
let binding = (Res::PrimTy(*prim_ty), pub_vis, DUMMY_SP, LocalExpnId::ROOT)
1501-
.to_name_binding(arenas);
1513+
let res = Res::PrimTy(*prim_ty);
1514+
let binding = arenas.new_pub_res_binding(res, DUMMY_SP, LocalExpnId::ROOT);
15021515
(prim_ty.name(), binding)
15031516
})
15041517
.collect(),
15051518
builtin_attrs_bindings: BUILTIN_ATTRIBUTES
15061519
.iter()
15071520
.map(|builtin_attr| {
15081521
let res = Res::NonMacroAttr(NonMacroAttrKind::Builtin(builtin_attr.name));
1509-
let binding =
1510-
(res, pub_vis, DUMMY_SP, LocalExpnId::ROOT).to_name_binding(arenas);
1522+
let binding = arenas.new_pub_res_binding(res, DUMMY_SP, LocalExpnId::ROOT);
15111523
(builtin_attr.name, binding)
15121524
})
15131525
.collect(),
15141526
registered_tool_bindings: registered_tools
15151527
.iter()
15161528
.map(|ident| {
1517-
let binding = (Res::ToolMod, pub_vis, ident.span, LocalExpnId::ROOT)
1518-
.to_name_binding(arenas);
1529+
let res = Res::ToolMod;
1530+
let binding = arenas.new_pub_res_binding(res, ident.span, LocalExpnId::ROOT);
15191531
(*ident, binding)
15201532
})
15211533
.collect(),
@@ -2141,8 +2153,7 @@ impl<'ra, 'tcx> Resolver<'ra, 'tcx> {
21412153
self.crate_loader(|c| c.maybe_process_path_extern(ident.name))?
21422154
};
21432155
let res = Res::Def(DefKind::Mod, crate_id.as_def_id());
2144-
let vis = ty::Visibility::<DefId>::Public;
2145-
(res, vis, DUMMY_SP, LocalExpnId::ROOT).to_name_binding(self.arenas)
2156+
self.arenas.new_pub_res_binding(res, DUMMY_SP, LocalExpnId::ROOT)
21462157
})
21472158
});
21482159

0 commit comments

Comments
 (0)