Feature gate all quasi-quoting macros.

This commit is contained in:
James Deng 2014-02-04 16:35:57 +11:00
parent c1395ea588
commit 38f2526beb
9 changed files with 31 additions and 7 deletions

View file

@ -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);
}
}
}
}

View file

@ -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;

View file

@ -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)];

View file

@ -10,7 +10,7 @@
// force-host
#[feature(globs, macro_registrar, macro_rules)];
#[feature(globs, macro_registrar, macro_rules, quote_expr)];
extern mod syntax;

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -10,7 +10,7 @@
// xfail-fast
// xfail-android
#[feature(quote_expr)];
#[deny(unused_variable)];
extern mod syntax;