diff --git a/src/libstd/macros.rs b/src/libstd/macros.rs index a4bcf7fd26c5..49de9f802716 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 1241e230b26d..4d1ca50a8937 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 0f200479fe28..5b5453d5502a 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 9f153c36733b..5b8f059fd141 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 { + //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)) => {