@@ -199,35 +199,45 @@ static DEC_DIGITS_LUT: &[u8; 200] = b"0001020304050607080910111213141516171819\
199199 8081828384858687888990919293949596979899";
200200
201201macro_rules! impl_Display {
202- ( $( $t : ident $ ( as $positive : ident ) ? named $name : ident, ) * ; as $u: ident via $conv_fn: ident named $gen_name: ident) => {
202+ ( $( $signed : ident, $unsigned : ident, ) * ; as $u: ident via $conv_fn: ident named $gen_name: ident) => {
203203
204204 $(
205205 #[ stable( feature = "rust1" , since = "1.0.0" ) ]
206- impl fmt:: Display for $t {
206+ impl fmt:: Display for $unsigned {
207207 fn fmt( & self , f: & mut fmt:: Formatter <' _>) -> fmt:: Result {
208- // If it's a signed integer.
209- $(
210- let is_nonnegative = * self >= 0 ;
208+ #[ cfg( not( feature = "optimize_for_size" ) ) ]
209+ {
210+ self . _fmt( true , f)
211+ }
212+ #[ cfg( feature = "optimize_for_size" ) ]
213+ {
214+ $gen_name( self . $conv_fn( ) , true , f)
215+ }
216+ }
217+ }
211218
219+ #[ stable( feature = "rust1" , since = "1.0.0" ) ]
220+ impl fmt:: Display for $signed {
221+ fn fmt( & self , f: & mut fmt:: Formatter <' _>) -> fmt:: Result {
222+ let is_nonnegative = * self >= 0 ;
223+
224+ if !is_nonnegative {
212225 #[ cfg( not( feature = "optimize_for_size" ) ) ]
213226 {
214- if !is_nonnegative {
215- // convert the negative num to positive by summing 1 to its 2s complement
216- return ( !self as $positive) . wrapping_add( 1 ) . _fmt( false , f) ;
217- }
227+ // convert the negative num to positive by summing 1 to its 2s complement
228+ return ( !self as $unsigned) . wrapping_add( 1 ) . _fmt( false , f) ;
218229 }
219230 #[ cfg( feature = "optimize_for_size" ) ]
220231 {
221- if !is_nonnegative {
222- // convert the negative num to positive by summing 1 to its 2s complement
223- return $gen_name( ( !self . $conv_fn( ) ) . wrapping_add( 1 ) , false , f) ;
224- }
232+ // convert the negative num to positive by summing 1 to its 2s complement
233+ return $gen_name( ( !self . $conv_fn( ) ) . wrapping_add( 1 ) , false , f) ;
225234 }
226- ) ?
235+ }
236+
227237 // If it's a positive integer.
228238 #[ cfg( not( feature = "optimize_for_size" ) ) ]
229239 {
230- self . _fmt( true , f)
240+ ( * self as $unsigned ) . _fmt( true , f)
231241 }
232242 #[ cfg( feature = "optimize_for_size" ) ]
233243 {
@@ -237,9 +247,9 @@ macro_rules! impl_Display {
237247 }
238248
239249 #[ cfg( not( feature = "optimize_for_size" ) ) ]
240- impl $t {
241- fn _fmt( mut self : $t , is_nonnegative: bool , f: & mut fmt:: Formatter <' _>) -> fmt:: Result {
242- const SIZE : usize = $t :: MAX . ilog( 10 ) as usize + 1 ;
250+ impl $unsigned {
251+ fn _fmt( mut self , is_nonnegative: bool , f: & mut fmt:: Formatter <' _>) -> fmt:: Result {
252+ const SIZE : usize = $unsigned :: MAX . ilog( 10 ) as usize + 1 ;
243253 let mut buf = [ MaybeUninit :: <u8 >:: uninit( ) ; SIZE ] ;
244254 let mut curr = SIZE ;
245255 let buf_ptr = MaybeUninit :: slice_as_mut_ptr( & mut buf) ;
@@ -258,7 +268,7 @@ macro_rules! impl_Display {
258268 #[ allow( unused_comparisons) ]
259269 // This block will be removed for smaller types at compile time and in the worst
260270 // case, it will prevent to have the `10000` literal to overflow for `i8` and `u8`.
261- if core:: mem:: size_of:: <$t >( ) >= 2 {
271+ if core:: mem:: size_of:: <$unsigned >( ) >= 2 {
262272 // eagerly decode 4 characters at a time
263273 while self >= 10000 {
264274 let rem = ( self % 10000 ) as usize ;
@@ -312,8 +322,8 @@ macro_rules! impl_Display {
312322
313323 #[ cfg( feature = "optimize_for_size" ) ]
314324 fn $gen_name( mut n: $u, is_nonnegative: bool , f: & mut fmt:: Formatter <' _>) -> fmt:: Result {
315- // 2^128 is about 3*10^38, so 39 gives an extra byte of space
316- let mut buf = [ MaybeUninit :: <u8 >:: uninit( ) ; 39 ] ;
325+ const SIZE : usize = $u :: MAX . ilog ( 10 ) as usize + 1 ;
326+ let mut buf = [ MaybeUninit :: <u8 >:: uninit( ) ; SIZE ] ;
317327 let mut curr = buf. len( ) ;
318328 let buf_ptr = MaybeUninit :: slice_as_mut_ptr( & mut buf) ;
319329
@@ -523,16 +533,11 @@ impl_Debug! {
523533mod imp {
524534 use super :: * ;
525535 impl_Display ! (
526- i8 as u8 named fmt_i8,
527- u8 named fmt_u8,
528- i16 as u16 named fmt_i16,
529- u16 named fmt_u16,
530- i32 as u32 named fmt_i32,
531- u32 named fmt_u32,
532- i64 as u64 named fmt_i64,
533- u64 named fmt_u64,
534- isize as usize named fmt_isize,
535- usize named fmt_usize,
536+ i8 , u8 ,
537+ i16 , u16 ,
538+ i32 , u32 ,
539+ i64 , u64 ,
540+ isize , usize ,
536541 ; as u64 via to_u64 named fmt_u64
537542 ) ;
538543 impl_Exp ! (
@@ -545,18 +550,13 @@ mod imp {
545550mod imp {
546551 use super :: * ;
547552 impl_Display ! (
548- i8 as u8 named fmt_i8,
549- u8 named fmt_u8,
550- i16 as u16 named fmt_i16,
551- u16 named fmt_u16,
552- i32 as u32 named fmt_i32,
553- u32 named fmt_u32,
554- isize as usize named fmt_isize,
555- usize named fmt_usize,
553+ i8 , u8 ,
554+ i16 , u16 ,
555+ i32 , u32 ,
556+ isize , usize ,
556557 ; as u32 via to_u32 named fmt_u32) ;
557558 impl_Display ! (
558- i64 as u64 named fmt_i64,
559- u64 named fmt_u64,
559+ i64 , u64 ,
560560 ; as u64 via to_u64 named fmt_u64) ;
561561
562562 impl_Exp ! ( i8 , u8 , i16 , u16 , i32 , u32 , isize , usize as u32 via to_u32 named exp_u32) ;
0 commit comments