@@ -26,7 +26,7 @@ use syntax::ast;
2626use syntax:: abi;
2727use syntax:: attr;
2828use syntax:: attr:: AttrMetaMethods ;
29- use syntax:: codemap:: { Span , mk_sp} ;
29+ use syntax:: codemap:: { DUMMY_SP , Span , mk_sp} ;
3030use syntax:: parse;
3131use syntax:: parse:: token:: InternedString ;
3232use syntax:: parse:: token;
@@ -445,8 +445,20 @@ impl<'a> CrateReader<'a> {
445445 }
446446
447447 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+ } ;
450462 let target_triple = & self . sess . opts . target_triple [ ] ;
451463 let is_cross = target_triple != config:: host_triple ( ) ;
452464 let mut should_link = info. should_link && !is_cross;
@@ -455,7 +467,7 @@ impl<'a> CrateReader<'a> {
455467 let name = info. name . clone ( ) ;
456468 let mut load_ctxt = loader:: Context {
457469 sess : self . sess ,
458- span : vi . span ,
470+ span : span,
459471 ident : & ident[ ] ,
460472 crate_name : & name[ ] ,
461473 hash : None ,
@@ -485,8 +497,8 @@ impl<'a> CrateReader<'a> {
485497 let register = should_link && self . existing_match ( info. name . as_slice ( ) , None ) . is_none ( ) ;
486498 let metadata = if register {
487499 // 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) ;
490502 PMDSource :: Registered ( cmd)
491503 } else {
492504 // Not registering the crate; just hold on to the metadata
@@ -498,12 +510,17 @@ impl<'a> CrateReader<'a> {
498510 metadata : metadata,
499511 dylib : dylib,
500512 info : info,
501- vi_span : vi . span ,
513+ vi_span : span,
502514 target_only : target_only,
503515 }
504516 }
505517}
506518
519+ pub enum CrateOrString < ' a > {
520+ Krate ( & ' a ast:: ViewItem ) ,
521+ Str ( & ' a str )
522+ }
523+
507524impl < ' a > PluginMetadata < ' a > {
508525 /// Read exported macros
509526 pub fn exported_macros ( & self ) -> Vec < ast:: MacroDef > {
0 commit comments