about summary refs log tree commit diff
path: root/src/libsyntax
diff options
context:
space:
mode:
authorKeegan McAllister <kmcallister@mozilla.com>2015-01-02 12:50:45 -0800
committerKeegan McAllister <kmcallister@mozilla.com>2015-01-05 18:21:13 -0800
commitaa69cbde8279cd90457454c3b3f40a36e8a79dff (patch)
tree6fadc77e821fb42ff743b355a5432180848e1a30 /src/libsyntax
parent0816255c80ee3f2a8870ee5e4379e3739d8ed72e (diff)
downloadrust-aa69cbde8279cd90457454c3b3f40a36e8a79dff.tar.gz
rust-aa69cbde8279cd90457454c3b3f40a36e8a79dff.zip
Allow selective macro import
Diffstat (limited to 'src/libsyntax')
-rw-r--r--src/libsyntax/ast.rs1
-rw-r--r--src/libsyntax/ext/base.rs6
-rw-r--r--src/libsyntax/ext/expand.rs1
3 files changed, 6 insertions, 2 deletions
diff --git a/src/libsyntax/ast.rs b/src/libsyntax/ast.rs
index e34060a73c1..0f90e31c17e 100644
--- a/src/libsyntax/ast.rs
+++ b/src/libsyntax/ast.rs
@@ -1709,6 +1709,7 @@ pub struct MacroDef {
     pub span: Span,
     pub imported_from: Option<Ident>,
     pub export: bool,
+    pub use_locally: bool,
     pub body: Vec<TokenTree>,
 }
 
diff --git a/src/libsyntax/ext/base.rs b/src/libsyntax/ext/base.rs
index 815159e94c8..91ae7396ea4 100644
--- a/src/libsyntax/ext/base.rs
+++ b/src/libsyntax/ext/base.rs
@@ -574,8 +574,10 @@ impl<'a> ExtCtxt<'a> {
         if def.export {
             self.exported_macros.push(def.clone());
         }
-        let ext = macro_rules::compile(self, &def);
-        self.syntax_env.insert(def.ident.name, ext);
+        if def.use_locally {
+            let ext = macro_rules::compile(self, &def);
+            self.syntax_env.insert(def.ident.name, ext);
+        }
     }
 
     /// Emit `msg` attached to `sp`, and stop compilation immediately.
diff --git a/src/libsyntax/ext/expand.rs b/src/libsyntax/ext/expand.rs
index 6c2b0610fa0..d3f2e0ea095 100644
--- a/src/libsyntax/ext/expand.rs
+++ b/src/libsyntax/ext/expand.rs
@@ -636,6 +636,7 @@ pub fn expand_item_mac(it: P<ast::Item>,
                         span: it.span,
                         imported_from: None,
                         export: attr::contains_name(it.attrs.as_slice(), "macro_export"),
+                        use_locally: true,
                         body: tts,
                     };
                     fld.cx.insert_macro(def);