@@ -2186,28 +2186,34 @@ impl Display for char {
2186
2186
#[ stable( feature = "rust1" , since = "1.0.0" ) ]
2187
2187
impl < T : ?Sized > Pointer for * const T {
2188
2188
fn fmt ( & self , f : & mut Formatter < ' _ > ) -> Result {
2189
- let old_width = f. width ;
2190
- let old_flags = f. flags ;
2191
-
2192
- // The alternate flag is already treated by LowerHex as being special-
2193
- // it denotes whether to prefix with 0x. We use it to work out whether
2194
- // or not to zero extend, and then unconditionally set it to get the
2195
- // prefix.
2196
- if f. alternate ( ) {
2197
- f. flags |= 1 << ( FlagV1 :: SignAwareZeroPad as u32 ) ;
2198
-
2199
- if f. width . is_none ( ) {
2200
- f. width = Some ( ( usize:: BITS / 4 ) as usize + 2 ) ;
2189
+ /// Since the formatting will be identical for all pointer types, use a non-monomorphized
2190
+ /// implementation for the actual formatting to reduce the amount of codegen work needed
2191
+ fn inner ( ptr : * const ( ) , f : & mut Formatter < ' _ > ) -> Result {
2192
+ let old_width = f. width ;
2193
+ let old_flags = f. flags ;
2194
+
2195
+ // The alternate flag is already treated by LowerHex as being special-
2196
+ // it denotes whether to prefix with 0x. We use it to work out whether
2197
+ // or not to zero extend, and then unconditionally set it to get the
2198
+ // prefix.
2199
+ if f. alternate ( ) {
2200
+ f. flags |= 1 << ( FlagV1 :: SignAwareZeroPad as u32 ) ;
2201
+
2202
+ if f. width . is_none ( ) {
2203
+ f. width = Some ( ( usize:: BITS / 4 ) as usize + 2 ) ;
2204
+ }
2201
2205
}
2202
- }
2203
- f. flags |= 1 << ( FlagV1 :: Alternate as u32 ) ;
2206
+ f. flags |= 1 << ( FlagV1 :: Alternate as u32 ) ;
2207
+
2208
+ let ret = LowerHex :: fmt ( & ( ptr as usize ) , f) ;
2204
2209
2205
- let ret = LowerHex :: fmt ( & ( * self as * const ( ) as usize ) , f) ;
2210
+ f. width = old_width;
2211
+ f. flags = old_flags;
2206
2212
2207
- f . width = old_width ;
2208
- f . flags = old_flags ;
2213
+ ret
2214
+ }
2209
2215
2210
- ret
2216
+ inner ( * self as * const ( ) , f )
2211
2217
}
2212
2218
}
2213
2219
0 commit comments