Skip to content

Commit 38f2526

Browse files
committed
Feature gate all quasi-quoting macros.
1 parent c1395ea commit 38f2526

File tree

9 files changed

+31
-7
lines changed

9 files changed

+31
-7
lines changed

src/librustc/front/feature_gate.rs

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,12 @@ static KNOWN_FEATURES: &'static [(&'static str, Status)] = &[
4949
("trace_macros", Active),
5050
("simd", Active),
5151
("default_type_params", Active),
52+
("quote_tokens", Active),
53+
("quote_expr", Active),
54+
("quote_ty", Active),
55+
("quote_item", Active),
56+
("quote_pat", Active),
57+
("quote_stmt", Active),
5258

5359
// These are used to test this portion of the compiler, they don't actually
5460
// mean anything
@@ -189,24 +195,35 @@ impl Visitor<()> for Context {
189195

190196
fn visit_mac(&mut self, macro: &ast::Mac, _: ()) {
191197
let ast::MacInvocTT(ref path, _, _) = macro.node;
198+
let id = path.segments.last().unwrap().identifier;
199+
let quotes = ["quote_tokens", "quote_expr", "quote_ty",
200+
"quote_item", "quote_pat", "quote_stmt"];
201+
let msg = " is not stable enough for use and are subject to change";
192202

193-
if path.segments.last().unwrap().identifier == self.sess.ident_of("macro_rules") {
203+
204+
if id == self.sess.ident_of("macro_rules") {
194205
self.gate_feature("macro_rules", path.span, "macro definitions are \
195206
not stable enough for use and are subject to change");
196207
}
197208

198-
else if path.segments.last().unwrap().identifier == self.sess.ident_of("asm") {
209+
else if id == self.sess.ident_of("asm") {
199210
self.gate_feature("asm", path.span, "inline assembly is not \
200211
stable enough for use and is subject to change");
201212
}
202213

203-
else if path.segments.last().unwrap().identifier == self.sess.ident_of("log_syntax") {
214+
else if id == self.sess.ident_of("log_syntax") {
204215
self.gate_feature("log_syntax", path.span, "`log_syntax!` is not \
205216
stable enough for use and is subject to change");
206217
}
207-
else if path.segments.last().unwrap().identifier == self.sess.ident_of("trace_macros") {
218+
else if id == self.sess.ident_of("trace_macros") {
208219
self.gate_feature("trace_macros", path.span, "`trace_macros` is not \
209220
stable enough for use and is subject to change");
221+
} else {
222+
for &quote in quotes.iter() {
223+
if id == self.sess.ident_of(quote) {
224+
self.gate_feature(quote, path.span, quote + msg);
225+
}
226+
}
210227
}
211228
}
212229

src/librustc/lib.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@ This API is completely unstable and subject to change.
2828
html_root_url = "http://static.rust-lang.org/doc/master")];
2929

3030
#[feature(macro_rules, globs, struct_variant, managed_boxes)];
31+
#[allow(unknown_features)]; // Note: remove it after a snapshot.
32+
#[feature(quote_item, quote_expr)];
3133

3234
extern mod extra;
3335
extern mod flate;

src/libsyntax/lib.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@ This API is completely unstable and subject to change.
2727
html_root_url = "http://static.rust-lang.org/doc/master")];
2828

2929
#[feature(macro_rules, globs, managed_boxes)];
30+
#[allow(unknown_features)];
31+
#[feature(quote_expr)];
3032

3133
#[deny(non_camel_case_types)];
3234

src/test/auxiliary/macro_crate_test.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010

1111
// force-host
1212

13-
#[feature(globs, macro_registrar, macro_rules)];
13+
#[feature(globs, macro_registrar, macro_rules, quote_expr)];
1414

1515
extern mod syntax;
1616

src/test/compile-fail/qquote-1.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
// except according to those terms.
1010

1111
// xfail-test Can't use syntax crate here
12+
#[feature(quote_expr)];
1213

1314
extern mod extra;
1415
extern mod syntax;

src/test/compile-fail/qquote-2.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
// except according to those terms.
1010

1111
// xfail-test Can't use syntax crate here
12+
#[feature(quote_stmt)];
1213

1314
extern mod extra;
1415
extern mod syntax;

src/test/run-pass-fulldeps/qquote.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010

1111
// xfail-pretty
1212
// xfail-test
13+
#[feature(quote_expr, quote_ty, quote_item, quote_stmt, quote_pat)];
1314

1415
extern mod extra;
1516
extern mod syntax;

src/test/run-pass-fulldeps/quote-tokens.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
// except according to those terms.
1010

1111
// xfail-test
12-
12+
#[feature(quote_expr, quote_tokens, quote_item, quote_pat, quote_stmt)];
1313
#[feature(managed_boxes)];
1414

1515
extern mod syntax;

src/test/run-pass-fulldeps/quote-unused-sp-no-warning.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010

1111
// xfail-fast
1212
// xfail-android
13-
13+
#[feature(quote_expr)];
1414
#[deny(unused_variable)];
1515

1616
extern mod syntax;

0 commit comments

Comments
 (0)