@@ -9,7 +9,7 @@ use rustc::hir::lowering::lower_crate;
9
9
use rustc:: hir:: def_id:: { CrateNum , LOCAL_CRATE } ;
10
10
use rustc:: lint;
11
11
use rustc:: middle:: { self , reachable, resolve_lifetime, stability} ;
12
- use rustc:: middle:: cstore:: { CrateStore , MetadataLoader } ;
12
+ use rustc:: middle:: cstore:: { CrateStore , MetadataLoader , MetadataLoaderDyn } ;
13
13
use rustc:: ty:: { self , AllArenas , ResolverOutputs , TyCtxt , GlobalCtxt } ;
14
14
use rustc:: ty:: steal:: Steal ;
15
15
use rustc:: traits;
@@ -23,8 +23,7 @@ use rustc_codegen_utils::link::filename_for_metadata;
23
23
use rustc_data_structures:: { box_region_allow_access, declare_box_region_type, parallel} ;
24
24
use rustc_data_structures:: sync:: { Lrc , ParallelIterator , par_iter} ;
25
25
use rustc_incremental;
26
- use rustc_metadata:: creader:: CrateLoader ;
27
- use rustc_metadata:: cstore:: { self , CStore } ;
26
+ use rustc_metadata:: cstore;
28
27
use rustc_mir as mir;
29
28
use rustc_passes:: { self , ast_validation, hir_stats, layout_test} ;
30
29
use rustc_plugin as plugin;
@@ -116,7 +115,7 @@ declare_box_region_type!(
116
115
pub fn configure_and_expand (
117
116
sess : Lrc < Session > ,
118
117
lint_store : Lrc < lint:: LintStore > ,
119
- cstore : Lrc < CStore > ,
118
+ metadata_loader : Box < MetadataLoaderDyn > ,
120
119
krate : ast:: Crate ,
121
120
crate_name : & str ,
122
121
plugin_info : PluginInfo ,
@@ -129,16 +128,14 @@ pub fn configure_and_expand(
129
128
let crate_name = crate_name. to_string ( ) ;
130
129
let ( result, resolver) = BoxedResolver :: new ( static move || {
131
130
let sess = & * sess;
132
- let crate_loader = CrateLoader :: new ( sess, & * cstore, & crate_name) ;
133
131
let resolver_arenas = Resolver :: arenas ( ) ;
134
132
let res = configure_and_expand_inner (
135
133
sess,
136
134
& lint_store,
137
- & * cstore,
138
135
krate,
139
136
& crate_name,
140
137
& resolver_arenas,
141
- & crate_loader ,
138
+ & * metadata_loader ,
142
139
plugin_info,
143
140
) ;
144
141
let mut resolver = match res {
@@ -275,11 +272,10 @@ pub fn register_plugins<'a>(
275
272
fn configure_and_expand_inner < ' a > (
276
273
sess : & ' a Session ,
277
274
lint_store : & ' a lint:: LintStore ,
278
- cstore : & ' a CStore ,
279
275
mut krate : ast:: Crate ,
280
276
crate_name : & str ,
281
277
resolver_arenas : & ' a ResolverArenas < ' a > ,
282
- crate_loader : & ' a CrateLoader < ' a > ,
278
+ metadata_loader : & ' a MetadataLoaderDyn ,
283
279
plugin_info : PluginInfo ,
284
280
) -> Result < ( ast:: Crate , Resolver < ' a > ) > {
285
281
time ( sess, "pre-AST-expansion lint checks" , || {
@@ -293,10 +289,9 @@ fn configure_and_expand_inner<'a>(
293
289
294
290
let mut resolver = Resolver :: new (
295
291
sess,
296
- cstore,
297
292
& krate,
298
293
crate_name,
299
- crate_loader ,
294
+ metadata_loader ,
300
295
& resolver_arenas,
301
296
) ;
302
297
syntax_ext:: register_builtin_macros ( & mut resolver, sess. edition ( ) ) ;
@@ -496,15 +491,14 @@ fn configure_and_expand_inner<'a>(
496
491
pub fn lower_to_hir (
497
492
sess : & Session ,
498
493
lint_store : & lint:: LintStore ,
499
- cstore : & CStore ,
500
494
resolver : & mut Resolver < ' _ > ,
501
495
dep_graph : & DepGraph ,
502
496
krate : & ast:: Crate ,
503
497
) -> Result < hir:: map:: Forest > {
504
498
// Lower AST to HIR.
505
499
let hir_forest = time ( sess, "lowering AST -> HIR" , || {
506
500
let nt_to_tokenstream = syntax:: parse:: nt_to_tokenstream;
507
- let hir_crate = lower_crate ( sess, cstore , & dep_graph, & krate, resolver, nt_to_tokenstream) ;
501
+ let hir_crate = lower_crate ( sess, & dep_graph, & krate, resolver, nt_to_tokenstream) ;
508
502
509
503
if sess. opts . debugging_opts . hir_stats {
510
504
hir_stats:: print_hir_stats ( & hir_crate) ;
@@ -610,8 +604,12 @@ fn escape_dep_filename(filename: &FileName) -> String {
610
604
filename. to_string ( ) . replace ( " " , "\\ " )
611
605
}
612
606
613
- fn write_out_deps ( compiler : & Compiler , outputs : & OutputFilenames , out_filenames : & [ PathBuf ] ) {
614
- let sess = & compiler. sess ;
607
+ fn write_out_deps (
608
+ sess : & Session ,
609
+ boxed_resolver : & Steal < Rc < RefCell < BoxedResolver > > > ,
610
+ outputs : & OutputFilenames ,
611
+ out_filenames : & [ PathBuf ] ,
612
+ ) {
615
613
// Write out dependency rules to the dep-info file if requested
616
614
if !sess. opts . output_types . contains_key ( & OutputType :: DepInfo ) {
617
615
return ;
@@ -630,18 +628,20 @@ fn write_out_deps(compiler: &Compiler, outputs: &OutputFilenames, out_filenames:
630
628
. collect ( ) ;
631
629
632
630
if sess. binary_dep_depinfo ( ) {
633
- for cnum in compiler. cstore . crates_untracked ( ) {
634
- let source = compiler. cstore . crate_source_untracked ( cnum) ;
635
- if let Some ( ( path, _) ) = source. dylib {
636
- files. push ( escape_dep_filename ( & FileName :: Real ( path) ) ) ;
637
- }
638
- if let Some ( ( path, _) ) = source. rlib {
639
- files. push ( escape_dep_filename ( & FileName :: Real ( path) ) ) ;
631
+ boxed_resolver. borrow ( ) . borrow_mut ( ) . access ( |resolver| {
632
+ for cnum in resolver. cstore ( ) . crates_untracked ( ) {
633
+ let source = resolver. cstore ( ) . crate_source_untracked ( cnum) ;
634
+ if let Some ( ( path, _) ) = source. dylib {
635
+ files. push ( escape_dep_filename ( & FileName :: Real ( path) ) ) ;
636
+ }
637
+ if let Some ( ( path, _) ) = source. rlib {
638
+ files. push ( escape_dep_filename ( & FileName :: Real ( path) ) ) ;
639
+ }
640
+ if let Some ( ( path, _) ) = source. rmeta {
641
+ files. push ( escape_dep_filename ( & FileName :: Real ( path) ) ) ;
642
+ }
640
643
}
641
- if let Some ( ( path, _) ) = source. rmeta {
642
- files. push ( escape_dep_filename ( & FileName :: Real ( path) ) ) ;
643
- }
644
- }
644
+ } ) ;
645
645
}
646
646
647
647
let mut file = fs:: File :: create ( & deps_filename) ?;
@@ -679,6 +679,7 @@ pub fn prepare_outputs(
679
679
sess : & Session ,
680
680
compiler : & Compiler ,
681
681
krate : & ast:: Crate ,
682
+ boxed_resolver : & Steal < Rc < RefCell < BoxedResolver > > > ,
682
683
crate_name : & str
683
684
) -> Result < OutputFilenames > {
684
685
// FIXME: rustdoc passes &[] instead of &krate.attrs here
@@ -720,7 +721,7 @@ pub fn prepare_outputs(
720
721
}
721
722
}
722
723
723
- write_out_deps ( compiler , & outputs, & output_paths) ;
724
+ write_out_deps ( sess , boxed_resolver , & outputs, & output_paths) ;
724
725
725
726
let only_dep_info = sess. opts . output_types . contains_key ( & OutputType :: DepInfo )
726
727
&& sess. opts . output_types . len ( ) == 1 ;
@@ -790,21 +791,19 @@ pub fn create_global_ctxt(
790
791
crate_name : & str ,
791
792
) -> BoxedGlobalCtxt {
792
793
let sess = compiler. session ( ) . clone ( ) ;
793
- let cstore = compiler. cstore . clone ( ) ;
794
794
let codegen_backend = compiler. codegen_backend ( ) . clone ( ) ;
795
795
let crate_name = crate_name. to_string ( ) ;
796
796
let defs = mem:: take ( & mut resolver_outputs. definitions ) ;
797
797
798
798
let ( ( ) , result) = BoxedGlobalCtxt :: new ( static move || {
799
799
let sess = & * sess;
800
- let cstore = & * cstore;
801
800
802
801
let global_ctxt: Option < GlobalCtxt < ' _ > > ;
803
802
let arenas = AllArenas :: new ( ) ;
804
803
805
804
// Construct the HIR map.
806
805
let hir_map = time ( sess, "indexing HIR" , || {
807
- hir:: map:: map_crate ( sess, cstore, & mut hir_forest, & defs)
806
+ hir:: map:: map_crate ( sess, & * resolver_outputs . cstore , & mut hir_forest, & defs)
808
807
} ) ;
809
808
810
809
let query_result_on_disk_cache = time ( sess, "load query result cache" , || {
@@ -822,7 +821,6 @@ pub fn create_global_ctxt(
822
821
let gcx = TyCtxt :: create_global_ctxt (
823
822
sess,
824
823
lint_store,
825
- cstore,
826
824
local_providers,
827
825
extern_providers,
828
826
& arenas,
0 commit comments