@@ -954,7 +954,10 @@ pub struct Resolver<'a> {
954954 arenas : & ' a ResolverArenas < ' a > ,
955955 dummy_binding : & ' a NameBinding < ' a > ,
956956
957- crate_loader : CrateLoader < ' a > ,
957+ local_crate_name : Symbol ,
958+ metadata_loader : Box < MetadataLoaderDyn > ,
959+ cstore : CStore ,
960+ used_extern_options : FxHashSet < Symbol > ,
958961 macro_names : FxHashSet < Ident > ,
959962 builtin_macros : FxHashMap < Symbol , BuiltinMacroState > ,
960963 /// A small map keeping true kinds of built-in macros that appear to be fn-like on
@@ -1129,7 +1132,7 @@ impl DefIdTree for ResolverTree<'_> {
11291132impl < ' a , ' b > DefIdTree for & ' a Resolver < ' b > {
11301133 #[ inline]
11311134 fn opt_parent ( self , id : DefId ) -> Option < DefId > {
1132- ResolverTree ( & self . definitions , self . cstore ( ) ) . opt_parent ( id)
1135+ ResolverTree ( & self . definitions , & self . cstore ) . opt_parent ( id)
11331136 }
11341137}
11351138
@@ -1311,7 +1314,10 @@ impl<'a> Resolver<'a> {
13111314 vis : ty:: Visibility :: Public ,
13121315 } ) ,
13131316
1314- crate_loader : CrateLoader :: new ( session, metadata_loader, crate_name) ,
1317+ metadata_loader,
1318+ local_crate_name : crate_name,
1319+ used_extern_options : Default :: default ( ) ,
1320+ cstore : CStore :: new ( session) ,
13151321 macro_names : FxHashSet :: default ( ) ,
13161322 builtin_macros : Default :: default ( ) ,
13171323 builtin_macro_kinds : Default :: default ( ) ,
@@ -1403,7 +1409,7 @@ impl<'a> Resolver<'a> {
14031409 pub fn into_outputs ( self ) -> ResolverOutputs {
14041410 let proc_macros = self . proc_macros . iter ( ) . map ( |id| self . local_def_id ( * id) ) . collect ( ) ;
14051411 let definitions = self . definitions ;
1406- let cstore = Box :: new ( self . crate_loader . into_cstore ( ) ) ;
1412+ let cstore = Box :: new ( self . cstore ) ;
14071413 let source_span = self . source_span ;
14081414 let expn_that_defined = self . expn_that_defined ;
14091415 let visibilities = self . visibilities ;
@@ -1501,16 +1507,22 @@ impl<'a> Resolver<'a> {
15011507 }
15021508
15031509 fn create_stable_hashing_context ( & self ) -> StableHashingContext < ' _ > {
1504- StableHashingContext :: new (
1505- self . session ,
1510+ StableHashingContext :: new ( self . session , & self . definitions , & self . cstore , & self . source_span )
1511+ }
1512+
1513+ pub fn crate_loader ( & mut self ) -> CrateLoader < ' _ > {
1514+ CrateLoader :: new (
1515+ & self . session ,
1516+ & * self . metadata_loader ,
1517+ self . local_crate_name ,
1518+ & mut self . cstore ,
15061519 & self . definitions ,
1507- self . crate_loader . cstore ( ) ,
1508- & self . source_span ,
1520+ & mut self . used_extern_options ,
15091521 )
15101522 }
15111523
15121524 pub fn cstore ( & self ) -> & CStore {
1513- self . crate_loader . cstore ( )
1525+ & self . cstore
15141526 }
15151527
15161528 fn dummy_ext ( & self , macro_kind : MacroKind ) -> Lrc < SyntaxExtension > {
@@ -1553,7 +1565,7 @@ impl<'a> Resolver<'a> {
15531565 self . session . time ( "resolve_main" , || self . resolve_main ( ) ) ;
15541566 self . session . time ( "resolve_check_unused" , || self . check_unused ( krate) ) ;
15551567 self . session . time ( "resolve_report_errors" , || self . report_errors ( krate) ) ;
1556- self . session . time ( "resolve_postprocess" , || self . crate_loader . postprocess ( krate) ) ;
1568+ self . session . time ( "resolve_postprocess" , || self . crate_loader ( ) . postprocess ( krate) ) ;
15571569 } ) ;
15581570 }
15591571
@@ -1871,10 +1883,10 @@ impl<'a> Resolver<'a> {
18711883 } else {
18721884 let crate_id = if finalize {
18731885 let Some ( crate_id) =
1874- self . crate_loader . process_path_extern ( ident. name , ident. span ) else { return Some ( self . dummy_binding ) ; } ;
1886+ self . crate_loader ( ) . process_path_extern ( ident. name , ident. span ) else { return Some ( self . dummy_binding ) ; } ;
18751887 crate_id
18761888 } else {
1877- self . crate_loader . maybe_process_path_extern ( ident. name ) ?
1889+ self . crate_loader ( ) . maybe_process_path_extern ( ident. name ) ?
18781890 } ;
18791891 let crate_root = self . expect_module ( crate_id. as_def_id ( ) ) ;
18801892 let vis = ty:: Visibility :: < LocalDefId > :: Public ;
0 commit comments