Remove (fn(...) -> ...)
-> usize
-> *const ()
-> usize
cast
This commit is contained in:
parent
b2eba058e6
commit
ac5c15d6be
2 changed files with 36 additions and 40 deletions
|
@ -2233,37 +2233,43 @@ impl Display for char {
|
|||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
impl<T: ?Sized> Pointer for *const T {
|
||||
fn fmt(&self, f: &mut Formatter<'_>) -> Result {
|
||||
/// Since the formatting will be identical for all pointer types, use a non-monomorphized
|
||||
/// implementation for the actual formatting to reduce the amount of codegen work needed
|
||||
fn inner(ptr: *const (), f: &mut Formatter<'_>) -> Result {
|
||||
let old_width = f.width;
|
||||
let old_flags = f.flags;
|
||||
|
||||
// The alternate flag is already treated by LowerHex as being special-
|
||||
// it denotes whether to prefix with 0x. We use it to work out whether
|
||||
// or not to zero extend, and then unconditionally set it to get the
|
||||
// prefix.
|
||||
if f.alternate() {
|
||||
f.flags |= 1 << (FlagV1::SignAwareZeroPad as u32);
|
||||
|
||||
if f.width.is_none() {
|
||||
f.width = Some((usize::BITS / 4) as usize + 2);
|
||||
}
|
||||
}
|
||||
f.flags |= 1 << (FlagV1::Alternate as u32);
|
||||
|
||||
let ret = LowerHex::fmt(&(ptr.addr()), f);
|
||||
|
||||
f.width = old_width;
|
||||
f.flags = old_flags;
|
||||
|
||||
ret
|
||||
}
|
||||
|
||||
inner(*self as *const (), f)
|
||||
// Cast is needed here because `.addr()` requires `T: Sized`.
|
||||
pointer_fmt_inner((*self as *const ()).addr(), f)
|
||||
}
|
||||
}
|
||||
|
||||
/// Since the formatting will be identical for all pointer types, use a non-monomorphized
|
||||
/// implementation for the actual formatting to reduce the amount of codegen work needed.
|
||||
///
|
||||
/// This uses `ptr_addr: usize` and not `ptr: *const ()` to be able to use this for
|
||||
/// `fn(...) -> ...` without using [problematic] "Oxford Casts".
|
||||
///
|
||||
/// [problematic]: https://github.com/rust-lang/rust/issues/95489
|
||||
pub(crate) fn pointer_fmt_inner(ptr_addr: usize, f: &mut Formatter<'_>) -> Result {
|
||||
let old_width = f.width;
|
||||
let old_flags = f.flags;
|
||||
|
||||
// The alternate flag is already treated by LowerHex as being special-
|
||||
// it denotes whether to prefix with 0x. We use it to work out whether
|
||||
// or not to zero extend, and then unconditionally set it to get the
|
||||
// prefix.
|
||||
if f.alternate() {
|
||||
f.flags |= 1 << (FlagV1::SignAwareZeroPad as u32);
|
||||
|
||||
if f.width.is_none() {
|
||||
f.width = Some((usize::BITS / 4) as usize + 2);
|
||||
}
|
||||
}
|
||||
f.flags |= 1 << (FlagV1::Alternate as u32);
|
||||
|
||||
let ret = LowerHex::fmt(&ptr_addr, f);
|
||||
|
||||
f.width = old_width;
|
||||
f.flags = old_flags;
|
||||
|
||||
ret
|
||||
}
|
||||
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
impl<T: ?Sized> Pointer for *mut T {
|
||||
fn fmt(&self, f: &mut Formatter<'_>) -> Result {
|
||||
|
|
|
@ -1831,24 +1831,14 @@ macro_rules! fnptr_impls_safety_abi {
|
|||
#[stable(feature = "fnptr_impls", since = "1.4.0")]
|
||||
impl<Ret, $($Arg),*> fmt::Pointer for $FnTy {
|
||||
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||
// HACK: The intermediate cast as usize is required for AVR
|
||||
// so that the address space of the source function pointer
|
||||
// is preserved in the final function pointer.
|
||||
//
|
||||
// https://github.com/avr-rust/rust/issues/143
|
||||
fmt::Pointer::fmt(&(*self as usize as *const ()), f)
|
||||
fmt::pointer_fmt_inner(*self as usize, f)
|
||||
}
|
||||
}
|
||||
|
||||
#[stable(feature = "fnptr_impls", since = "1.4.0")]
|
||||
impl<Ret, $($Arg),*> fmt::Debug for $FnTy {
|
||||
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||
// HACK: The intermediate cast as usize is required for AVR
|
||||
// so that the address space of the source function pointer
|
||||
// is preserved in the final function pointer.
|
||||
//
|
||||
// https://github.com/avr-rust/rust/issues/143
|
||||
fmt::Pointer::fmt(&(*self as usize as *const ()), f)
|
||||
fmt::pointer_fmt_inner(*self as usize, f)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue