@@ -26,7 +26,7 @@ use syntax::ast;
26
26
use syntax:: abi;
27
27
use syntax:: attr;
28
28
use syntax:: attr:: AttrMetaMethods ;
29
- use syntax:: codemap:: { Span , mk_sp} ;
29
+ use syntax:: codemap:: { DUMMY_SP , Span , mk_sp} ;
30
30
use syntax:: parse;
31
31
use syntax:: parse:: token:: InternedString ;
32
32
use syntax:: parse:: token;
@@ -445,8 +445,20 @@ impl<'a> CrateReader<'a> {
445
445
}
446
446
447
447
pub fn read_plugin_metadata < ' b > ( & ' b mut self ,
448
- vi : & ' b ast:: ViewItem ) -> PluginMetadata < ' b > {
449
- let info = self . extract_crate_info ( vi) . unwrap ( ) ;
448
+ krate : CrateOrString < ' b > ) -> PluginMetadata < ' b > {
449
+ let ( info, span) = match krate {
450
+ CrateOrString :: Krate ( c) => {
451
+ ( self . extract_crate_info ( c) . unwrap ( ) , c. span )
452
+ }
453
+ CrateOrString :: Str ( s) => {
454
+ ( CrateInfo {
455
+ name : s. to_string ( ) ,
456
+ ident : s. to_string ( ) ,
457
+ id : ast:: DUMMY_NODE_ID ,
458
+ should_link : true ,
459
+ } , DUMMY_SP )
460
+ }
461
+ } ;
450
462
let target_triple = & self . sess . opts . target_triple [ ] ;
451
463
let is_cross = target_triple != config:: host_triple ( ) ;
452
464
let mut should_link = info. should_link && !is_cross;
@@ -455,7 +467,7 @@ impl<'a> CrateReader<'a> {
455
467
let name = info. name . clone ( ) ;
456
468
let mut load_ctxt = loader:: Context {
457
469
sess : self . sess ,
458
- span : vi . span ,
470
+ span : span,
459
471
ident : & ident[ ] ,
460
472
crate_name : & name[ ] ,
461
473
hash : None ,
@@ -485,8 +497,8 @@ impl<'a> CrateReader<'a> {
485
497
let register = should_link && self . existing_match ( info. name . as_slice ( ) , None ) . is_none ( ) ;
486
498
let metadata = if register {
487
499
// Register crate now to avoid double-reading metadata
488
- let ( _, cmd, _) = self . register_crate ( & None , & info. ident [ ] ,
489
- & info. name [ ] , vi . span , library) ;
500
+ let ( _, cmd, _) = self . register_crate ( & None , info. ident [ ] ,
501
+ info. name [ ] , span, library) ;
490
502
PMDSource :: Registered ( cmd)
491
503
} else {
492
504
// Not registering the crate; just hold on to the metadata
@@ -498,12 +510,17 @@ impl<'a> CrateReader<'a> {
498
510
metadata : metadata,
499
511
dylib : dylib,
500
512
info : info,
501
- vi_span : vi . span ,
513
+ vi_span : span,
502
514
target_only : target_only,
503
515
}
504
516
}
505
517
}
506
518
519
+ pub enum CrateOrString < ' a > {
520
+ Krate ( & ' a ast:: ViewItem ) ,
521
+ Str ( & ' a str )
522
+ }
523
+
507
524
impl < ' a > PluginMetadata < ' a > {
508
525
/// Read exported macros
509
526
pub fn exported_macros ( & self ) -> Vec < ast:: MacroDef > {
0 commit comments