about summary refs log tree commit diff
diff options
context:
space:
mode:
authorHuon Wilson <dbau.pp+github@gmail.com>2014-04-04 10:24:21 +1100
committerHuon Wilson <dbau.pp+github@gmail.com>2014-04-04 20:25:50 +1100
commit6c5e1d092573a8c3085ac04a10572685b229a680 (patch)
tree6ed37df302df8dcc0e37c4f82f46346802ed2d11
parentbb31cb8d2e4e415cbb71d368918d72902e655e01 (diff)
downloadrust-6c5e1d092573a8c3085ac04a10572685b229a680.tar.gz
rust-6c5e1d092573a8c3085ac04a10572685b229a680.zip
rustc: feature-gate `concat_idents!`.
concat_idents! is not as useful as it could be, due to macros only being
allowed in limited places, and hygiene, so lets feature gate it until we
make a decision about it.

cc #13294
-rw-r--r--src/librustc/front/feature_gate.rs7
-rw-r--r--src/libstd/lib.rs3
-rw-r--r--src/test/compile-fail/gated-concat_idents.rs13
-rw-r--r--src/test/compile-fail/macros-nonfatal-errors.rs2
-rw-r--r--src/test/compile-fail/syntax-extension-minor.rs1
5 files changed, 24 insertions, 2 deletions
diff --git a/src/librustc/front/feature_gate.rs b/src/librustc/front/feature_gate.rs
index 22de214cc12..5c0b9c89565 100644
--- a/src/librustc/front/feature_gate.rs
+++ b/src/librustc/front/feature_gate.rs
@@ -49,6 +49,8 @@ static KNOWN_FEATURES: &'static [(&'static str, Status)] = &[
     ("macro_registrar", Active),
     ("log_syntax", Active),
     ("trace_macros", Active),
+    ("concat_idents", Active),
+
     ("simd", Active),
     ("default_type_params", Active),
     ("quote", Active),
@@ -229,6 +231,11 @@ impl<'a> Visitor<()> for Context<'a> {
                 stable enough for use and is subject to change");
         }
 
+        else if id == token::str_to_ident("concat_idents") {
+            self.gate_feature("concat_idents", path.span, "`concat_idents` is not \
+                stable enough for use and is subject to change");
+        }
+
         else {
             for &quote in quotes.iter() {
                 if id == token::str_to_ident(quote) {
diff --git a/src/libstd/lib.rs b/src/libstd/lib.rs
index 75d6b83803f..b1cf4cf7d56 100644
--- a/src/libstd/lib.rs
+++ b/src/libstd/lib.rs
@@ -52,7 +52,7 @@
        html_favicon_url = "http://www.rust-lang.org/favicon.ico",
        html_root_url = "http://static.rust-lang.org/doc/master")]
 #![feature(macro_rules, globs, asm, managed_boxes, thread_local, link_args,
-           simd, linkage, default_type_params, phase)]
+           simd, linkage, default_type_params, phase, concat_idents)]
 
 // Don't link to std. We are std.
 #![no_std]
@@ -60,6 +60,7 @@
 // #![deny(missing_doc)] // NOTE: uncomment after a stage0 snap
 #![allow(missing_doc)] // NOTE: remove after a stage0 snap
 #![allow(visible_private_types)] // NOTE: remove after a stage0 snap
+#![allow(unknown_features)] // NOTE: remove after a stage0 snap
 
 // When testing libstd, bring in libuv as the I/O backend so tests can print
 // things and all of the std::io tests have an I/O interface to run on top
diff --git a/src/test/compile-fail/gated-concat_idents.rs b/src/test/compile-fail/gated-concat_idents.rs
new file mode 100644
index 00000000000..054e70f3822
--- /dev/null
+++ b/src/test/compile-fail/gated-concat_idents.rs
@@ -0,0 +1,13 @@
+// Copyright 2014 The Rust Project Developers. See the COPYRIGHT
+// file at the top-level directory of this distribution and at
+// http://rust-lang.org/COPYRIGHT.
+//
+// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
+// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
+// option. This file may not be copied, modified, or distributed
+// except according to those terms.
+
+fn main() {
+    concat_idents!(a, b); //~ ERROR `concat_idents` is not stable enough
+}
diff --git a/src/test/compile-fail/macros-nonfatal-errors.rs b/src/test/compile-fail/macros-nonfatal-errors.rs
index 4cfa5b8926c..df2c40657c8 100644
--- a/src/test/compile-fail/macros-nonfatal-errors.rs
+++ b/src/test/compile-fail/macros-nonfatal-errors.rs
@@ -12,7 +12,7 @@
 // immediately, so that we get more errors listed at a time.
 
 #![feature(asm)]
-#![feature(trace_macros)]
+#![feature(trace_macros, concat_idents)]
 
 #[deriving(Default, //~ ERROR
            Rand, //~ ERROR
diff --git a/src/test/compile-fail/syntax-extension-minor.rs b/src/test/compile-fail/syntax-extension-minor.rs
index e65b1c0bf3a..2dc24753b0a 100644
--- a/src/test/compile-fail/syntax-extension-minor.rs
+++ b/src/test/compile-fail/syntax-extension-minor.rs
@@ -10,6 +10,7 @@
 
 // this now fails (correctly, I claim) because hygiene prevents
 // the assembled identifier from being a reference to the binding.
+#![feature(concat_idents)]
 
 pub fn main() {
     let asdf_fdsa = ~"<.<";