]> git.lizzy.rs Git - rust.git/commitdiff
librustc::metadata : Allow passing a string to read_plugin_metadata
authorManish Goregaokar <manishsmail@gmail.com>
Tue, 9 Dec 2014 16:03:05 +0000 (21:33 +0530)
committerManish Goregaokar <manishsmail@gmail.com>
Thu, 8 Jan 2015 08:09:27 +0000 (13:39 +0530)
src/librustc/metadata/creader.rs
src/librustc/plugin/load.rs

index 310874c311b121f0c848de8afb445773b19c4bc7..7615ff82bd257a95db797be36f3cff2c5c12c6de 100644 (file)
@@ -26,7 +26,7 @@
 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;
@@ -445,8 +445,20 @@ fn resolve_crate_deps(&mut self,
     }
 
     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;
@@ -455,7 +467,7 @@ pub fn read_plugin_metadata<'b>(&'b mut self,
         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,
@@ -485,8 +497,8 @@ pub fn read_plugin_metadata<'b>(&'b mut self,
         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
@@ -498,12 +510,17 @@ pub fn read_plugin_metadata<'b>(&'b mut self,
             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> {
index 87f5ba0246fc3d86c848a7e263ce1488376dc1fb..e1f5c10a1a4e05a11531ca33bb140ca0da7f7cc8 100644 (file)
@@ -11,7 +11,7 @@
 //! 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;
@@ -175,7 +175,7 @@ fn visit_view_item(&mut self, vi: &ast::ViewItem) {
         }
 
         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();
             }