@@ -1074,7 +1074,8 @@ pub struct Resolver<'ra, 'tcx> {
1074
1074
/// some AST passes can generate identifiers that only resolve to local or
1075
1075
/// lang items.
1076
1076
empty_module : Module < ' ra > ,
1077
- module_map : FxIndexMap < DefId , Module < ' ra > > ,
1077
+ local_module_map : FxIndexMap < LocalDefId , Module < ' ra > > ,
1078
+ extern_module_map : RefCell < FxIndexMap < DefId , Module < ' ra > > > ,
1078
1079
binding_parent_modules : FxHashMap < NameBinding < ' ra > , Module < ' ra > > ,
1079
1080
1080
1081
underscore_disambiguator : u32 ,
@@ -1258,7 +1259,6 @@ impl<'ra> ResolverArenas<'ra> {
1258
1259
expn_id : ExpnId ,
1259
1260
span : Span ,
1260
1261
no_implicit_prelude : bool ,
1261
- module_map : & mut FxIndexMap < DefId , Module < ' ra > > ,
1262
1262
) -> Module < ' ra > {
1263
1263
let ( def_id, self_binding) = match kind {
1264
1264
ModuleKind :: Def ( def_kind, def_id, _) => (
@@ -1278,9 +1278,6 @@ impl<'ra> ResolverArenas<'ra> {
1278
1278
if def_id. is_none_or ( |def_id| def_id. is_local ( ) ) {
1279
1279
self . local_modules . borrow_mut ( ) . push ( module) ;
1280
1280
}
1281
- if let Some ( def_id) = def_id {
1282
- module_map. insert ( def_id, module) ;
1283
- }
1284
1281
module
1285
1282
}
1286
1283
fn local_modules ( & ' ra self ) -> std:: cell:: Ref < ' ra , Vec < Module < ' ra > > > {
@@ -1421,22 +1418,21 @@ impl<'ra, 'tcx> Resolver<'ra, 'tcx> {
1421
1418
arenas : & ' ra ResolverArenas < ' ra > ,
1422
1419
) -> Resolver < ' ra , ' tcx > {
1423
1420
let root_def_id = CRATE_DEF_ID . to_def_id ( ) ;
1424
- let mut module_map = FxIndexMap :: default ( ) ;
1421
+ let mut local_module_map = FxIndexMap :: default ( ) ;
1425
1422
let graph_root = arenas. new_module (
1426
1423
None ,
1427
1424
ModuleKind :: Def ( DefKind :: Mod , root_def_id, None ) ,
1428
1425
ExpnId :: root ( ) ,
1429
1426
crate_span,
1430
1427
attr:: contains_name ( attrs, sym:: no_implicit_prelude) ,
1431
- & mut module_map,
1432
1428
) ;
1429
+ local_module_map. insert ( CRATE_DEF_ID , graph_root) ;
1433
1430
let empty_module = arenas. new_module (
1434
1431
None ,
1435
1432
ModuleKind :: Def ( DefKind :: Mod , root_def_id, None ) ,
1436
1433
ExpnId :: root ( ) ,
1437
1434
DUMMY_SP ,
1438
1435
true ,
1439
- & mut Default :: default ( ) ,
1440
1436
) ;
1441
1437
1442
1438
let mut node_id_to_def_id = NodeMap :: default ( ) ;
@@ -1497,7 +1493,8 @@ impl<'ra, 'tcx> Resolver<'ra, 'tcx> {
1497
1493
trait_map : NodeMap :: default ( ) ,
1498
1494
underscore_disambiguator : 0 ,
1499
1495
empty_module,
1500
- module_map,
1496
+ local_module_map,
1497
+ extern_module_map : Default :: default ( ) ,
1501
1498
block_map : Default :: default ( ) ,
1502
1499
binding_parent_modules : FxHashMap :: default ( ) ,
1503
1500
ast_transform_scopes : FxHashMap :: default ( ) ,
@@ -1601,16 +1598,32 @@ impl<'ra, 'tcx> Resolver<'ra, 'tcx> {
1601
1598
resolver
1602
1599
}
1603
1600
1604
- fn new_module (
1601
+ fn new_local_module (
1602
+ & mut self ,
1603
+ parent : Option < Module < ' ra > > ,
1604
+ kind : ModuleKind ,
1605
+ expn_id : ExpnId ,
1606
+ span : Span ,
1607
+ no_implicit_prelude : bool ,
1608
+ ) -> Module < ' ra > {
1609
+ let module = self . arenas . new_module ( parent, kind, expn_id, span, no_implicit_prelude) ;
1610
+ if let Some ( def_id) = module. opt_def_id ( ) {
1611
+ self . local_module_map . insert ( def_id. expect_local ( ) , module) ;
1612
+ }
1613
+ module
1614
+ }
1615
+
1616
+ fn new_extern_module (
1605
1617
& mut self ,
1606
1618
parent : Option < Module < ' ra > > ,
1607
1619
kind : ModuleKind ,
1608
1620
expn_id : ExpnId ,
1609
1621
span : Span ,
1610
1622
no_implicit_prelude : bool ,
1611
1623
) -> Module < ' ra > {
1612
- let module_map = & mut self . module_map ;
1613
- self . arenas . new_module ( parent, kind, expn_id, span, no_implicit_prelude, module_map)
1624
+ let module = self . arenas . new_module ( parent, kind, expn_id, span, no_implicit_prelude) ;
1625
+ self . extern_module_map . borrow_mut ( ) . insert ( module. def_id ( ) , module) ;
1626
+ module
1614
1627
}
1615
1628
1616
1629
fn new_local_macro ( & mut self , def_id : LocalDefId , macro_data : MacroData ) -> & ' ra MacroData {
0 commit comments