@@ -248,32 +248,36 @@ use log::{debug, info, warn};
248
248
use rustc_error_codes:: * ;
249
249
250
250
#[ derive( Clone ) ]
251
- crate struct CrateMismatch {
251
+ struct CrateMismatch {
252
252
path : PathBuf ,
253
253
got : String ,
254
254
}
255
255
256
256
#[ derive( Clone ) ]
257
257
crate struct CrateLocator < ' a > {
258
- pub sess : & ' a Session ,
259
- pub span : Span ,
260
- pub crate_name : Symbol ,
258
+ // Immutable per-session configuration.
259
+ sess : & ' a Session ,
260
+ metadata_loader : & ' a dyn MetadataLoader ,
261
+
262
+ // Immutable per-search configuration.
263
+ crate_name : Symbol ,
261
264
pub hash : Option < & ' a Svh > ,
262
265
pub host_hash : Option < & ' a Svh > ,
263
- pub extra_filename : Option < & ' a str > ,
264
- // points to either self.sess.target.target or self.sess.host, must match triple
266
+ extra_filename : Option < & ' a str > ,
265
267
pub target : & ' a Target ,
266
268
pub triple : TargetTriple ,
267
269
pub filesearch : FileSearch < ' a > ,
268
- pub root : Option < & ' a CratePaths > ,
269
- pub rejected_via_hash : Vec < CrateMismatch > ,
270
- pub rejected_via_triple : Vec < CrateMismatch > ,
271
- pub rejected_via_kind : Vec < CrateMismatch > ,
272
- pub rejected_via_version : Vec < CrateMismatch > ,
273
- pub rejected_via_filename : Vec < CrateMismatch > ,
274
- pub should_match_name : bool ,
270
+ span : Span ,
271
+ root : Option < & ' a CratePaths > ,
275
272
pub is_proc_macro : Option < bool > ,
276
- pub metadata_loader : & ' a dyn MetadataLoader ,
273
+
274
+ // Mutable in-progress state or output.
275
+ rejected_via_hash : Vec < CrateMismatch > ,
276
+ rejected_via_triple : Vec < CrateMismatch > ,
277
+ rejected_via_kind : Vec < CrateMismatch > ,
278
+ rejected_via_version : Vec < CrateMismatch > ,
279
+ rejected_via_filename : Vec < CrateMismatch > ,
280
+ should_match_name : bool ,
277
281
}
278
282
279
283
crate struct CratePaths {
@@ -299,6 +303,49 @@ impl fmt::Display for CrateFlavor {
299
303
}
300
304
301
305
impl < ' a > CrateLocator < ' a > {
306
+ crate fn new (
307
+ sess : & ' a Session ,
308
+ metadata_loader : & ' a dyn MetadataLoader ,
309
+ crate_name : Symbol ,
310
+ hash : Option < & ' a Svh > ,
311
+ host_hash : Option < & ' a Svh > ,
312
+ extra_filename : Option < & ' a str > ,
313
+ is_host : bool ,
314
+ path_kind : PathKind ,
315
+ span : Span ,
316
+ root : Option < & ' a CratePaths > ,
317
+ is_proc_macro : Option < bool > ,
318
+ ) -> CrateLocator < ' a > {
319
+ CrateLocator {
320
+ sess,
321
+ metadata_loader,
322
+ crate_name,
323
+ hash,
324
+ host_hash,
325
+ extra_filename,
326
+ target : if is_host { & sess. host } else { & sess. target . target } ,
327
+ triple : if is_host {
328
+ TargetTriple :: from_triple ( config:: host_triple ( ) )
329
+ } else {
330
+ sess. opts . target_triple . clone ( )
331
+ } ,
332
+ filesearch : if is_host {
333
+ sess. host_filesearch ( path_kind)
334
+ } else {
335
+ sess. target_filesearch ( path_kind)
336
+ } ,
337
+ span,
338
+ root,
339
+ is_proc_macro,
340
+ rejected_via_hash : Vec :: new ( ) ,
341
+ rejected_via_triple : Vec :: new ( ) ,
342
+ rejected_via_kind : Vec :: new ( ) ,
343
+ rejected_via_version : Vec :: new ( ) ,
344
+ rejected_via_filename : Vec :: new ( ) ,
345
+ should_match_name : true ,
346
+ }
347
+ }
348
+
302
349
crate fn reset ( & mut self ) {
303
350
self . rejected_via_hash . clear ( ) ;
304
351
self . rejected_via_triple . clear ( ) ;
@@ -926,26 +973,19 @@ pub fn find_plugin_registrar(
926
973
let host_triple = TargetTriple :: from_triple ( config:: host_triple ( ) ) ;
927
974
let is_cross = target_triple != host_triple;
928
975
let mut target_only = false ;
929
- let mut locator = CrateLocator {
976
+ let mut locator = CrateLocator :: new (
930
977
sess,
931
- span,
932
- crate_name : name,
933
- hash : None ,
934
- host_hash : None ,
935
- extra_filename : None ,
936
- filesearch : sess. host_filesearch ( PathKind :: Crate ) ,
937
- target : & sess. host ,
938
- triple : host_triple,
939
- root : None ,
940
- rejected_via_hash : vec ! [ ] ,
941
- rejected_via_triple : vec ! [ ] ,
942
- rejected_via_kind : vec ! [ ] ,
943
- rejected_via_version : vec ! [ ] ,
944
- rejected_via_filename : vec ! [ ] ,
945
- should_match_name : true ,
946
- is_proc_macro : None ,
947
978
metadata_loader,
948
- } ;
979
+ name,
980
+ None , // hash
981
+ None , // host_hash
982
+ None , // extra_filename
983
+ true , // is_host
984
+ PathKind :: Crate ,
985
+ span,
986
+ None , // root
987
+ None , // is_proc_macro
988
+ ) ;
949
989
950
990
let library = locator. maybe_load_library_crate ( ) . or_else ( || {
951
991
if !is_cross {
0 commit comments