about summary refs log tree commit diff
diff options
context:
space:
mode:
authorEsteban Küber <esteban@commure.com>2018-07-21 15:50:46 -0700
committerEsteban Küber <esteban@commure.com>2018-07-21 15:50:46 -0700
commit00d500052c72775ab994b5634195976f85b4e0d6 (patch)
tree09fe2165eefbbe1b7ff0e249cc56ebc9538142cb
parent83a8af50bbf704b5cdf2cbbab481e0e936ed03a8 (diff)
Gate `format_args_nll` behind feature flag
-rw-r--r--src/libstd/macros.rs2
-rw-r--r--src/libsyntax/ext/expand.rs1
-rw-r--r--src/libsyntax/feature_gate.rs4
-rw-r--r--src/libsyntax_ext/format.rs15
4 files changed, 21 insertions, 1 deletions
diff --git a/src/libstd/macros.rs b/src/libstd/macros.rs
index a4bcf7fd26c..49de9f80271 100644
--- a/src/libstd/macros.rs
+++ b/src/libstd/macros.rs
@@ -413,7 +413,7 @@ pub mod builtin {
     ///
     /// [`format_args`]: ../std/macro.format_args.html
     #[doc(hidden)]
-    #[unstable(feature = "println_format_args", issue="0")]
+    #[unstable(feature = "format_args_nl", issue="0")]
     #[macro_export]
     macro_rules! format_args_nl {
         ($fmt:expr) => ({ /* compiler built-in */ });
diff --git a/src/libsyntax/ext/expand.rs b/src/libsyntax/ext/expand.rs
index 1241e230b26..4d1ca50a893 100644
--- a/src/libsyntax/ext/expand.rs
+++ b/src/libsyntax/ext/expand.rs
@@ -1592,6 +1592,7 @@ impl<'feat> ExpansionConfig<'feat> {
         fn enable_trace_macros = trace_macros,
         fn enable_allow_internal_unstable = allow_internal_unstable,
         fn enable_custom_derive = custom_derive,
+        fn enable_format_args_nl = format_args_nl,
         fn use_extern_macros_enabled = use_extern_macros,
         fn macros_in_extern_enabled = macros_in_extern,
         fn proc_macro_mod = proc_macro_mod,
diff --git a/src/libsyntax/feature_gate.rs b/src/libsyntax/feature_gate.rs
index 0f200479fe2..5b5453d5502 100644
--- a/src/libsyntax/feature_gate.rs
+++ b/src/libsyntax/feature_gate.rs
@@ -129,6 +129,7 @@ declare_features! (
     // rustc internal, for now:
     (active, intrinsics, "1.0.0", None, None),
     (active, lang_items, "1.0.0", None, None),
+    (active, format_args_nl, "1.29.0", None, None),
 
     (active, link_llvm_intrinsics, "1.0.0", Some(29602), None),
     (active, linkage, "1.0.0", Some(29603), None),
@@ -1327,6 +1328,9 @@ pub const EXPLAIN_LOG_SYNTAX: &'static str =
 pub const EXPLAIN_CONCAT_IDENTS: &'static str =
     "`concat_idents` is not stable enough for use and is subject to change";
 
+pub const EXPLAIN_FORMAT_ARGS_NL: &'static str =
+    "`format_args_nl` is only for internal language use and is subject to change";
+
 pub const EXPLAIN_TRACE_MACROS: &'static str =
     "`trace_macros` is not stable enough for use and is subject to change";
 pub const EXPLAIN_ALLOW_INTERNAL_UNSTABLE: &'static str =
diff --git a/src/libsyntax_ext/format.rs b/src/libsyntax_ext/format.rs
index 9f153c36733..5b8f059fd14 100644
--- a/src/libsyntax_ext/format.rs
+++ b/src/libsyntax_ext/format.rs
@@ -17,6 +17,7 @@ use syntax::ast;
 use syntax::ext::base::*;
 use syntax::ext::base;
 use syntax::ext::build::AstBuilder;
+use syntax::feature_gate;
 use syntax::parse::token;
 use syntax::ptr::P;
 use syntax::symbol::Symbol;
@@ -693,6 +694,20 @@ pub fn expand_format_args_nl<'cx>(ecx: &'cx mut ExtCtxt,
                                   mut sp: Span,
                                   tts: &[tokenstream::TokenTree])
                                   -> Box<dyn base::MacResult + 'cx> {
+    //if !ecx.ecfg.enable_allow_internal_unstable() {
+
+    // For some reason, the only one that actually works for `println` is the first check
+    if !sp.allows_unstable()   // the enclosing span is marked as `#[allow_insternal_unsable]`
+        || !ecx.ecfg.enable_allow_internal_unstable()  // NOTE: when is this enabled?
+        || !ecx.ecfg.enable_format_args_nl()  // enabled using `#[feature(format_args_nl]`
+    {
+        feature_gate::emit_feature_err(&ecx.parse_sess,
+                                       "format_args_nl",
+                                       sp,
+                                       feature_gate::GateIssue::Language,
+                                       feature_gate::EXPLAIN_FORMAT_ARGS_NL);
+        return base::DummyResult::expr(sp);
+    }
     sp = sp.apply_mark(ecx.current_expansion.mark);
     match parse_args(ecx, sp, tts) {
         Some((efmt, args, names)) => {