@@ -7,25 +7,24 @@ use crate::rmeta::{CrateDep, CrateMetadata, CrateNumMap, CrateRoot, MetadataBlob
77use rustc_ast:: expand:: allocator:: { alloc_error_handler_name, global_fn_name, AllocatorKind } ;
88use rustc_ast:: { self as ast, * } ;
99use rustc_data_structures:: fx:: FxHashSet ;
10+ use rustc_data_structures:: owned_slice:: OwnedSlice ;
1011use rustc_data_structures:: svh:: Svh ;
11- use rustc_data_structures:: sync:: { FreezeReadGuard , FreezeWriteGuard } ;
12+ use rustc_data_structures:: sync:: { self , FreezeReadGuard , FreezeWriteGuard } ;
1213use rustc_expand:: base:: SyntaxExtension ;
1314use rustc_fs_util:: try_canonicalize;
1415use rustc_hir:: def_id:: { CrateNum , LocalDefId , StableCrateId , StableCrateIdMap , LOCAL_CRATE } ;
1516use rustc_hir:: definitions:: Definitions ;
1617use rustc_index:: IndexVec ;
1718use rustc_middle:: ty:: TyCtxt ;
1819use rustc_session:: config:: { self , CrateType , ExternLocation } ;
19- use rustc_session:: cstore:: {
20- CrateDepKind , CrateSource , ExternCrate , ExternCrateSource , MetadataLoaderDyn ,
21- } ;
20+ use rustc_session:: cstore:: { CrateDepKind , CrateSource , ExternCrate , ExternCrateSource } ;
2221use rustc_session:: lint;
2322use rustc_session:: output:: validate_crate_name;
2423use rustc_session:: search_paths:: PathKind ;
2524use rustc_span:: edition:: Edition ;
2625use rustc_span:: symbol:: { sym, Symbol } ;
2726use rustc_span:: { Span , DUMMY_SP } ;
28- use rustc_target:: spec:: { PanicStrategy , TargetTriple } ;
27+ use rustc_target:: spec:: { PanicStrategy , Target , TargetTriple } ;
2928
3029use proc_macro:: bridge:: client:: ProcMacro ;
3130use std:: error:: Error ;
@@ -34,6 +33,17 @@ use std::path::Path;
3433use std:: time:: Duration ;
3534use std:: { cmp, iter} ;
3635
36+ /// The backend's way to give the crate store access to the metadata in a library.
37+ /// Note that it returns the raw metadata bytes stored in the library file, whether
38+ /// it is compressed, uncompressed, some weird mix, etc.
39+ /// rmeta files are backend independent and not handled here.
40+ pub trait MetadataLoader {
41+ fn get_rlib_metadata ( & self , target : & Target , filename : & Path ) -> Result < OwnedSlice , String > ;
42+ fn get_dylib_metadata ( & self , target : & Target , filename : & Path ) -> Result < OwnedSlice , String > ;
43+ }
44+
45+ pub type MetadataLoaderDyn = dyn MetadataLoader + Send + Sync + sync:: DynSend + sync:: DynSync ;
46+
3747pub struct CStore {
3848 metadata_loader : Box < MetadataLoaderDyn > ,
3949
0 commit comments