Skip to content

Commit 4451aee

Browse files
Remove the need to provide the maximum number of digits to impl_Display macro
1 parent 85c1cec commit 4451aee

File tree

1 file changed

+24
-23
lines changed

1 file changed

+24
-23
lines changed

core/src/fmt/num.rs

+24-23
Original file line numberDiff line numberDiff line change
@@ -208,7 +208,7 @@ static DEC_DIGITS_LUT: &[u8; 200] = b"0001020304050607080910111213141516171819\
208208
8081828384858687888990919293949596979899";
209209

210210
macro_rules! impl_Display {
211-
($($t:ident => $size:literal $(as $positive:ident)? named $name:ident,)* ; as $u:ident via $conv_fn:ident named $gen_name:ident) => {
211+
($($t:ident $(as $positive:ident)? named $name:ident,)* ; as $u:ident via $conv_fn:ident named $gen_name:ident) => {
212212

213213
$(
214214
#[stable(feature = "rust1", since = "1.0.0")]
@@ -248,8 +248,9 @@ macro_rules! impl_Display {
248248
#[cfg(not(feature = "optimize_for_size"))]
249249
impl $t {
250250
fn _fmt(mut self: $t, is_nonnegative: bool, f: &mut fmt::Formatter<'_>) -> fmt::Result {
251-
let mut buf = [MaybeUninit::<u8>::uninit(); $size];
252-
let mut curr = $size;
251+
const SIZE: usize = $t::MAX.ilog(10) as usize + 1;
252+
let mut buf = [MaybeUninit::<u8>::uninit(); SIZE];
253+
let mut curr = SIZE;
253254
let buf_ptr = MaybeUninit::slice_as_mut_ptr(&mut buf);
254255
let lut_ptr = DEC_DIGITS_LUT.as_ptr();
255256

@@ -526,16 +527,16 @@ macro_rules! impl_Exp {
526527
mod imp {
527528
use super::*;
528529
impl_Display!(
529-
i8 => 3 as u8 named fmt_i8,
530-
u8 => 3 named fmt_u8,
531-
i16 => 5 as u16 named fmt_i16,
532-
u16 => 5 named fmt_u16,
533-
i32 => 10 as u32 named fmt_i32,
534-
u32 => 10 named fmt_u32,
535-
i64 => 19 as u64 named fmt_i64,
536-
u64 => 20 named fmt_u64,
537-
isize => 19 as usize named fmt_isize,
538-
usize => 20 named fmt_usize,
530+
i8 as u8 named fmt_i8,
531+
u8 named fmt_u8,
532+
i16 as u16 named fmt_i16,
533+
u16 named fmt_u16,
534+
i32 as u32 named fmt_i32,
535+
u32 named fmt_u32,
536+
i64 as u64 named fmt_i64,
537+
u64 named fmt_u64,
538+
isize as usize named fmt_isize,
539+
usize named fmt_usize,
539540
; as u64 via to_u64 named fmt_u64
540541
);
541542
impl_Exp!(
@@ -548,18 +549,18 @@ mod imp {
548549
mod imp {
549550
use super::*;
550551
impl_Display!(
551-
i8 => 3 as u8 named fmt_i8,
552-
u8 => 3 named fmt_u8,
553-
i16 => 5 as u16 named fmt_i16,
554-
u16 => 5 named fmt_u16,
555-
i32 => 10 as u32 named fmt_i32,
556-
u32 => 10 named fmt_u32,
557-
isize => 19 as usize named fmt_isize,
558-
usize => 20 named fmt_usize,
552+
i8 as u8 named fmt_i8,
553+
u8 named fmt_u8,
554+
i16 as u16 named fmt_i16,
555+
u16 named fmt_u16,
556+
i32 as u32 named fmt_i32,
557+
u32 named fmt_u32,
558+
isize as usize named fmt_isize,
559+
usize named fmt_usize,
559560
; as u32 via to_u32 named fmt_u32);
560561
impl_Display!(
561-
i64 => 19 as u64 named fmt_i64,
562-
u64 => 20 named fmt_u64,
562+
i64 as u64 named fmt_i64,
563+
u64 named fmt_u64,
563564
; as u64 via to_u64 named fmt_u64);
564565

565566
impl_Exp!(i8, u8, i16, u16, i32, u32, isize, usize as u32 via to_u32 named exp_u32);

0 commit comments

Comments
 (0)