Skip to content

Commit 3312f5d

Browse files
committed
alloc: make to_string_str! a bit less complex
1 parent 20c833c commit 3312f5d

File tree

1 file changed

+35
-22
lines changed

1 file changed

+35
-22
lines changed

library/alloc/src/string.rs

+35-22
Original file line numberDiff line numberDiff line change
@@ -2647,37 +2647,50 @@ impl ToString for i8 {
26472647
// for strings, including `&&&str`s that would never be written
26482648
// by hand. This macro generates twelve layers of nested `&`-impl
26492649
// for primitive strings.
2650-
macro_rules! to_string_str {
2651-
{type ; x $($x:ident)*} => {
2652-
&to_string_str! { type ; $($x)* }
2653-
};
2654-
{type ;} => { str };
2655-
{impl ; x $($x:ident)*} => {
2656-
to_string_str! { $($x)* }
2650+
#[cfg(not(no_global_oom_handling))]
2651+
macro_rules! to_string_str_wrap_in_ref {
2652+
{x $($x:ident)*} => {
2653+
&to_string_str_wrap_in_ref! { $($x)* }
26572654
};
2658-
{impl ;} => { };
2655+
{} => { str };
2656+
}
2657+
#[cfg(not(no_global_oom_handling))]
2658+
macro_rules! to_string_expr_wrap_in_deref {
26592659
{$self:expr ; x $($x:ident)*} => {
2660-
*(to_string_str! { $self ; $($x)* })
2660+
*(to_string_expr_wrap_in_deref! { $self ; $($x)* })
26612661
};
26622662
{$self:expr ;} => { $self };
2663-
{$($x:ident)*} => {
2664-
#[doc(hidden)]
2665-
#[cfg(not(no_global_oom_handling))]
2666-
#[stable(feature = "str_to_string_specialization", since = "1.9.0")]
2667-
impl ToString for to_string_str!(type ; $($x)*) {
2668-
#[inline]
2669-
fn to_string(&self) -> String {
2670-
String::from(to_string_str!(self ; $($x)*))
2663+
}
2664+
#[cfg(not(no_global_oom_handling))]
2665+
macro_rules! to_string_str {
2666+
{$($($x:ident)*),+} => {
2667+
$(
2668+
#[doc(hidden)]
2669+
#[stable(feature = "str_to_string_specialization", since = "1.9.0")]
2670+
impl ToString for to_string_str_wrap_in_ref!($($x)*) {
2671+
#[inline]
2672+
fn to_string(&self) -> String {
2673+
String::from(to_string_expr_wrap_in_deref!(self ; $($x)*))
2674+
}
26712675
}
2672-
}
2673-
to_string_str! { impl ; $($x)* }
2676+
)+
26742677
};
26752678
}
26762679

2680+
#[cfg(not(no_global_oom_handling))]
26772681
to_string_str! {
2678-
x x x x
2679-
x x x x
2680-
x x x x
2682+
x x x x x x x x x x x x,
2683+
x x x x x x x x x x x,
2684+
x x x x x x x x x x,
2685+
x x x x x x x x x,
2686+
x x x x x x x x,
2687+
x x x x x x x,
2688+
x x x x x x,
2689+
x x x x x,
2690+
x x x x,
2691+
x x x,
2692+
x x,
2693+
x,
26812694
}
26822695

26832696
#[doc(hidden)]

0 commit comments

Comments
 (0)