@@ -1081,7 +1081,10 @@ pub struct Resolver<'ra, 'tcx> {
1081
1081
/// some AST passes can generate identifiers that only resolve to local or
1082
1082
/// lang items.
1083
1083
empty_module : Module < ' ra > ,
1084
- module_map : FxIndexMap < DefId , Module < ' ra > > ,
1084
+ /// Eagerly populated map of all local non-block modules.
1085
+ local_module_map : FxIndexMap < LocalDefId , Module < ' ra > > ,
1086
+ /// Lazily populated cache of modules loaded from external crates.
1087
+ extern_module_map : RefCell < FxIndexMap < DefId , Module < ' ra > > > ,
1085
1088
binding_parent_modules : FxHashMap < NameBinding < ' ra > , Module < ' ra > > ,
1086
1089
1087
1090
underscore_disambiguator : u32 ,
@@ -1112,8 +1115,9 @@ pub struct Resolver<'ra, 'tcx> {
1112
1115
builtin_macros : FxHashMap < Symbol , SyntaxExtensionKind > ,
1113
1116
registered_tools : & ' tcx RegisteredTools ,
1114
1117
macro_use_prelude : FxIndexMap < Symbol , NameBinding < ' ra > > ,
1118
+ /// Eagerly populated map of all local macro definitions.
1115
1119
local_macro_map : FxHashMap < LocalDefId , & ' ra MacroData > ,
1116
- /// Lazily populated cache of macros loaded from external crates.
1120
+ /// Lazily populated cache of macro definitions loaded from external crates.
1117
1121
extern_macro_map : RefCell < FxHashMap < DefId , & ' ra MacroData > > ,
1118
1122
dummy_ext_bang : Arc < SyntaxExtension > ,
1119
1123
dummy_ext_derive : Arc < SyntaxExtension > ,
@@ -1265,7 +1269,6 @@ impl<'ra> ResolverArenas<'ra> {
1265
1269
expn_id : ExpnId ,
1266
1270
span : Span ,
1267
1271
no_implicit_prelude : bool ,
1268
- module_map : & mut FxIndexMap < DefId , Module < ' ra > > ,
1269
1272
) -> Module < ' ra > {
1270
1273
let ( def_id, self_binding) = match kind {
1271
1274
ModuleKind :: Def ( def_kind, def_id, _) => (
@@ -1285,9 +1288,6 @@ impl<'ra> ResolverArenas<'ra> {
1285
1288
if def_id. is_none_or ( |def_id| def_id. is_local ( ) ) {
1286
1289
self . local_modules . borrow_mut ( ) . push ( module) ;
1287
1290
}
1288
- if let Some ( def_id) = def_id {
1289
- module_map. insert ( def_id, module) ;
1290
- }
1291
1291
module
1292
1292
}
1293
1293
fn local_modules ( & ' ra self ) -> std:: cell:: Ref < ' ra , Vec < Module < ' ra > > > {
@@ -1428,22 +1428,21 @@ impl<'ra, 'tcx> Resolver<'ra, 'tcx> {
1428
1428
arenas : & ' ra ResolverArenas < ' ra > ,
1429
1429
) -> Resolver < ' ra , ' tcx > {
1430
1430
let root_def_id = CRATE_DEF_ID . to_def_id ( ) ;
1431
- let mut module_map = FxIndexMap :: default ( ) ;
1431
+ let mut local_module_map = FxIndexMap :: default ( ) ;
1432
1432
let graph_root = arenas. new_module (
1433
1433
None ,
1434
1434
ModuleKind :: Def ( DefKind :: Mod , root_def_id, None ) ,
1435
1435
ExpnId :: root ( ) ,
1436
1436
crate_span,
1437
1437
attr:: contains_name ( attrs, sym:: no_implicit_prelude) ,
1438
- & mut module_map,
1439
1438
) ;
1439
+ local_module_map. insert ( CRATE_DEF_ID , graph_root) ;
1440
1440
let empty_module = arenas. new_module (
1441
1441
None ,
1442
1442
ModuleKind :: Def ( DefKind :: Mod , root_def_id, None ) ,
1443
1443
ExpnId :: root ( ) ,
1444
1444
DUMMY_SP ,
1445
1445
true ,
1446
- & mut Default :: default ( ) ,
1447
1446
) ;
1448
1447
1449
1448
let mut node_id_to_def_id = NodeMap :: default ( ) ;
@@ -1504,7 +1503,8 @@ impl<'ra, 'tcx> Resolver<'ra, 'tcx> {
1504
1503
trait_map : NodeMap :: default ( ) ,
1505
1504
underscore_disambiguator : 0 ,
1506
1505
empty_module,
1507
- module_map,
1506
+ local_module_map,
1507
+ extern_module_map : Default :: default ( ) ,
1508
1508
block_map : Default :: default ( ) ,
1509
1509
binding_parent_modules : FxHashMap :: default ( ) ,
1510
1510
ast_transform_scopes : FxHashMap :: default ( ) ,
@@ -1608,16 +1608,32 @@ impl<'ra, 'tcx> Resolver<'ra, 'tcx> {
1608
1608
resolver
1609
1609
}
1610
1610
1611
- fn new_module (
1611
+ fn new_local_module (
1612
+ & mut self ,
1613
+ parent : Option < Module < ' ra > > ,
1614
+ kind : ModuleKind ,
1615
+ expn_id : ExpnId ,
1616
+ span : Span ,
1617
+ no_implicit_prelude : bool ,
1618
+ ) -> Module < ' ra > {
1619
+ let module = self . arenas . new_module ( parent, kind, expn_id, span, no_implicit_prelude) ;
1620
+ if let Some ( def_id) = module. opt_def_id ( ) {
1621
+ self . local_module_map . insert ( def_id. expect_local ( ) , module) ;
1622
+ }
1623
+ module
1624
+ }
1625
+
1626
+ fn new_extern_module (
1612
1627
& mut self ,
1613
1628
parent : Option < Module < ' ra > > ,
1614
1629
kind : ModuleKind ,
1615
1630
expn_id : ExpnId ,
1616
1631
span : Span ,
1617
1632
no_implicit_prelude : bool ,
1618
1633
) -> Module < ' ra > {
1619
- let module_map = & mut self . module_map ;
1620
- self . arenas . new_module ( parent, kind, expn_id, span, no_implicit_prelude, module_map)
1634
+ let module = self . arenas . new_module ( parent, kind, expn_id, span, no_implicit_prelude) ;
1635
+ self . extern_module_map . borrow_mut ( ) . insert ( module. def_id ( ) , module) ;
1636
+ module
1621
1637
}
1622
1638
1623
1639
fn new_local_macro ( & mut self , def_id : LocalDefId , macro_data : MacroData ) -> & ' ra MacroData {
0 commit comments