@@ -954,7 +954,10 @@ pub struct Resolver<'a> {
954
954
arenas : & ' a ResolverArenas < ' a > ,
955
955
dummy_binding : & ' a NameBinding < ' a > ,
956
956
957
- crate_loader : CrateLoader < ' a > ,
957
+ local_crate_name : Symbol ,
958
+ metadata_loader : Box < MetadataLoaderDyn > ,
959
+ cstore : CStore ,
960
+ used_extern_options : FxHashSet < Symbol > ,
958
961
macro_names : FxHashSet < Ident > ,
959
962
builtin_macros : FxHashMap < Symbol , BuiltinMacroState > ,
960
963
/// 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<'_> {
1129
1132
impl < ' a , ' b > DefIdTree for & ' a Resolver < ' b > {
1130
1133
#[ inline]
1131
1134
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)
1133
1136
}
1134
1137
}
1135
1138
@@ -1311,7 +1314,10 @@ impl<'a> Resolver<'a> {
1311
1314
vis : ty:: Visibility :: Public ,
1312
1315
} ) ,
1313
1316
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) ,
1315
1321
macro_names : FxHashSet :: default ( ) ,
1316
1322
builtin_macros : Default :: default ( ) ,
1317
1323
builtin_macro_kinds : Default :: default ( ) ,
@@ -1403,7 +1409,7 @@ impl<'a> Resolver<'a> {
1403
1409
pub fn into_outputs ( self ) -> ResolverOutputs {
1404
1410
let proc_macros = self . proc_macros . iter ( ) . map ( |id| self . local_def_id ( * id) ) . collect ( ) ;
1405
1411
let definitions = self . definitions ;
1406
- let cstore = Box :: new ( self . crate_loader . into_cstore ( ) ) ;
1412
+ let cstore = Box :: new ( self . cstore ) ;
1407
1413
let source_span = self . source_span ;
1408
1414
let expn_that_defined = self . expn_that_defined ;
1409
1415
let visibilities = self . visibilities ;
@@ -1501,16 +1507,22 @@ impl<'a> Resolver<'a> {
1501
1507
}
1502
1508
1503
1509
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 ,
1506
1519
& self . definitions ,
1507
- self . crate_loader . cstore ( ) ,
1508
- & self . source_span ,
1520
+ & mut self . used_extern_options ,
1509
1521
)
1510
1522
}
1511
1523
1512
1524
pub fn cstore ( & self ) -> & CStore {
1513
- self . crate_loader . cstore ( )
1525
+ & self . cstore
1514
1526
}
1515
1527
1516
1528
fn dummy_ext ( & self , macro_kind : MacroKind ) -> Lrc < SyntaxExtension > {
@@ -1553,7 +1565,7 @@ impl<'a> Resolver<'a> {
1553
1565
self . session . time ( "resolve_main" , || self . resolve_main ( ) ) ;
1554
1566
self . session . time ( "resolve_check_unused" , || self . check_unused ( krate) ) ;
1555
1567
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) ) ;
1557
1569
} ) ;
1558
1570
}
1559
1571
@@ -1871,10 +1883,10 @@ impl<'a> Resolver<'a> {
1871
1883
} else {
1872
1884
let crate_id = if finalize {
1873
1885
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 ) ; } ;
1875
1887
crate_id
1876
1888
} else {
1877
- self . crate_loader . maybe_process_path_extern ( ident. name ) ?
1889
+ self . crate_loader ( ) . maybe_process_path_extern ( ident. name ) ?
1878
1890
} ;
1879
1891
let crate_root = self . expect_module ( crate_id. as_def_id ( ) ) ;
1880
1892
let vis = ty:: Visibility :: < LocalDefId > :: Public ;
0 commit comments