about summary refs log tree commit diff
path: root/src/libsyntax/ext
diff options
context:
space:
mode:
authorKeegan McAllister <kmcallister@mozilla.com>2015-01-01 16:37:47 -0800
committerKeegan McAllister <kmcallister@mozilla.com>2015-01-05 18:21:13 -0800
commit0816255c80ee3f2a8870ee5e4379e3739d8ed72e (patch)
tree32b71b7a4d5f22d8b7ec66a64373acd08e258d5e /src/libsyntax/ext
parent60be2f52d2434dfbf2df7728454d572d76f58bf8 (diff)
downloadrust-0816255c80ee3f2a8870ee5e4379e3739d8ed72e.tar.gz
rust-0816255c80ee3f2a8870ee5e4379e3739d8ed72e.zip
Move #[macro_reexport] to extern crate
Diffstat (limited to 'src/libsyntax/ext')
-rw-r--r--src/libsyntax/ext/base.rs10
-rw-r--r--src/libsyntax/ext/expand.rs22
-rw-r--r--src/libsyntax/ext/tt/reexport.rs41
3 files changed, 14 insertions, 59 deletions
diff --git a/src/libsyntax/ext/base.rs b/src/libsyntax/ext/base.rs
index 9a06745967f..815159e94c8 100644
--- a/src/libsyntax/ext/base.rs
+++ b/src/libsyntax/ext/base.rs
@@ -16,6 +16,7 @@ use codemap;
 use codemap::{CodeMap, Span, ExpnId, ExpnInfo, NO_EXPANSION};
 use ext;
 use ext::expand;
+use ext::tt::macro_rules;
 use parse;
 use parse::parser;
 use parse::token;
@@ -568,6 +569,15 @@ impl<'a> ExtCtxt<'a> {
             }
         }
     }
+
+    pub fn insert_macro(&mut self, def: ast::MacroDef) {
+        if def.export {
+            self.exported_macros.push(def.clone());
+        }
+        let ext = macro_rules::compile(self, &def);
+        self.syntax_env.insert(def.ident.name, ext);
+    }
+
     /// Emit `msg` attached to `sp`, and stop compilation immediately.
     ///
     /// `span_err` should be strongly preferred where-ever possible:
diff --git a/src/libsyntax/ext/expand.rs b/src/libsyntax/ext/expand.rs
index d56df2d7fb4..6c2b0610fa0 100644
--- a/src/libsyntax/ext/expand.rs
+++ b/src/libsyntax/ext/expand.rs
@@ -17,7 +17,6 @@ use ast;
 use ast_util::path_to_ident;
 use ext::mtwt;
 use ext::build::AstBuilder;
-use ext::tt::macro_rules;
 use attr;
 use attr::AttrMetaMethods;
 use codemap;
@@ -636,14 +635,10 @@ pub fn expand_item_mac(it: P<ast::Item>,
                         id: ast::DUMMY_NODE_ID,
                         span: it.span,
                         imported_from: None,
+                        export: attr::contains_name(it.attrs.as_slice(), "macro_export"),
                         body: tts,
                     };
-                    let ext = macro_rules::compile(fld.cx, &def);
-                    fld.cx.syntax_env.insert(def.ident.name, ext);
-
-                    if attr::contains_name(def.attrs.as_slice(), "macro_export") {
-                        fld.cx.exported_macros.push(def);
-                    }
+                    fld.cx.insert_macro(def);
 
                     // macro_rules! has a side effect but expands to nothing.
                     fld.cx.bt_pop();
@@ -1178,7 +1173,6 @@ pub struct ExpansionConfig {
     pub deriving_hash_type_parameter: bool,
     pub enable_quotes: bool,
     pub recursion_limit: uint,
-    pub reexported_macros: Vec<String>,
 }
 
 impl ExpansionConfig {
@@ -1188,7 +1182,6 @@ impl ExpansionConfig {
             deriving_hash_type_parameter: false,
             enable_quotes: false,
             recursion_limit: 64,
-            reexported_macros: vec![],
         }
     }
 }
@@ -1202,15 +1195,8 @@ pub fn expand_crate(parse_sess: &parse::ParseSess,
     let mut cx = ExtCtxt::new(parse_sess, c.config.clone(), cfg);
     let mut expander = MacroExpander::new(&mut cx);
 
-    for def in imported_macros.iter() {
-        let ext = macro_rules::compile(expander.cx, def);
-        expander.cx.syntax_env.insert(def.ident.name, ext);
-
-        if expander.cx.ecfg.reexported_macros.iter()
-            .any(|e| e[] == token::get_ident(def.ident).get()) {
-
-            expander.cx.exported_macros.push(def.clone());
-        }
+    for def in imported_macros.into_iter() {
+        expander.cx.insert_macro(def);
     }
 
     for (name, extension) in user_exts.into_iter() {
diff --git a/src/libsyntax/ext/tt/reexport.rs b/src/libsyntax/ext/tt/reexport.rs
deleted file mode 100644
index 104f3787253..00000000000
--- a/src/libsyntax/ext/tt/reexport.rs
+++ /dev/null
@@ -1,41 +0,0 @@
-// Copyright 2014 The Rust Project Developers. See the COPYRIGHT
-// file at the top-level directory of this distribution and at
-// http://rust-lang.org/COPYRIGHT.
-//
-// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
-// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
-// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
-// option. This file may not be copied, modified, or distributed
-// except according to those terms.
-
-//! Defines the crate attribute syntax for macro re-export.
-
-use ast;
-use attr::AttrMetaMethods;
-use diagnostic::SpanHandler;
-
-/// Return a vector of the names of all macros re-exported from the crate.
-pub fn gather(diag: &SpanHandler, krate: &ast::Crate) -> Vec<String> {
-    let usage = "malformed macro_reexport attribute, expected \
-                 #![macro_reexport(ident, ident, ...)]";
-
-    let mut reexported: Vec<String> = vec!();
-    for attr in krate.attrs.iter() {
-        if !attr.check_name("macro_reexport") {
-            continue;
-        }
-
-        match attr.meta_item_list() {
-            None => diag.span_err(attr.span, usage),
-            Some(list) => for mi in list.iter() {
-                match mi.node {
-                    ast::MetaWord(ref word)
-                        => reexported.push(word.to_string()),
-                    _ => diag.span_err(mi.span, usage),
-                }
-            }
-        }
-    }
-
-    reexported
-}