@@ -1081,7 +1081,8 @@ pub struct Resolver<'ra, 'tcx> {
10811081 /// some AST passes can generate identifiers that only resolve to local or
10821082 /// lang items.
10831083 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 > > > ,
10851086 binding_parent_modules : FxHashMap < NameBinding < ' ra > , Module < ' ra > > ,
10861087
10871088 underscore_disambiguator : u32 ,
@@ -1265,7 +1266,6 @@ impl<'ra> ResolverArenas<'ra> {
12651266 expn_id : ExpnId ,
12661267 span : Span ,
12671268 no_implicit_prelude : bool ,
1268- module_map : & mut FxIndexMap < DefId , Module < ' ra > > ,
12691269 ) -> Module < ' ra > {
12701270 let ( def_id, self_binding) = match kind {
12711271 ModuleKind :: Def ( def_kind, def_id, _) => (
@@ -1285,9 +1285,6 @@ impl<'ra> ResolverArenas<'ra> {
12851285 if def_id. is_none_or ( |def_id| def_id. is_local ( ) ) {
12861286 self . local_modules . borrow_mut ( ) . push ( module) ;
12871287 }
1288- if let Some ( def_id) = def_id {
1289- module_map. insert ( def_id, module) ;
1290- }
12911288 module
12921289 }
12931290 fn local_modules ( & ' ra self ) -> std:: cell:: Ref < ' ra , Vec < Module < ' ra > > > {
@@ -1428,22 +1425,21 @@ impl<'ra, 'tcx> Resolver<'ra, 'tcx> {
14281425 arenas : & ' ra ResolverArenas < ' ra > ,
14291426 ) -> Resolver < ' ra , ' tcx > {
14301427 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 ( ) ;
14321429 let graph_root = arenas. new_module (
14331430 None ,
14341431 ModuleKind :: Def ( DefKind :: Mod , root_def_id, None ) ,
14351432 ExpnId :: root ( ) ,
14361433 crate_span,
14371434 attr:: contains_name ( attrs, sym:: no_implicit_prelude) ,
1438- & mut module_map,
14391435 ) ;
1436+ local_module_map. insert ( CRATE_DEF_ID , graph_root) ;
14401437 let empty_module = arenas. new_module (
14411438 None ,
14421439 ModuleKind :: Def ( DefKind :: Mod , root_def_id, None ) ,
14431440 ExpnId :: root ( ) ,
14441441 DUMMY_SP ,
14451442 true ,
1446- & mut Default :: default ( ) ,
14471443 ) ;
14481444
14491445 let mut node_id_to_def_id = NodeMap :: default ( ) ;
@@ -1504,7 +1500,8 @@ impl<'ra, 'tcx> Resolver<'ra, 'tcx> {
15041500 trait_map : NodeMap :: default ( ) ,
15051501 underscore_disambiguator : 0 ,
15061502 empty_module,
1507- module_map,
1503+ local_module_map,
1504+ extern_module_map : Default :: default ( ) ,
15081505 block_map : Default :: default ( ) ,
15091506 binding_parent_modules : FxHashMap :: default ( ) ,
15101507 ast_transform_scopes : FxHashMap :: default ( ) ,
@@ -1608,16 +1605,32 @@ impl<'ra, 'tcx> Resolver<'ra, 'tcx> {
16081605 resolver
16091606 }
16101607
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 (
16121624 & mut self ,
16131625 parent : Option < Module < ' ra > > ,
16141626 kind : ModuleKind ,
16151627 expn_id : ExpnId ,
16161628 span : Span ,
16171629 no_implicit_prelude : bool ,
16181630 ) -> 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
16211634 }
16221635
16231636 fn new_local_macro ( & mut self , def_id : LocalDefId , macro_data : MacroData ) -> & ' ra MacroData {
0 commit comments