diff --git a/src/librustc/front/feature_gate.rs b/src/librustc/front/feature_gate.rs index ed4455c2f89a1..15056d9d2d842 100644 --- a/src/librustc/front/feature_gate.rs +++ b/src/librustc/front/feature_gate.rs @@ -49,6 +49,7 @@ static KNOWN_FEATURES: &'static [(&'static str, Status)] = &[ ("trace_macros", Active), ("simd", Active), ("default_type_params", Active), + ("quote", Active), // These are used to test this portion of the compiler, they don't actually // mean anything @@ -189,24 +190,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 "e 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 c5f7d61c224a5..f80b30126f853 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)]; extern mod extra; extern mod flate; diff --git a/src/libsyntax/lib.rs b/src/libsyntax/lib.rs index e2aa9e3b3ee67..a61c354e7cd38 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)];// Note: remove it after a snapshot. +#[feature(quote)]; #[deny(non_camel_case_types)]; diff --git a/src/test/auxiliary/macro_crate_test.rs b/src/test/auxiliary/macro_crate_test.rs index e5bf8574366c8..2867e0f814306 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)]; extern mod syntax; diff --git a/src/test/compile-fail/qquote-1.rs b/src/test/compile-fail/qquote-1.rs index f55fcfc204b2f..6dcbf3df9d653 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)]; 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 262abc045a411..0e5c852fd6ecb 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)]; 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 05225eb0e7ada..dc67ff21585dc 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)]; 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 dc95faa198647..7429ac45904cc 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)]; #[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 a8b7dc3d382f3..0411c0b1cea3f 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)]; #[deny(unused_variable)]; extern mod syntax;