@@ -33,40 +33,42 @@ use crate::imports::{ImportData, ImportKind};
33
33
use crate :: macros:: { MacroRulesBinding , MacroRulesScope , MacroRulesScopeRef } ;
34
34
use crate :: {
35
35
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,
39
38
} ;
40
39
41
40
type Res = def:: Res < NodeId > ;
42
41
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
-
56
42
impl < ' ra , ' tcx > Resolver < ' ra , ' tcx > {
57
43
/// Defines `name` in namespace `ns` of module `parent` to be `def` if it is not yet defined;
58
44
/// 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
+ ) {
64
52
let key = self . new_disambiguated_key ( ident, ns) ;
65
53
if let Err ( old_binding) = self . try_define ( parent, key, binding, false ) {
66
54
self . report_conflict ( parent, ident, ns, old_binding, binding) ;
67
55
}
68
56
}
69
57
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
+
70
72
/// Walks up the tree of definitions starting at `def_id`,
71
73
/// stopping at the first encountered module.
72
74
/// Parent block modules for arbitrary def-ids are not recorded for the local crate,
@@ -224,7 +226,7 @@ impl<'ra, 'tcx> Resolver<'ra, 'tcx> {
224
226
_,
225
227
)
226
228
| Res :: PrimTy ( ..)
227
- | Res :: ToolMod => self . define ( parent, ident, TypeNS , ( res, vis, span, expansion) ) ,
229
+ | Res :: ToolMod => self . define ( parent, ident, TypeNS , res, vis, span, expansion) ,
228
230
Res :: Def (
229
231
DefKind :: Fn
230
232
| DefKind :: AssocFn
@@ -233,9 +235,9 @@ impl<'ra, 'tcx> Resolver<'ra, 'tcx> {
233
235
| DefKind :: AssocConst
234
236
| DefKind :: Ctor ( ..) ,
235
237
_,
236
- ) => self . define ( parent, ident, ValueNS , ( res, vis, span, expansion) ) ,
238
+ ) => self . define ( parent, ident, ValueNS , res, vis, span, expansion) ,
237
239
Res :: Def ( DefKind :: Macro ( ..) , _) | Res :: NonMacroAttr ( ..) => {
238
- self . define ( parent, ident, MacroNS , ( res, vis, span, expansion) )
240
+ self . define ( parent, ident, MacroNS , res, vis, span, expansion)
239
241
}
240
242
Res :: Def (
241
243
DefKind :: TyParam
@@ -708,7 +710,7 @@ impl<'a, 'ra, 'tcx> BuildReducedGraphVisitor<'a, 'ra, 'tcx> {
708
710
let expansion = parent_scope. expansion ;
709
711
710
712
// Define a name in the type namespace if it is not anonymous.
711
- self . r . define ( parent, ident, TypeNS , ( adt_res, adt_vis, adt_span, expansion) ) ;
713
+ self . r . define ( parent, ident, TypeNS , adt_res, adt_vis, adt_span, expansion) ;
712
714
self . r . feed_visibility ( feed, adt_vis) ;
713
715
let def_id = feed. key ( ) ;
714
716
@@ -760,7 +762,7 @@ impl<'a, 'ra, 'tcx> BuildReducedGraphVisitor<'a, 'ra, 'tcx> {
760
762
}
761
763
762
764
ItemKind :: Mod ( _, ident, ref mod_kind) => {
763
- self . r . define ( parent, ident, TypeNS , ( res, vis, sp, expansion) ) ;
765
+ self . r . define ( parent, ident, TypeNS , res, vis, sp, expansion) ;
764
766
765
767
if let ast:: ModKind :: Loaded ( _, _, _, Err ( _) ) = mod_kind {
766
768
self . r . mods_with_parse_errors . insert ( def_id) ;
@@ -779,10 +781,10 @@ impl<'a, 'ra, 'tcx> BuildReducedGraphVisitor<'a, 'ra, 'tcx> {
779
781
ItemKind :: Const ( box ConstItem { ident, .. } )
780
782
| ItemKind :: Delegation ( box Delegation { ident, .. } )
781
783
| ItemKind :: Static ( box StaticItem { ident, .. } ) => {
782
- self . r . define ( parent, ident, ValueNS , ( res, vis, sp, expansion) ) ;
784
+ self . r . define ( parent, ident, ValueNS , res, vis, sp, expansion) ;
783
785
}
784
786
ItemKind :: Fn ( box Fn { ident, .. } ) => {
785
- self . r . define ( parent, ident, ValueNS , ( res, vis, sp, expansion) ) ;
787
+ self . r . define ( parent, ident, ValueNS , res, vis, sp, expansion) ;
786
788
787
789
// Functions introducing procedural macros reserve a slot
788
790
// in the macro namespace as well (see #52225).
@@ -791,11 +793,11 @@ impl<'a, 'ra, 'tcx> BuildReducedGraphVisitor<'a, 'ra, 'tcx> {
791
793
792
794
// These items live in the type namespace.
793
795
ItemKind :: TyAlias ( box TyAlias { ident, .. } ) | ItemKind :: TraitAlias ( ident, ..) => {
794
- self . r . define ( parent, ident, TypeNS , ( res, vis, sp, expansion) ) ;
796
+ self . r . define ( parent, ident, TypeNS , res, vis, sp, expansion) ;
795
797
}
796
798
797
799
ItemKind :: Enum ( ident, _, _) | ItemKind :: Trait ( box ast:: Trait { ident, .. } ) => {
798
- self . r . define ( parent, ident, TypeNS , ( res, vis, sp, expansion) ) ;
800
+ self . r . define ( parent, ident, TypeNS , res, vis, sp, expansion) ;
799
801
800
802
self . parent_scope . module = self . r . new_module (
801
803
Some ( parent) ,
@@ -847,7 +849,7 @@ impl<'a, 'ra, 'tcx> BuildReducedGraphVisitor<'a, 'ra, 'tcx> {
847
849
let feed = self . r . feed ( ctor_node_id) ;
848
850
let ctor_def_id = feed. key ( ) ;
849
851
let ctor_res = self . res ( ctor_def_id) ;
850
- self . r . define ( parent, ident, ValueNS , ( ctor_res, ctor_vis, sp, expansion) ) ;
852
+ self . r . define ( parent, ident, ValueNS , ctor_res, ctor_vis, sp, expansion) ;
851
853
self . r . feed_visibility ( feed, ctor_vis) ;
852
854
// We need the field visibility spans also for the constructor for E0603.
853
855
self . insert_field_visibilities_local ( ctor_def_id. to_def_id ( ) , vdata. fields ( ) ) ;
@@ -911,9 +913,7 @@ impl<'a, 'ra, 'tcx> BuildReducedGraphVisitor<'a, 'ra, 'tcx> {
911
913
}
912
914
. map ( |module| {
913
915
let used = self . process_macro_use_imports ( item, module) ;
914
- let res = module. res ( ) . unwrap ( ) ;
915
- let vis = ty:: Visibility :: < LocalDefId > :: Public ;
916
- let binding = ( res, vis, sp, expansion) . to_name_binding ( self . r . arenas ) ;
916
+ let binding = self . r . arenas . new_pub_res_binding ( module. res ( ) . unwrap ( ) , sp, expansion) ;
917
917
( used, Some ( ModuleOrUniformRoot :: Module ( module) ) , binding)
918
918
} )
919
919
. unwrap_or ( ( true , None , self . r . dummy_binding ) ) ;
@@ -970,7 +970,7 @@ impl<'a, 'ra, 'tcx> BuildReducedGraphVisitor<'a, 'ra, 'tcx> {
970
970
) ;
971
971
}
972
972
}
973
- self . r . define ( parent, ident, TypeNS , imported_binding) ;
973
+ self . r . define_binding ( parent, ident, TypeNS , imported_binding) ;
974
974
}
975
975
976
976
/// Constructs the reduced graph for one foreign item.
@@ -987,7 +987,7 @@ impl<'a, 'ra, 'tcx> BuildReducedGraphVisitor<'a, 'ra, 'tcx> {
987
987
let parent = self . parent_scope . module ;
988
988
let expansion = self . parent_scope . expansion ;
989
989
let vis = self . resolve_visibility ( & item. vis ) ;
990
- self . r . define ( parent, ident, ns, ( self . res ( def_id) , vis, item. span , expansion) ) ;
990
+ self . r . define ( parent, ident, ns, self . res ( def_id) , vis, item. span , expansion) ;
991
991
self . r . feed_visibility ( feed, vis) ;
992
992
}
993
993
@@ -1227,7 +1227,7 @@ impl<'a, 'ra, 'tcx> BuildReducedGraphVisitor<'a, 'ra, 'tcx> {
1227
1227
} else {
1228
1228
ty:: Visibility :: Restricted ( CRATE_DEF_ID )
1229
1229
} ;
1230
- let binding = ( res, vis, span, expansion) . to_name_binding ( self . r . arenas ) ;
1230
+ let binding = self . r . arenas . new_res_binding ( res, vis. to_def_id ( ) , span, expansion) ;
1231
1231
self . r . set_binding_parent_module ( binding, parent_scope. module ) ;
1232
1232
self . r . all_macro_rules . insert ( ident. name ) ;
1233
1233
if is_macro_export {
@@ -1246,7 +1246,7 @@ impl<'a, 'ra, 'tcx> BuildReducedGraphVisitor<'a, 'ra, 'tcx> {
1246
1246
} ) ;
1247
1247
self . r . import_use_map . insert ( import, Used :: Other ) ;
1248
1248
let import_binding = self . r . import ( binding, import) ;
1249
- self . r . define ( self . r . graph_root , ident, MacroNS , import_binding) ;
1249
+ self . r . define_binding ( self . r . graph_root , ident, MacroNS , import_binding) ;
1250
1250
} else {
1251
1251
self . r . check_reserved_macro_name ( ident, res) ;
1252
1252
self . insert_unused_macro ( ident, def_id, item. id ) ;
@@ -1274,7 +1274,7 @@ impl<'a, 'ra, 'tcx> BuildReducedGraphVisitor<'a, 'ra, 'tcx> {
1274
1274
if !vis. is_public ( ) {
1275
1275
self . insert_unused_macro ( ident, def_id, item. id ) ;
1276
1276
}
1277
- self . r . define ( module, ident, MacroNS , ( res, vis, span, expansion) ) ;
1277
+ self . r . define ( module, ident, MacroNS , res, vis, span, expansion) ;
1278
1278
self . r . feed_visibility ( feed, vis) ;
1279
1279
self . parent_scope . macro_rules
1280
1280
}
@@ -1410,7 +1410,7 @@ impl<'a, 'ra, 'tcx> Visitor<'a> for BuildReducedGraphVisitor<'a, 'ra, 'tcx> {
1410
1410
if ctxt == AssocCtxt :: Trait {
1411
1411
let parent = self . parent_scope . module ;
1412
1412
let expansion = self . parent_scope . expansion ;
1413
- self . r . define ( parent, ident, ns, ( self . res ( def_id) , vis, item. span , expansion) ) ;
1413
+ self . r . define ( parent, ident, ns, self . res ( def_id) , vis, item. span , expansion) ;
1414
1414
} else if !matches ! ( & item. kind, AssocItemKind :: Delegation ( deleg) if deleg. from_glob) {
1415
1415
let impl_def_id = self . r . tcx . local_parent ( local_def_id) ;
1416
1416
let key = BindingKey :: new ( ident. normalize_to_macros_2_0 ( ) , ns) ;
@@ -1495,7 +1495,7 @@ impl<'a, 'ra, 'tcx> Visitor<'a> for BuildReducedGraphVisitor<'a, 'ra, 'tcx> {
1495
1495
let feed = self . r . feed ( variant. id ) ;
1496
1496
let def_id = feed. key ( ) ;
1497
1497
let vis = self . resolve_visibility ( & variant. vis ) ;
1498
- self . r . define ( parent, ident, TypeNS , ( self . res ( def_id) , vis, variant. span , expn_id) ) ;
1498
+ self . r . define ( parent, ident, TypeNS , self . res ( def_id) , vis, variant. span , expn_id) ;
1499
1499
self . r . feed_visibility ( feed, vis) ;
1500
1500
1501
1501
// If the variant is marked as non_exhaustive then lower the visibility to within the crate.
@@ -1511,7 +1511,7 @@ impl<'a, 'ra, 'tcx> Visitor<'a> for BuildReducedGraphVisitor<'a, 'ra, 'tcx> {
1511
1511
let feed = self . r . feed ( ctor_node_id) ;
1512
1512
let ctor_def_id = feed. key ( ) ;
1513
1513
let ctor_res = self . res ( ctor_def_id) ;
1514
- self . r . define ( parent, ident, ValueNS , ( ctor_res, ctor_vis, variant. span , expn_id) ) ;
1514
+ self . r . define ( parent, ident, ValueNS , ctor_res, ctor_vis, variant. span , expn_id) ;
1515
1515
self . r . feed_visibility ( feed, ctor_vis) ;
1516
1516
}
1517
1517
0 commit comments