1111//! Validates all used crates and extern libraries and loads their metadata
1212
1313use cstore:: { self , CStore , CrateSource , MetadataBlob } ;
14- use loader :: { self , CratePaths } ;
14+ use locator :: { self , CratePaths } ;
1515use macro_import;
1616use schema:: CrateRoot ;
1717
@@ -40,14 +40,14 @@ use syntax::parse::token::InternedString;
4040use syntax_pos:: { self , Span , mk_sp} ;
4141use log;
4242
43- pub struct CrateLoader < ' a > {
44- pub sess : & ' a Session ,
45- pub creader : CrateReader < ' a > ,
46- cstore : & ' a CStore ,
43+ pub struct Library {
44+ pub dylib : Option < ( PathBuf , PathKind ) > ,
45+ pub rlib : Option < ( PathBuf , PathKind ) > ,
46+ pub metadata : MetadataBlob ,
4747}
4848
49- pub struct CrateReader < ' a > {
50- sess : & ' a Session ,
49+ pub struct CrateLoader < ' a > {
50+ pub sess : & ' a Session ,
5151 cstore : & ' a CStore ,
5252 next_crate_num : CrateNum ,
5353 foreign_item_map : FnvHashMap < String , Vec < ast:: NodeId > > ,
@@ -129,7 +129,7 @@ struct ExtensionCrate {
129129
130130enum PMDSource {
131131 Registered ( Rc < cstore:: CrateMetadata > ) ,
132- Owned ( loader :: Library ) ,
132+ Owned ( Library ) ,
133133}
134134
135135impl Deref for PMDSource {
@@ -145,7 +145,7 @@ impl Deref for PMDSource {
145145
146146enum LoadResult {
147147 Previous ( CrateNum ) ,
148- Loaded ( loader :: Library ) ,
148+ Loaded ( Library ) ,
149149}
150150
151151pub struct Macros {
@@ -159,13 +159,13 @@ pub struct Macros {
159159 pub dylib : Option < PathBuf > ,
160160}
161161
162- impl < ' a > CrateReader < ' a > {
162+ impl < ' a > CrateLoader < ' a > {
163163 pub fn new ( sess : & ' a Session ,
164164 cstore : & ' a CStore ,
165165 local_crate_name : & str ,
166166 local_crate_config : ast:: CrateConfig )
167- -> CrateReader < ' a > {
168- CrateReader {
167+ -> Self {
168+ CrateLoader {
169169 sess : sess,
170170 cstore : cstore,
171171 next_crate_num : cstore. next_crate_num ( ) ,
@@ -281,7 +281,7 @@ impl<'a> CrateReader<'a> {
281281 ident : & str ,
282282 name : & str ,
283283 span : Span ,
284- lib : loader :: Library ,
284+ lib : Library ,
285285 explicitly_linked : bool )
286286 -> ( CrateNum , Rc < cstore:: CrateMetadata > ,
287287 cstore:: CrateSource ) {
@@ -306,7 +306,7 @@ impl<'a> CrateReader<'a> {
306306 // Maintain a reference to the top most crate.
307307 let root = if root. is_some ( ) { root } else { & crate_paths } ;
308308
309- let loader :: Library { dylib, rlib, metadata } = lib;
309+ let Library { dylib, rlib, metadata } = lib;
310310
311311 let cnum_map = self . resolve_crate_deps ( root, & crate_root, & metadata, cnum, span) ;
312312
@@ -352,7 +352,7 @@ impl<'a> CrateReader<'a> {
352352 Some ( cnum) => LoadResult :: Previous ( cnum) ,
353353 None => {
354354 info ! ( "falling back to a load" ) ;
355- let mut load_ctxt = loader :: Context {
355+ let mut locate_ctxt = locator :: Context {
356356 sess : self . sess ,
357357 span : span,
358358 ident : ident,
@@ -368,9 +368,9 @@ impl<'a> CrateReader<'a> {
368368 rejected_via_version : vec ! ( ) ,
369369 should_match_name : true ,
370370 } ;
371- match self . load ( & mut load_ctxt ) {
371+ match self . load ( & mut locate_ctxt ) {
372372 Some ( result) => result,
373- None => load_ctxt . report_load_errs ( ) ,
373+ None => locate_ctxt . report_errs ( ) ,
374374 }
375375 }
376376 } ;
@@ -390,8 +390,8 @@ impl<'a> CrateReader<'a> {
390390 }
391391 }
392392
393- fn load ( & mut self , loader : & mut loader :: Context ) -> Option < LoadResult > {
394- let library = match loader . maybe_load_library_crate ( ) {
393+ fn load ( & mut self , locate_ctxt : & mut locator :: Context ) -> Option < LoadResult > {
394+ let library = match locate_ctxt . maybe_load_library_crate ( ) {
395395 Some ( lib) => lib,
396396 None => return None ,
397397 } ;
@@ -405,11 +405,11 @@ impl<'a> CrateReader<'a> {
405405 // don't want to match a host crate against an equivalent target one
406406 // already loaded.
407407 let root = library. metadata . get_root ( ) ;
408- if loader . triple == self . sess . opts . target_triple {
408+ if locate_ctxt . triple == self . sess . opts . target_triple {
409409 let mut result = LoadResult :: Loaded ( library) ;
410410 self . cstore . iter_crate_data ( |cnum, data| {
411411 if data. name ( ) == root. name && root. hash == data. hash ( ) {
412- assert ! ( loader . hash. is_none( ) ) ;
412+ assert ! ( locate_ctxt . hash. is_none( ) ) ;
413413 info ! ( "load success, going to previous cnum: {}" , cnum) ;
414414 result = LoadResult :: Previous ( cnum) ;
415415 }
@@ -494,7 +494,7 @@ impl<'a> CrateReader<'a> {
494494 let mut target_only = false ;
495495 let ident = info. ident . clone ( ) ;
496496 let name = info. name . clone ( ) ;
497- let mut load_ctxt = loader :: Context {
497+ let mut locate_ctxt = locator :: Context {
498498 sess : self . sess ,
499499 span : span,
500500 ident : & ident[ ..] ,
@@ -510,7 +510,7 @@ impl<'a> CrateReader<'a> {
510510 rejected_via_version : vec ! ( ) ,
511511 should_match_name : true ,
512512 } ;
513- let library = self . load ( & mut load_ctxt ) . or_else ( || {
513+ let library = self . load ( & mut locate_ctxt ) . or_else ( || {
514514 if !is_cross {
515515 return None
516516 }
@@ -519,15 +519,15 @@ impl<'a> CrateReader<'a> {
519519 target_only = true ;
520520 should_link = info. should_link ;
521521
522- load_ctxt . target = & self . sess . target . target ;
523- load_ctxt . triple = target_triple;
524- load_ctxt . filesearch = self . sess . target_filesearch ( PathKind :: Crate ) ;
522+ locate_ctxt . target = & self . sess . target . target ;
523+ locate_ctxt . triple = target_triple;
524+ locate_ctxt . filesearch = self . sess . target_filesearch ( PathKind :: Crate ) ;
525525
526- self . load ( & mut load_ctxt )
526+ self . load ( & mut locate_ctxt )
527527 } ) ;
528528 let library = match library {
529529 Some ( l) => l,
530- None => load_ctxt . report_load_errs ( ) ,
530+ None => locate_ctxt . report_errs ( ) ,
531531 } ;
532532
533533 let ( dylib, metadata) = match library {
@@ -890,7 +890,7 @@ impl<'a> CrateReader<'a> {
890890}
891891
892892impl ExtensionCrate {
893- fn register ( self , creader : & mut CrateReader ) {
893+ fn register ( self , loader : & mut CrateLoader ) {
894894 if !self . should_link {
895895 return
896896 }
@@ -901,31 +901,17 @@ impl ExtensionCrate {
901901 } ;
902902
903903 // Register crate now to avoid double-reading metadata
904- creader. register_crate ( & None ,
905- & self . ident ,
906- & self . name ,
907- self . span ,
908- library,
909- true ) ;
904+ loader. register_crate ( & None , & self . ident , & self . name , self . span , library, true ) ;
910905 }
911906}
912907
913908impl < ' a > CrateLoader < ' a > {
914- pub fn new ( sess : & ' a Session , cstore : & ' a CStore , krate : & ast:: Crate , crate_name : & str )
915- -> Self {
916- let loader = CrateLoader {
917- sess : sess,
918- cstore : cstore,
919- creader : CrateReader :: new ( sess, cstore, crate_name, krate. config . clone ( ) ) ,
920- } ;
921-
909+ pub fn preprocess ( & mut self , krate : & ast:: Crate ) {
922910 for attr in krate. attrs . iter ( ) . filter ( |m| m. name ( ) == "link_args" ) {
923911 if let Some ( ref linkarg) = attr. value_str ( ) {
924- loader . cstore . add_used_link_args ( & linkarg) ;
912+ self . cstore . add_used_link_args ( & linkarg) ;
925913 }
926914 }
927-
928- loader
929915 }
930916
931917 fn process_foreign_mod ( & mut self , i : & ast:: Item , fm : & ast:: ForeignMod ) {
@@ -982,7 +968,7 @@ impl<'a> CrateLoader<'a> {
982968 Some ( name) => name,
983969 None => continue ,
984970 } ;
985- let list = self . creader . foreign_item_map . entry ( lib_name. to_string ( ) )
971+ let list = self . foreign_item_map . entry ( lib_name. to_string ( ) )
986972 . or_insert ( Vec :: new ( ) ) ;
987973 list. extend ( fm. items . iter ( ) . map ( |it| it. id ) ) ;
988974 }
@@ -991,8 +977,8 @@ impl<'a> CrateLoader<'a> {
991977
992978impl < ' a > middle:: cstore:: CrateLoader for CrateLoader < ' a > {
993979 fn postprocess ( & mut self , krate : & ast:: Crate ) {
994- self . creader . inject_allocator_crate ( ) ;
995- self . creader . inject_panic_runtime ( krate) ;
980+ self . inject_allocator_crate ( ) ;
981+ self . inject_panic_runtime ( krate) ;
996982
997983 if log_enabled ! ( log:: INFO ) {
998984 dump_crates ( & self . cstore ) ;
@@ -1001,7 +987,7 @@ impl<'a> middle::cstore::CrateLoader for CrateLoader<'a> {
1001987 for & ( ref name, kind) in & self . sess . opts . libs {
1002988 register_native_lib ( self . sess , self . cstore , None , name. clone ( ) , kind) ;
1003989 }
1004- self . creader . register_statically_included_foreign_items ( ) ;
990+ self . register_statically_included_foreign_items ( ) ;
1005991 }
1006992
1007993 fn process_item ( & mut self , item : & ast:: Item , definitions : & hir_map:: Definitions ) {
@@ -1024,12 +1010,12 @@ impl<'a> middle::cstore::CrateLoader for CrateLoader<'a> {
10241010 }
10251011 }
10261012
1027- if let Some ( info) = self . creader . extract_crate_info ( item) {
1013+ if let Some ( info) = self . extract_crate_info ( item) {
10281014 if !info. should_link {
10291015 return ;
10301016 }
10311017
1032- let ( cnum, ..) = self . creader . resolve_crate (
1018+ let ( cnum, ..) = self . resolve_crate (
10331019 & None , & info. ident , & info. name , None , item. span , PathKind :: Crate , true ,
10341020 ) ;
10351021
@@ -1038,7 +1024,7 @@ impl<'a> middle::cstore::CrateLoader for CrateLoader<'a> {
10381024
10391025 let extern_crate =
10401026 ExternCrate { def_id : def_id, span : item. span , direct : true , path_len : len } ;
1041- self . creader . update_extern_crate ( cnum, extern_crate, & mut FnvHashSet ( ) ) ;
1027+ self . update_extern_crate ( cnum, extern_crate, & mut FnvHashSet ( ) ) ;
10421028
10431029 self . cstore . add_extern_mod_stmt_cnum ( info. id , cnum) ;
10441030 }
0 commit comments