@@ -32,40 +32,42 @@ use crate::imports::{ImportData, ImportKind};
3232use crate :: macros:: { MacroRulesBinding , MacroRulesScope , MacroRulesScopeRef } ;
3333use crate :: {
3434 BindingKey , Determinacy , ExternPreludeEntry , Finalize , MacroData , Module , ModuleKind ,
35- ModuleOrUniformRoot , NameBinding , NameBindingData , NameBindingKind , ParentScope , PathResult ,
36- ResolutionError , Resolver , ResolverArenas , Segment , ToNameBinding , Used , VisResolutionError ,
37- errors,
35+ ModuleOrUniformRoot , NameBinding , ParentScope , PathResult , ResolutionError , Resolver , Segment ,
36+ Used , VisResolutionError , errors,
3837} ;
3938
4039type Res = def:: Res < NodeId > ;
4140
42- impl < ' ra , Id : Into < DefId > > ToNameBinding < ' ra > for ( Res , ty:: Visibility < Id > , Span , LocalExpnId ) {
43- fn to_name_binding ( self , arenas : & ' ra ResolverArenas < ' ra > ) -> NameBinding < ' ra > {
44- arenas. alloc_name_binding ( NameBindingData {
45- kind : NameBindingKind :: Res ( self . 0 ) ,
46- ambiguity : None ,
47- warn_ambiguity : false ,
48- vis : self . 1 . to_def_id ( ) ,
49- span : self . 2 ,
50- expansion : self . 3 ,
51- } )
52- }
53- }
54-
5541impl < ' ra , ' tcx > Resolver < ' ra , ' tcx > {
5642 /// Defines `name` in namespace `ns` of module `parent` to be `def` if it is not yet defined;
5743 /// otherwise, reports an error.
58- pub ( crate ) fn define < T > ( & mut self , parent : Module < ' ra > , ident : Ident , ns : Namespace , def : T )
59- where
60- T : ToNameBinding < ' ra > ,
61- {
62- let binding = def. to_name_binding ( self . arenas ) ;
44+ pub ( crate ) fn define_binding (
45+ & mut self ,
46+ parent : Module < ' ra > ,
47+ ident : Ident ,
48+ ns : Namespace ,
49+ binding : NameBinding < ' ra > ,
50+ ) {
6351 let key = self . new_disambiguated_key ( ident, ns) ;
6452 if let Err ( old_binding) = self . try_define ( parent, key, binding, false ) {
6553 self . report_conflict ( parent, ident, ns, old_binding, binding) ;
6654 }
6755 }
6856
57+ fn define (
58+ & mut self ,
59+ parent : Module < ' ra > ,
60+ ident : Ident ,
61+ ns : Namespace ,
62+ res : Res ,
63+ vis : ty:: Visibility < impl Into < DefId > > ,
64+ span : Span ,
65+ expn_id : LocalExpnId ,
66+ ) {
67+ let binding = self . arenas . new_res_binding ( res, vis. to_def_id ( ) , span, expn_id) ;
68+ self . define_binding ( parent, ident, ns, binding)
69+ }
70+
6971 /// Walks up the tree of definitions starting at `def_id`,
7072 /// stopping at the first encountered module.
7173 /// Parent block modules for arbitrary def-ids are not recorded for the local crate,
@@ -221,7 +223,7 @@ impl<'ra, 'tcx> Resolver<'ra, 'tcx> {
221223 _,
222224 )
223225 | Res :: PrimTy ( ..)
224- | Res :: ToolMod => self . define ( parent, ident, TypeNS , ( res, vis, span, expansion) ) ,
226+ | Res :: ToolMod => self . define ( parent, ident, TypeNS , res, vis, span, expansion) ,
225227 Res :: Def (
226228 DefKind :: Fn
227229 | DefKind :: AssocFn
@@ -230,9 +232,9 @@ impl<'ra, 'tcx> Resolver<'ra, 'tcx> {
230232 | DefKind :: AssocConst
231233 | DefKind :: Ctor ( ..) ,
232234 _,
233- ) => self . define ( parent, ident, ValueNS , ( res, vis, span, expansion) ) ,
235+ ) => self . define ( parent, ident, ValueNS , res, vis, span, expansion) ,
234236 Res :: Def ( DefKind :: Macro ( ..) , _) | Res :: NonMacroAttr ( ..) => {
235- self . define ( parent, ident, MacroNS , ( res, vis, span, expansion) )
237+ self . define ( parent, ident, MacroNS , res, vis, span, expansion)
236238 }
237239 Res :: Def (
238240 DefKind :: TyParam
@@ -705,7 +707,7 @@ impl<'a, 'ra, 'tcx> BuildReducedGraphVisitor<'a, 'ra, 'tcx> {
705707 let expansion = parent_scope. expansion ;
706708
707709 // Define a name in the type namespace if it is not anonymous.
708- self . r . define ( parent, ident, TypeNS , ( adt_res, adt_vis, adt_span, expansion) ) ;
710+ self . r . define ( parent, ident, TypeNS , adt_res, adt_vis, adt_span, expansion) ;
709711 self . r . feed_visibility ( feed, adt_vis) ;
710712 let def_id = feed. key ( ) ;
711713
@@ -757,7 +759,7 @@ impl<'a, 'ra, 'tcx> BuildReducedGraphVisitor<'a, 'ra, 'tcx> {
757759 }
758760
759761 ItemKind :: Mod ( _, ident, ref mod_kind) => {
760- self . r . define ( parent, ident, TypeNS , ( res, vis, sp, expansion) ) ;
762+ self . r . define ( parent, ident, TypeNS , res, vis, sp, expansion) ;
761763
762764 if let ast:: ModKind :: Loaded ( _, _, _, Err ( _) ) = mod_kind {
763765 self . r . mods_with_parse_errors . insert ( def_id) ;
@@ -776,10 +778,10 @@ impl<'a, 'ra, 'tcx> BuildReducedGraphVisitor<'a, 'ra, 'tcx> {
776778 ItemKind :: Const ( box ConstItem { ident, .. } )
777779 | ItemKind :: Delegation ( box Delegation { ident, .. } )
778780 | ItemKind :: Static ( box StaticItem { ident, .. } ) => {
779- self . r . define ( parent, ident, ValueNS , ( res, vis, sp, expansion) ) ;
781+ self . r . define ( parent, ident, ValueNS , res, vis, sp, expansion) ;
780782 }
781783 ItemKind :: Fn ( box Fn { ident, .. } ) => {
782- self . r . define ( parent, ident, ValueNS , ( res, vis, sp, expansion) ) ;
784+ self . r . define ( parent, ident, ValueNS , res, vis, sp, expansion) ;
783785
784786 // Functions introducing procedural macros reserve a slot
785787 // in the macro namespace as well (see #52225).
@@ -788,11 +790,11 @@ impl<'a, 'ra, 'tcx> BuildReducedGraphVisitor<'a, 'ra, 'tcx> {
788790
789791 // These items live in the type namespace.
790792 ItemKind :: TyAlias ( box TyAlias { ident, .. } ) | ItemKind :: TraitAlias ( ident, ..) => {
791- self . r . define ( parent, ident, TypeNS , ( res, vis, sp, expansion) ) ;
793+ self . r . define ( parent, ident, TypeNS , res, vis, sp, expansion) ;
792794 }
793795
794796 ItemKind :: Enum ( ident, _, _) | ItemKind :: Trait ( box ast:: Trait { ident, .. } ) => {
795- self . r . define ( parent, ident, TypeNS , ( res, vis, sp, expansion) ) ;
797+ self . r . define ( parent, ident, TypeNS , res, vis, sp, expansion) ;
796798
797799 self . parent_scope . module = self . r . new_module (
798800 Some ( parent) ,
@@ -844,7 +846,7 @@ impl<'a, 'ra, 'tcx> BuildReducedGraphVisitor<'a, 'ra, 'tcx> {
844846 let feed = self . r . feed ( ctor_node_id) ;
845847 let ctor_def_id = feed. key ( ) ;
846848 let ctor_res = self . res ( ctor_def_id) ;
847- self . r . define ( parent, ident, ValueNS , ( ctor_res, ctor_vis, sp, expansion) ) ;
849+ self . r . define ( parent, ident, ValueNS , ctor_res, ctor_vis, sp, expansion) ;
848850 self . r . feed_visibility ( feed, ctor_vis) ;
849851 // We need the field visibility spans also for the constructor for E0603.
850852 self . insert_field_visibilities_local ( ctor_def_id. to_def_id ( ) , vdata. fields ( ) ) ;
@@ -908,9 +910,7 @@ impl<'a, 'ra, 'tcx> BuildReducedGraphVisitor<'a, 'ra, 'tcx> {
908910 }
909911 . map ( |module| {
910912 let used = self . process_macro_use_imports ( item, module) ;
911- let res = module. res ( ) . unwrap ( ) ;
912- let vis = ty:: Visibility :: < LocalDefId > :: Public ;
913- let binding = ( res, vis, sp, expansion) . to_name_binding ( self . r . arenas ) ;
913+ let binding = self . r . arenas . new_pub_res_binding ( module. res ( ) . unwrap ( ) , sp, expansion) ;
914914 ( used, Some ( ModuleOrUniformRoot :: Module ( module) ) , binding)
915915 } )
916916 . unwrap_or ( ( true , None , self . r . dummy_binding ) ) ;
@@ -967,7 +967,7 @@ impl<'a, 'ra, 'tcx> BuildReducedGraphVisitor<'a, 'ra, 'tcx> {
967967 ) ;
968968 }
969969 }
970- self . r . define ( parent, ident, TypeNS , imported_binding) ;
970+ self . r . define_binding ( parent, ident, TypeNS , imported_binding) ;
971971 }
972972
973973 /// Constructs the reduced graph for one foreign item.
@@ -984,7 +984,7 @@ impl<'a, 'ra, 'tcx> BuildReducedGraphVisitor<'a, 'ra, 'tcx> {
984984 let parent = self . parent_scope . module ;
985985 let expansion = self . parent_scope . expansion ;
986986 let vis = self . resolve_visibility ( & item. vis ) ;
987- self . r . define ( parent, ident, ns, ( self . res ( def_id) , vis, item. span , expansion) ) ;
987+ self . r . define ( parent, ident, ns, self . res ( def_id) , vis, item. span , expansion) ;
988988 self . r . feed_visibility ( feed, vis) ;
989989 }
990990
@@ -1229,7 +1229,7 @@ impl<'a, 'ra, 'tcx> BuildReducedGraphVisitor<'a, 'ra, 'tcx> {
12291229 } else {
12301230 ty:: Visibility :: Restricted ( CRATE_DEF_ID )
12311231 } ;
1232- let binding = ( res, vis, span, expansion) . to_name_binding ( self . r . arenas ) ;
1232+ let binding = self . r . arenas . new_res_binding ( res, vis. to_def_id ( ) , span, expansion) ;
12331233 self . r . set_binding_parent_module ( binding, parent_scope. module ) ;
12341234 self . r . all_macro_rules . insert ( ident. name ) ;
12351235 if is_macro_export {
@@ -1248,7 +1248,7 @@ impl<'a, 'ra, 'tcx> BuildReducedGraphVisitor<'a, 'ra, 'tcx> {
12481248 } ) ;
12491249 self . r . import_use_map . insert ( import, Used :: Other ) ;
12501250 let import_binding = self . r . import ( binding, import) ;
1251- self . r . define ( self . r . graph_root , ident, MacroNS , import_binding) ;
1251+ self . r . define_binding ( self . r . graph_root , ident, MacroNS , import_binding) ;
12521252 } else {
12531253 self . r . check_reserved_macro_name ( ident, res) ;
12541254 self . insert_unused_macro ( ident, def_id, item. id ) ;
@@ -1276,7 +1276,7 @@ impl<'a, 'ra, 'tcx> BuildReducedGraphVisitor<'a, 'ra, 'tcx> {
12761276 if !vis. is_public ( ) {
12771277 self . insert_unused_macro ( ident, def_id, item. id ) ;
12781278 }
1279- self . r . define ( module, ident, MacroNS , ( res, vis, span, expansion) ) ;
1279+ self . r . define ( module, ident, MacroNS , res, vis, span, expansion) ;
12801280 self . r . feed_visibility ( feed, vis) ;
12811281 self . parent_scope . macro_rules
12821282 }
@@ -1412,7 +1412,7 @@ impl<'a, 'ra, 'tcx> Visitor<'a> for BuildReducedGraphVisitor<'a, 'ra, 'tcx> {
14121412 if ctxt == AssocCtxt :: Trait {
14131413 let parent = self . parent_scope . module ;
14141414 let expansion = self . parent_scope . expansion ;
1415- self . r . define ( parent, ident, ns, ( self . res ( def_id) , vis, item. span , expansion) ) ;
1415+ self . r . define ( parent, ident, ns, self . res ( def_id) , vis, item. span , expansion) ;
14161416 } else if !matches ! ( & item. kind, AssocItemKind :: Delegation ( deleg) if deleg. from_glob) {
14171417 let impl_def_id = self . r . tcx . local_parent ( local_def_id) ;
14181418 let key = BindingKey :: new ( ident. normalize_to_macros_2_0 ( ) , ns) ;
@@ -1497,7 +1497,7 @@ impl<'a, 'ra, 'tcx> Visitor<'a> for BuildReducedGraphVisitor<'a, 'ra, 'tcx> {
14971497 let feed = self . r . feed ( variant. id ) ;
14981498 let def_id = feed. key ( ) ;
14991499 let vis = self . resolve_visibility ( & variant. vis ) ;
1500- self . r . define ( parent, ident, TypeNS , ( self . res ( def_id) , vis, variant. span , expn_id) ) ;
1500+ self . r . define ( parent, ident, TypeNS , self . res ( def_id) , vis, variant. span , expn_id) ;
15011501 self . r . feed_visibility ( feed, vis) ;
15021502
15031503 // If the variant is marked as non_exhaustive then lower the visibility to within the crate.
@@ -1513,7 +1513,7 @@ impl<'a, 'ra, 'tcx> Visitor<'a> for BuildReducedGraphVisitor<'a, 'ra, 'tcx> {
15131513 let feed = self . r . feed ( ctor_node_id) ;
15141514 let ctor_def_id = feed. key ( ) ;
15151515 let ctor_res = self . res ( ctor_def_id) ;
1516- self . r . define ( parent, ident, ValueNS , ( ctor_res, ctor_vis, variant. span , expn_id) ) ;
1516+ self . r . define ( parent, ident, ValueNS , ctor_res, ctor_vis, variant. span , expn_id) ;
15171517 self . r . feed_visibility ( feed, ctor_vis) ;
15181518 }
15191519
0 commit comments