Skip to content

Commit efaf613

Browse files
committed
librustc::metadata : Allow passing a string to read_plugin_metadata
1 parent 7e87ea9 commit efaf613

File tree

2 files changed

+26
-9
lines changed

2 files changed

+26
-9
lines changed

src/librustc/metadata/creader.rs

Lines changed: 24 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ use syntax::ast;
2626
use syntax::abi;
2727
use syntax::attr;
2828
use syntax::attr::AttrMetaMethods;
29-
use syntax::codemap::{Span, mk_sp};
29+
use syntax::codemap::{DUMMY_SP, Span, mk_sp};
3030
use syntax::parse;
3131
use syntax::parse::token::InternedString;
3232
use 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+
507524
impl<'a> PluginMetadata<'a> {
508525
/// Read exported macros
509526
pub fn exported_macros(&self) -> Vec<ast::MacroDef> {

src/librustc/plugin/load.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
//! Used by `rustc` when loading a plugin, or a crate with exported macros.
1212
1313
use session::Session;
14-
use metadata::creader::CrateReader;
14+
use metadata::creader::{CrateOrString, CrateReader};
1515
use plugin::registry::Registry;
1616

1717
use std::mem;
@@ -175,7 +175,7 @@ impl<'a, 'v> Visitor<'v> for PluginLoader<'a> {
175175
}
176176

177177
if load_macros || load_registrar {
178-
let pmd = self.reader.read_plugin_metadata(vi);
178+
let pmd = self.reader.read_plugin_metadata(CrateOrString::Krate(vi));
179179
if load_macros {
180180
macros = pmd.exported_macros();
181181
}

0 commit comments

Comments
 (0)