@@ -1074,7 +1074,8 @@ pub struct Resolver<'ra, 'tcx> {
10741074 /// some AST passes can generate identifiers that only resolve to local or
10751075 /// lang items.
10761076 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 > > > ,
10781079 binding_parent_modules : FxHashMap < NameBinding < ' ra > , Module < ' ra > > ,
10791080
10801081 underscore_disambiguator : u32 ,
@@ -1258,7 +1259,6 @@ impl<'ra> ResolverArenas<'ra> {
12581259 expn_id : ExpnId ,
12591260 span : Span ,
12601261 no_implicit_prelude : bool ,
1261- module_map : & mut FxIndexMap < DefId , Module < ' ra > > ,
12621262 ) -> Module < ' ra > {
12631263 let ( def_id, self_binding) = match kind {
12641264 ModuleKind :: Def ( def_kind, def_id, _) => (
@@ -1278,9 +1278,6 @@ impl<'ra> ResolverArenas<'ra> {
12781278 if def_id. is_none_or ( |def_id| def_id. is_local ( ) ) {
12791279 self . local_modules . borrow_mut ( ) . push ( module) ;
12801280 }
1281- if let Some ( def_id) = def_id {
1282- module_map. insert ( def_id, module) ;
1283- }
12841281 module
12851282 }
12861283 fn local_modules ( & ' ra self ) -> std:: cell:: Ref < ' ra , Vec < Module < ' ra > > > {
@@ -1421,22 +1418,21 @@ impl<'ra, 'tcx> Resolver<'ra, 'tcx> {
14211418 arenas : & ' ra ResolverArenas < ' ra > ,
14221419 ) -> Resolver < ' ra , ' tcx > {
14231420 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 ( ) ;
14251422 let graph_root = arenas. new_module (
14261423 None ,
14271424 ModuleKind :: Def ( DefKind :: Mod , root_def_id, None ) ,
14281425 ExpnId :: root ( ) ,
14291426 crate_span,
14301427 attr:: contains_name ( attrs, sym:: no_implicit_prelude) ,
1431- & mut module_map,
14321428 ) ;
1429+ local_module_map. insert ( CRATE_DEF_ID , graph_root) ;
14331430 let empty_module = arenas. new_module (
14341431 None ,
14351432 ModuleKind :: Def ( DefKind :: Mod , root_def_id, None ) ,
14361433 ExpnId :: root ( ) ,
14371434 DUMMY_SP ,
14381435 true ,
1439- & mut Default :: default ( ) ,
14401436 ) ;
14411437
14421438 let mut node_id_to_def_id = NodeMap :: default ( ) ;
@@ -1497,7 +1493,8 @@ impl<'ra, 'tcx> Resolver<'ra, 'tcx> {
14971493 trait_map : NodeMap :: default ( ) ,
14981494 underscore_disambiguator : 0 ,
14991495 empty_module,
1500- module_map,
1496+ local_module_map,
1497+ extern_module_map : Default :: default ( ) ,
15011498 block_map : Default :: default ( ) ,
15021499 binding_parent_modules : FxHashMap :: default ( ) ,
15031500 ast_transform_scopes : FxHashMap :: default ( ) ,
@@ -1601,16 +1598,32 @@ impl<'ra, 'tcx> Resolver<'ra, 'tcx> {
16011598 resolver
16021599 }
16031600
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 (
16051617 & mut self ,
16061618 parent : Option < Module < ' ra > > ,
16071619 kind : ModuleKind ,
16081620 expn_id : ExpnId ,
16091621 span : Span ,
16101622 no_implicit_prelude : bool ,
16111623 ) -> 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
16141627 }
16151628
16161629 fn new_local_macro ( & mut self , def_id : LocalDefId , macro_data : MacroData ) -> & ' ra MacroData {
0 commit comments