about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--src/librustc/front/feature_gate.rs25
-rw-r--r--src/librustc/lib.rs2
-rw-r--r--src/libsyntax/lib.rs2
-rw-r--r--src/test/auxiliary/macro_crate_test.rs2
-rw-r--r--src/test/compile-fail/qquote-1.rs1
-rw-r--r--src/test/compile-fail/qquote-2.rs1
-rw-r--r--src/test/run-pass-fulldeps/qquote.rs1
-rw-r--r--src/test/run-pass-fulldeps/quote-tokens.rs2
-rw-r--r--src/test/run-pass-fulldeps/quote-unused-sp-no-warning.rs2
9 files changed, 31 insertions, 7 deletions
diff --git a/src/librustc/front/feature_gate.rs b/src/librustc/front/feature_gate.rs
index ed4455c2f89..ae6c6ec6831 100644
--- a/src/librustc/front/feature_gate.rs
+++ b/src/librustc/front/feature_gate.rs
@@ -49,6 +49,12 @@ static KNOWN_FEATURES: &'static [(&'static str, Status)] = &[
     ("trace_macros", Active),
     ("simd", Active),
     ("default_type_params", Active),
+    ("quote_tokens", Active),
+    ("quote_expr", Active),
+    ("quote_ty", Active),
+    ("quote_item", Active),
+    ("quote_pat", Active),
+    ("quote_stmt", Active),
 
     // These are used to test this portion of the compiler, they don't actually
     // mean anything
@@ -189,24 +195,35 @@ impl Visitor<()> for Context {
 
     fn visit_mac(&mut self, macro: &ast::Mac, _: ()) {
         let ast::MacInvocTT(ref path, _, _) = macro.node;
+        let id = path.segments.last().unwrap().identifier;
+        let quotes = ["quote_tokens", "quote_expr", "quote_ty",
+                      "quote_item", "quote_pat", "quote_stmt"];
+        let msg = " is not stable enough for use and are subject to change";
 
-        if path.segments.last().unwrap().identifier == self.sess.ident_of("macro_rules") {
+
+        if id == self.sess.ident_of("macro_rules") {
             self.gate_feature("macro_rules", path.span, "macro definitions are \
                 not stable enough for use and are subject to change");
         }
 
-        else if path.segments.last().unwrap().identifier == self.sess.ident_of("asm") {
+        else if id == self.sess.ident_of("asm") {
             self.gate_feature("asm", path.span, "inline assembly is not \
                 stable enough for use and is subject to change");
         }
 
-        else if path.segments.last().unwrap().identifier == self.sess.ident_of("log_syntax") {
+        else if id == self.sess.ident_of("log_syntax") {
             self.gate_feature("log_syntax", path.span, "`log_syntax!` is not \
                 stable enough for use and is subject to change");
         }
-        else if path.segments.last().unwrap().identifier == self.sess.ident_of("trace_macros") {
+        else if id == self.sess.ident_of("trace_macros") {
             self.gate_feature("trace_macros", path.span, "`trace_macros` is not \
                 stable enough for use and is subject to change");
+        } else {
+            for &quote in quotes.iter() {
+                if id == self.sess.ident_of(quote) {
+                  self.gate_feature(quote, path.span, quote + msg);
+                }
+            }
         }
     }
 
diff --git a/src/librustc/lib.rs b/src/librustc/lib.rs
index c5f7d61c224..2d65fa0640e 100644
--- a/src/librustc/lib.rs
+++ b/src/librustc/lib.rs
@@ -28,6 +28,8 @@ This API is completely unstable and subject to change.
       html_root_url = "http://static.rust-lang.org/doc/master")];
 
 #[feature(macro_rules, globs, struct_variant, managed_boxes)];
+#[allow(unknown_features)]; // Note: remove it after a snapshot.
+#[feature(quote_item, quote_expr)];
 
 extern mod extra;
 extern mod flate;
diff --git a/src/libsyntax/lib.rs b/src/libsyntax/lib.rs
index e2aa9e3b3ee..8f549d528bc 100644
--- a/src/libsyntax/lib.rs
+++ b/src/libsyntax/lib.rs
@@ -27,6 +27,8 @@ This API is completely unstable and subject to change.
       html_root_url = "http://static.rust-lang.org/doc/master")];
 
 #[feature(macro_rules, globs, managed_boxes)];
+#[allow(unknown_features)];
+#[feature(quote_expr)];
 
 #[deny(non_camel_case_types)];
 
diff --git a/src/test/auxiliary/macro_crate_test.rs b/src/test/auxiliary/macro_crate_test.rs
index e5bf8574366..8fe8d545374 100644
--- a/src/test/auxiliary/macro_crate_test.rs
+++ b/src/test/auxiliary/macro_crate_test.rs
@@ -10,7 +10,7 @@
 
 // force-host
 
-#[feature(globs, macro_registrar, macro_rules)];
+#[feature(globs, macro_registrar, macro_rules, quote_expr)];
 
 extern mod syntax;
 
diff --git a/src/test/compile-fail/qquote-1.rs b/src/test/compile-fail/qquote-1.rs
index f55fcfc204b..7dd80913751 100644
--- a/src/test/compile-fail/qquote-1.rs
+++ b/src/test/compile-fail/qquote-1.rs
@@ -9,6 +9,7 @@
 // except according to those terms.
 
 // xfail-test Can't use syntax crate here
+#[feature(quote_expr)];
 
 extern mod extra;
 extern mod syntax;
diff --git a/src/test/compile-fail/qquote-2.rs b/src/test/compile-fail/qquote-2.rs
index 262abc045a4..4ef5e41a3be 100644
--- a/src/test/compile-fail/qquote-2.rs
+++ b/src/test/compile-fail/qquote-2.rs
@@ -9,6 +9,7 @@
 // except according to those terms.
 
 // xfail-test Can't use syntax crate here
+#[feature(quote_stmt)];
 
 extern mod extra;
 extern mod syntax;
diff --git a/src/test/run-pass-fulldeps/qquote.rs b/src/test/run-pass-fulldeps/qquote.rs
index 05225eb0e7a..d1bf0abd0d0 100644
--- a/src/test/run-pass-fulldeps/qquote.rs
+++ b/src/test/run-pass-fulldeps/qquote.rs
@@ -10,6 +10,7 @@
 
 // xfail-pretty
 // xfail-test
+#[feature(quote_expr, quote_ty, quote_item, quote_stmt, quote_pat)];
 
 extern mod extra;
 extern mod syntax;
diff --git a/src/test/run-pass-fulldeps/quote-tokens.rs b/src/test/run-pass-fulldeps/quote-tokens.rs
index dc95faa1986..47bcb3e7575 100644
--- a/src/test/run-pass-fulldeps/quote-tokens.rs
+++ b/src/test/run-pass-fulldeps/quote-tokens.rs
@@ -9,7 +9,7 @@
 // except according to those terms.
 
 // xfail-test
-
+#[feature(quote_expr, quote_tokens, quote_item, quote_pat, quote_stmt)];
 #[feature(managed_boxes)];
 
 extern mod syntax;
diff --git a/src/test/run-pass-fulldeps/quote-unused-sp-no-warning.rs b/src/test/run-pass-fulldeps/quote-unused-sp-no-warning.rs
index a8b7dc3d382..a7979d19389 100644
--- a/src/test/run-pass-fulldeps/quote-unused-sp-no-warning.rs
+++ b/src/test/run-pass-fulldeps/quote-unused-sp-no-warning.rs
@@ -10,7 +10,7 @@
 
 // xfail-fast
 // xfail-android
-
+#[feature(quote_expr)];
 #[deny(unused_variable)];
 
 extern mod syntax;