@@ -9,7 +9,7 @@ use rustc::hir::lowering::lower_crate;
99use rustc:: hir:: def_id:: { CrateNum , LOCAL_CRATE } ;
1010use rustc:: lint;
1111use rustc:: middle:: { self , reachable, resolve_lifetime, stability} ;
12- use rustc:: middle:: cstore:: { CrateStore , MetadataLoader } ;
12+ use rustc:: middle:: cstore:: { CrateStore , MetadataLoader , MetadataLoaderDyn } ;
1313use rustc:: ty:: { self , AllArenas , ResolverOutputs , TyCtxt , GlobalCtxt } ;
1414use rustc:: ty:: steal:: Steal ;
1515use rustc:: traits;
@@ -23,8 +23,7 @@ use rustc_codegen_utils::link::filename_for_metadata;
2323use rustc_data_structures:: { box_region_allow_access, declare_box_region_type, parallel} ;
2424use rustc_data_structures:: sync:: { Lrc , ParallelIterator , par_iter} ;
2525use rustc_incremental;
26- use rustc_metadata:: creader:: CrateLoader ;
27- use rustc_metadata:: cstore:: { self , CStore } ;
26+ use rustc_metadata:: cstore;
2827use rustc_mir as mir;
2928use rustc_passes:: { self , ast_validation, hir_stats, layout_test} ;
3029use rustc_plugin as plugin;
@@ -116,7 +115,7 @@ declare_box_region_type!(
116115pub fn configure_and_expand (
117116 sess : Lrc < Session > ,
118117 lint_store : Lrc < lint:: LintStore > ,
119- cstore : Lrc < CStore > ,
118+ metadata_loader : Box < MetadataLoaderDyn > ,
120119 krate : ast:: Crate ,
121120 crate_name : & str ,
122121 plugin_info : PluginInfo ,
@@ -129,16 +128,14 @@ pub fn configure_and_expand(
129128 let crate_name = crate_name. to_string ( ) ;
130129 let ( result, resolver) = BoxedResolver :: new ( static move || {
131130 let sess = & * sess;
132- let crate_loader = CrateLoader :: new ( sess, & * cstore, & crate_name) ;
133131 let resolver_arenas = Resolver :: arenas ( ) ;
134132 let res = configure_and_expand_inner (
135133 sess,
136134 & lint_store,
137- & * cstore,
138135 krate,
139136 & crate_name,
140137 & resolver_arenas,
141- & crate_loader ,
138+ & * metadata_loader ,
142139 plugin_info,
143140 ) ;
144141 let mut resolver = match res {
@@ -275,11 +272,10 @@ pub fn register_plugins<'a>(
275272fn configure_and_expand_inner < ' a > (
276273 sess : & ' a Session ,
277274 lint_store : & ' a lint:: LintStore ,
278- cstore : & ' a CStore ,
279275 mut krate : ast:: Crate ,
280276 crate_name : & str ,
281277 resolver_arenas : & ' a ResolverArenas < ' a > ,
282- crate_loader : & ' a CrateLoader < ' a > ,
278+ metadata_loader : & ' a MetadataLoaderDyn ,
283279 plugin_info : PluginInfo ,
284280) -> Result < ( ast:: Crate , Resolver < ' a > ) > {
285281 time ( sess, "pre-AST-expansion lint checks" , || {
@@ -293,10 +289,9 @@ fn configure_and_expand_inner<'a>(
293289
294290 let mut resolver = Resolver :: new (
295291 sess,
296- cstore,
297292 & krate,
298293 crate_name,
299- crate_loader ,
294+ metadata_loader ,
300295 & resolver_arenas,
301296 ) ;
302297 syntax_ext:: register_builtin_macros ( & mut resolver, sess. edition ( ) ) ;
@@ -496,15 +491,14 @@ fn configure_and_expand_inner<'a>(
496491pub fn lower_to_hir (
497492 sess : & Session ,
498493 lint_store : & lint:: LintStore ,
499- cstore : & CStore ,
500494 resolver : & mut Resolver < ' _ > ,
501495 dep_graph : & DepGraph ,
502496 krate : & ast:: Crate ,
503497) -> Result < hir:: map:: Forest > {
504498 // Lower AST to HIR.
505499 let hir_forest = time ( sess, "lowering AST -> HIR" , || {
506500 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) ;
508502
509503 if sess. opts . debugging_opts . hir_stats {
510504 hir_stats:: print_hir_stats ( & hir_crate) ;
@@ -610,8 +604,12 @@ fn escape_dep_filename(filename: &FileName) -> String {
610604 filename. to_string ( ) . replace ( " " , "\\ " )
611605}
612606
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+ ) {
615613 // Write out dependency rules to the dep-info file if requested
616614 if !sess. opts . output_types . contains_key ( & OutputType :: DepInfo ) {
617615 return ;
@@ -630,18 +628,20 @@ fn write_out_deps(compiler: &Compiler, outputs: &OutputFilenames, out_filenames:
630628 . collect ( ) ;
631629
632630 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+ }
640643 }
641- if let Some ( ( path, _) ) = source. rmeta {
642- files. push ( escape_dep_filename ( & FileName :: Real ( path) ) ) ;
643- }
644- }
644+ } ) ;
645645 }
646646
647647 let mut file = fs:: File :: create ( & deps_filename) ?;
@@ -679,6 +679,7 @@ pub fn prepare_outputs(
679679 sess : & Session ,
680680 compiler : & Compiler ,
681681 krate : & ast:: Crate ,
682+ boxed_resolver : & Steal < Rc < RefCell < BoxedResolver > > > ,
682683 crate_name : & str
683684) -> Result < OutputFilenames > {
684685 // FIXME: rustdoc passes &[] instead of &krate.attrs here
@@ -720,7 +721,7 @@ pub fn prepare_outputs(
720721 }
721722 }
722723
723- write_out_deps ( compiler , & outputs, & output_paths) ;
724+ write_out_deps ( sess , boxed_resolver , & outputs, & output_paths) ;
724725
725726 let only_dep_info = sess. opts . output_types . contains_key ( & OutputType :: DepInfo )
726727 && sess. opts . output_types . len ( ) == 1 ;
@@ -790,21 +791,19 @@ pub fn create_global_ctxt(
790791 crate_name : & str ,
791792) -> BoxedGlobalCtxt {
792793 let sess = compiler. session ( ) . clone ( ) ;
793- let cstore = compiler. cstore . clone ( ) ;
794794 let codegen_backend = compiler. codegen_backend ( ) . clone ( ) ;
795795 let crate_name = crate_name. to_string ( ) ;
796796 let defs = mem:: take ( & mut resolver_outputs. definitions ) ;
797797
798798 let ( ( ) , result) = BoxedGlobalCtxt :: new ( static move || {
799799 let sess = & * sess;
800- let cstore = & * cstore;
801800
802801 let global_ctxt: Option < GlobalCtxt < ' _ > > ;
803802 let arenas = AllArenas :: new ( ) ;
804803
805804 // Construct the HIR map.
806805 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)
808807 } ) ;
809808
810809 let query_result_on_disk_cache = time ( sess, "load query result cache" , || {
@@ -822,7 +821,6 @@ pub fn create_global_ctxt(
822821 let gcx = TyCtxt :: create_global_ctxt (
823822 sess,
824823 lint_store,
825- cstore,
826824 local_providers,
827825 extern_providers,
828826 & arenas,
0 commit comments