@@ -199,35 +199,45 @@ static DEC_DIGITS_LUT: &[u8; 200] = b"0001020304050607080910111213141516171819\
199
199
8081828384858687888990919293949596979899";
200
200
201
201
macro_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) => {
203
203
204
204
$(
205
205
#[ stable( feature = "rust1" , since = "1.0.0" ) ]
206
- impl fmt:: Display for $t {
206
+ impl fmt:: Display for $unsigned {
207
207
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
+ }
211
218
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 {
212
225
#[ cfg( not( feature = "optimize_for_size" ) ) ]
213
226
{
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) ;
218
229
}
219
230
#[ cfg( feature = "optimize_for_size" ) ]
220
231
{
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) ;
225
234
}
226
- ) ?
235
+ }
236
+
227
237
// If it's a positive integer.
228
238
#[ cfg( not( feature = "optimize_for_size" ) ) ]
229
239
{
230
- self . _fmt( true , f)
240
+ ( * self as $unsigned ) . _fmt( true , f)
231
241
}
232
242
#[ cfg( feature = "optimize_for_size" ) ]
233
243
{
@@ -237,9 +247,9 @@ macro_rules! impl_Display {
237
247
}
238
248
239
249
#[ 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 ;
243
253
let mut buf = [ MaybeUninit :: <u8 >:: uninit( ) ; SIZE ] ;
244
254
let mut curr = SIZE ;
245
255
let buf_ptr = MaybeUninit :: slice_as_mut_ptr( & mut buf) ;
@@ -258,7 +268,7 @@ macro_rules! impl_Display {
258
268
#[ allow( unused_comparisons) ]
259
269
// This block will be removed for smaller types at compile time and in the worst
260
270
// 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 {
262
272
// eagerly decode 4 characters at a time
263
273
while self >= 10000 {
264
274
let rem = ( self % 10000 ) as usize ;
@@ -312,8 +322,8 @@ macro_rules! impl_Display {
312
322
313
323
#[ cfg( feature = "optimize_for_size" ) ]
314
324
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 ] ;
317
327
let mut curr = buf. len( ) ;
318
328
let buf_ptr = MaybeUninit :: slice_as_mut_ptr( & mut buf) ;
319
329
@@ -523,16 +533,11 @@ impl_Debug! {
523
533
mod imp {
524
534
use super :: * ;
525
535
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 ,
536
541
; as u64 via to_u64 named fmt_u64
537
542
) ;
538
543
impl_Exp ! (
@@ -545,18 +550,13 @@ mod imp {
545
550
mod imp {
546
551
use super :: * ;
547
552
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 ,
556
557
; as u32 via to_u32 named fmt_u32) ;
557
558
impl_Display ! (
558
- i64 as u64 named fmt_i64,
559
- u64 named fmt_u64,
559
+ i64 , u64 ,
560
560
; as u64 via to_u64 named fmt_u64) ;
561
561
562
562
impl_Exp ! ( i8 , u8 , i16 , u16 , i32 , u32 , isize , usize as u32 via to_u32 named exp_u32) ;
0 commit comments