@@ -1081,7 +1081,8 @@ 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
+ local_module_map : FxIndexMap < LocalDefId , Module < ' ra > > ,
1085
+ extern_module_map : RefCell < FxIndexMap < DefId , Module < ' ra > > > ,
1085
1086
binding_parent_modules : FxHashMap < NameBinding < ' ra > , Module < ' ra > > ,
1086
1087
1087
1088
underscore_disambiguator : u32 ,
@@ -1265,7 +1266,6 @@ impl<'ra> ResolverArenas<'ra> {
1265
1266
expn_id : ExpnId ,
1266
1267
span : Span ,
1267
1268
no_implicit_prelude : bool ,
1268
- module_map : & mut FxIndexMap < DefId , Module < ' ra > > ,
1269
1269
) -> Module < ' ra > {
1270
1270
let ( def_id, self_binding) = match kind {
1271
1271
ModuleKind :: Def ( def_kind, def_id, _) => (
@@ -1285,9 +1285,6 @@ impl<'ra> ResolverArenas<'ra> {
1285
1285
if def_id. is_none_or ( |def_id| def_id. is_local ( ) ) {
1286
1286
self . local_modules . borrow_mut ( ) . push ( module) ;
1287
1287
}
1288
- if let Some ( def_id) = def_id {
1289
- module_map. insert ( def_id, module) ;
1290
- }
1291
1288
module
1292
1289
}
1293
1290
fn local_modules ( & ' ra self ) -> std:: cell:: Ref < ' ra , Vec < Module < ' ra > > > {
@@ -1428,22 +1425,21 @@ impl<'ra, 'tcx> Resolver<'ra, 'tcx> {
1428
1425
arenas : & ' ra ResolverArenas < ' ra > ,
1429
1426
) -> Resolver < ' ra , ' tcx > {
1430
1427
let root_def_id = CRATE_DEF_ID . to_def_id ( ) ;
1431
- let mut module_map = FxIndexMap :: default ( ) ;
1428
+ let mut local_module_map = FxIndexMap :: default ( ) ;
1432
1429
let graph_root = arenas. new_module (
1433
1430
None ,
1434
1431
ModuleKind :: Def ( DefKind :: Mod , root_def_id, None ) ,
1435
1432
ExpnId :: root ( ) ,
1436
1433
crate_span,
1437
1434
attr:: contains_name ( attrs, sym:: no_implicit_prelude) ,
1438
- & mut module_map,
1439
1435
) ;
1436
+ local_module_map. insert ( CRATE_DEF_ID , graph_root) ;
1440
1437
let empty_module = arenas. new_module (
1441
1438
None ,
1442
1439
ModuleKind :: Def ( DefKind :: Mod , root_def_id, None ) ,
1443
1440
ExpnId :: root ( ) ,
1444
1441
DUMMY_SP ,
1445
1442
true ,
1446
- & mut Default :: default ( ) ,
1447
1443
) ;
1448
1444
1449
1445
let mut node_id_to_def_id = NodeMap :: default ( ) ;
@@ -1504,7 +1500,8 @@ impl<'ra, 'tcx> Resolver<'ra, 'tcx> {
1504
1500
trait_map : NodeMap :: default ( ) ,
1505
1501
underscore_disambiguator : 0 ,
1506
1502
empty_module,
1507
- module_map,
1503
+ local_module_map,
1504
+ extern_module_map : Default :: default ( ) ,
1508
1505
block_map : Default :: default ( ) ,
1509
1506
binding_parent_modules : FxHashMap :: default ( ) ,
1510
1507
ast_transform_scopes : FxHashMap :: default ( ) ,
@@ -1608,16 +1605,32 @@ impl<'ra, 'tcx> Resolver<'ra, 'tcx> {
1608
1605
resolver
1609
1606
}
1610
1607
1611
- fn new_module (
1608
+ fn new_local_module (
1609
+ & mut self ,
1610
+ parent : Option < Module < ' ra > > ,
1611
+ kind : ModuleKind ,
1612
+ expn_id : ExpnId ,
1613
+ span : Span ,
1614
+ no_implicit_prelude : bool ,
1615
+ ) -> Module < ' ra > {
1616
+ let module = self . arenas . new_module ( parent, kind, expn_id, span, no_implicit_prelude) ;
1617
+ if let Some ( def_id) = module. opt_def_id ( ) {
1618
+ self . local_module_map . insert ( def_id. expect_local ( ) , module) ;
1619
+ }
1620
+ module
1621
+ }
1622
+
1623
+ fn new_extern_module (
1612
1624
& mut self ,
1613
1625
parent : Option < Module < ' ra > > ,
1614
1626
kind : ModuleKind ,
1615
1627
expn_id : ExpnId ,
1616
1628
span : Span ,
1617
1629
no_implicit_prelude : bool ,
1618
1630
) -> 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)
1631
+ let module = self . arenas . new_module ( parent, kind, expn_id, span, no_implicit_prelude) ;
1632
+ self . extern_module_map . borrow_mut ( ) . insert ( module. def_id ( ) , module) ;
1633
+ module
1621
1634
}
1622
1635
1623
1636
fn new_local_macro ( & mut self , def_id : LocalDefId , macro_data : MacroData ) -> & ' ra MacroData {
0 commit comments