@@ -1081,7 +1081,10 @@ 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+ /// 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 > > > ,
10851088 binding_parent_modules : FxHashMap < NameBinding < ' ra > , Module < ' ra > > ,
10861089
10871090 underscore_disambiguator : u32 ,
@@ -1112,8 +1115,9 @@ pub struct Resolver<'ra, 'tcx> {
11121115 builtin_macros : FxHashMap < Symbol , SyntaxExtensionKind > ,
11131116 registered_tools : & ' tcx RegisteredTools ,
11141117 macro_use_prelude : FxIndexMap < Symbol , NameBinding < ' ra > > ,
1118+ /// Eagerly populated map of all local macro definitions.
11151119 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.
11171121 extern_macro_map : RefCell < FxHashMap < DefId , & ' ra MacroData > > ,
11181122 dummy_ext_bang : Arc < SyntaxExtension > ,
11191123 dummy_ext_derive : Arc < SyntaxExtension > ,
@@ -1265,7 +1269,6 @@ impl<'ra> ResolverArenas<'ra> {
12651269 expn_id : ExpnId ,
12661270 span : Span ,
12671271 no_implicit_prelude : bool ,
1268- module_map : & mut FxIndexMap < DefId , Module < ' ra > > ,
12691272 ) -> Module < ' ra > {
12701273 let ( def_id, self_binding) = match kind {
12711274 ModuleKind :: Def ( def_kind, def_id, _) => (
@@ -1285,9 +1288,6 @@ impl<'ra> ResolverArenas<'ra> {
12851288 if def_id. is_none_or ( |def_id| def_id. is_local ( ) ) {
12861289 self . local_modules . borrow_mut ( ) . push ( module) ;
12871290 }
1288- if let Some ( def_id) = def_id {
1289- module_map. insert ( def_id, module) ;
1290- }
12911291 module
12921292 }
12931293 fn local_modules ( & ' ra self ) -> std:: cell:: Ref < ' ra , Vec < Module < ' ra > > > {
@@ -1428,22 +1428,21 @@ impl<'ra, 'tcx> Resolver<'ra, 'tcx> {
14281428 arenas : & ' ra ResolverArenas < ' ra > ,
14291429 ) -> Resolver < ' ra , ' tcx > {
14301430 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 ( ) ;
14321432 let graph_root = arenas. new_module (
14331433 None ,
14341434 ModuleKind :: Def ( DefKind :: Mod , root_def_id, None ) ,
14351435 ExpnId :: root ( ) ,
14361436 crate_span,
14371437 attr:: contains_name ( attrs, sym:: no_implicit_prelude) ,
1438- & mut module_map,
14391438 ) ;
1439+ local_module_map. insert ( CRATE_DEF_ID , graph_root) ;
14401440 let empty_module = arenas. new_module (
14411441 None ,
14421442 ModuleKind :: Def ( DefKind :: Mod , root_def_id, None ) ,
14431443 ExpnId :: root ( ) ,
14441444 DUMMY_SP ,
14451445 true ,
1446- & mut Default :: default ( ) ,
14471446 ) ;
14481447
14491448 let mut node_id_to_def_id = NodeMap :: default ( ) ;
@@ -1504,7 +1503,8 @@ impl<'ra, 'tcx> Resolver<'ra, 'tcx> {
15041503 trait_map : NodeMap :: default ( ) ,
15051504 underscore_disambiguator : 0 ,
15061505 empty_module,
1507- module_map,
1506+ local_module_map,
1507+ extern_module_map : Default :: default ( ) ,
15081508 block_map : Default :: default ( ) ,
15091509 binding_parent_modules : FxHashMap :: default ( ) ,
15101510 ast_transform_scopes : FxHashMap :: default ( ) ,
@@ -1608,16 +1608,32 @@ impl<'ra, 'tcx> Resolver<'ra, 'tcx> {
16081608 resolver
16091609 }
16101610
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 (
16121627 & mut self ,
16131628 parent : Option < Module < ' ra > > ,
16141629 kind : ModuleKind ,
16151630 expn_id : ExpnId ,
16161631 span : Span ,
16171632 no_implicit_prelude : bool ,
16181633 ) -> 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
16211637 }
16221638
16231639 fn new_local_macro ( & mut self , def_id : LocalDefId , macro_data : MacroData ) -> & ' ra MacroData {
0 commit comments