Skip to content

Commit 355e4cf

Browse files
authored
Rollup merge of #148906 - m-ou-se:fmt-args-from-str, r=dtolnay
Expose fmt::Arguments::from_str as unstable. Now that #148789 is merged, we can have a fmt::Arguments::from_str. I don't know if we want to commit to always having an implementation that allows for this, but we can expose it as unstable for now so we can play with it. Tracking issue: #148905
2 parents 3ba4d2d + ad1789a commit 355e4cf

File tree

3 files changed

+18
-11
lines changed

3 files changed

+18
-11
lines changed

library/alloc/src/lib.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,7 @@
116116
#![feature(exact_size_is_empty)]
117117
#![feature(extend_one)]
118118
#![feature(extend_one_unchecked)]
119+
#![feature(fmt_arguments_from_str)]
119120
#![feature(fmt_internals)]
120121
#![feature(fn_traits)]
121122
#![feature(formatting_options)]

library/core/src/fmt/mod.rs

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -734,7 +734,21 @@ impl<'a> Arguments<'a> {
734734
unsafe { Arguments { template: mem::transmute(template), args: mem::transmute(args) } }
735735
}
736736

737+
// Same as `from_str`, but not const.
738+
// Used by format_args!() expansion when arguments are inlined,
739+
// e.g. format_args!("{}", 123), which is not allowed in const.
737740
#[inline]
741+
pub fn from_str_nonconst(s: &'static str) -> Arguments<'a> {
742+
Arguments::from_str(s)
743+
}
744+
}
745+
746+
impl<'a> Arguments<'a> {
747+
/// Create a `fmt::Arguments` object for a single static string.
748+
///
749+
/// Formatting this `fmt::Arguments` will just produce the string as-is.
750+
#[inline]
751+
#[unstable(feature = "fmt_arguments_from_str", issue = "148905")]
738752
pub const fn from_str(s: &'static str) -> Arguments<'a> {
739753
// SAFETY: This is the "static str" representation of fmt::Arguments; see above.
740754
unsafe {
@@ -744,14 +758,6 @@ impl<'a> Arguments<'a> {
744758
}
745759
}
746760
}
747-
748-
// Same as `from_str`, but not const.
749-
// Used by format_args!() expansion when arguments are inlined,
750-
// e.g. format_args!("{}", 123), which is not allowed in const.
751-
#[inline]
752-
pub fn from_str_nonconst(s: &'static str) -> Arguments<'a> {
753-
Arguments::from_str(s)
754-
}
755761
}
756762

757763
#[doc(hidden)]

library/core/src/macros/mod.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -991,7 +991,7 @@ pub(crate) mod builtin {
991991
#[stable(feature = "rust1", since = "1.0.0")]
992992
#[rustc_diagnostic_item = "format_args_macro"]
993993
#[allow_internal_unsafe]
994-
#[allow_internal_unstable(fmt_internals)]
994+
#[allow_internal_unstable(fmt_internals, fmt_arguments_from_str)]
995995
#[rustc_builtin_macro]
996996
#[macro_export]
997997
macro_rules! format_args {
@@ -1005,7 +1005,7 @@ pub(crate) mod builtin {
10051005
///
10061006
/// This macro will be removed once `format_args` is allowed in const contexts.
10071007
#[unstable(feature = "const_format_args", issue = "none")]
1008-
#[allow_internal_unstable(fmt_internals, const_fmt_arguments_new)]
1008+
#[allow_internal_unstable(fmt_internals, fmt_arguments_from_str)]
10091009
#[rustc_builtin_macro]
10101010
#[macro_export]
10111011
macro_rules! const_format_args {
@@ -1020,7 +1020,7 @@ pub(crate) mod builtin {
10201020
reason = "`format_args_nl` is only for internal \
10211021
language use and is subject to change"
10221022
)]
1023-
#[allow_internal_unstable(fmt_internals)]
1023+
#[allow_internal_unstable(fmt_internals, fmt_arguments_from_str)]
10241024
#[rustc_builtin_macro]
10251025
#[doc(hidden)]
10261026
#[macro_export]

0 commit comments

Comments
 (0)