use syntax::abi;
use syntax::attr;
use syntax::attr::AttrMetaMethods;
-use syntax::codemap::{Span, mk_sp};
+use syntax::codemap::{DUMMY_SP, Span, mk_sp};
use syntax::parse;
use syntax::parse::token::InternedString;
use syntax::parse::token;
}
pub fn read_plugin_metadata<'b>(&'b mut self,
- vi: &'b ast::ViewItem) -> PluginMetadata<'b> {
- let info = self.extract_crate_info(vi).unwrap();
+ krate: CrateOrString<'b>) -> PluginMetadata<'b> {
+ let (info, span) = match krate {
+ CrateOrString::Krate(c) => {
+ (self.extract_crate_info(c).unwrap(), c.span)
+ }
+ CrateOrString::Str(s) => {
+ (CrateInfo {
+ name: s.to_string(),
+ ident: s.to_string(),
+ id: ast::DUMMY_NODE_ID,
+ should_link: true,
+ }, DUMMY_SP)
+ }
+ };
let target_triple = &self.sess.opts.target_triple[];
let is_cross = target_triple != config::host_triple();
let mut should_link = info.should_link && !is_cross;
let name = info.name.clone();
let mut load_ctxt = loader::Context {
sess: self.sess,
- span: vi.span,
+ span: span,
ident: &ident[],
crate_name: &name[],
hash: None,
let register = should_link && self.existing_match(info.name.as_slice(), None).is_none();
let metadata = if register {
// Register crate now to avoid double-reading metadata
- let (_, cmd, _) = self.register_crate(&None, &info.ident[],
- &info.name[], vi.span, library);
+ let (_, cmd, _) = self.register_crate(&None, info.ident[],
+ info.name[], span, library);
PMDSource::Registered(cmd)
} else {
// Not registering the crate; just hold on to the metadata
metadata: metadata,
dylib: dylib,
info: info,
- vi_span: vi.span,
+ vi_span: span,
target_only: target_only,
}
}
}
+pub enum CrateOrString<'a> {
+ Krate(&'a ast::ViewItem),
+ Str(&'a str)
+}
+
impl<'a> PluginMetadata<'a> {
/// Read exported macros
pub fn exported_macros(&self) -> Vec<ast::MacroDef> {
//! Used by `rustc` when loading a plugin, or a crate with exported macros.
use session::Session;
-use metadata::creader::CrateReader;
+use metadata::creader::{CrateOrString, CrateReader};
use plugin::registry::Registry;
use std::mem;
}
if load_macros || load_registrar {
- let pmd = self.reader.read_plugin_metadata(vi);
+ let pmd = self.reader.read_plugin_metadata(CrateOrString::Krate(vi));
if load_macros {
macros = pmd.exported_macros();
}