diff options
| author | Jorge Aparicio <japaricious@gmail.com> | 2014-11-01 22:36:30 -0500 |
|---|---|---|
| committer | Jorge Aparicio <japaricious@gmail.com> | 2014-11-02 09:43:12 -0500 |
| commit | 3a075dce9af716a7512618bad6b37b00e559060d (patch) | |
| tree | 12085eca16a82bf1cbc3ffa46064cd1bcf2c6710 | |
| parent | fc838ad0fd75fa294d3067e281105afd1a956f65 (diff) | |
| download | rust-3a075dce9af716a7512618bad6b37b00e559060d.tar.gz rust-3a075dce9af716a7512618bad6b37b00e559060d.zip | |
core: Replace secret formatting functions with UFCS versions
| -rw-r--r-- | src/libcore/fmt/mod.rs | 136 | ||||
| -rw-r--r-- | src/libstd/fmt.rs | 6 |
2 files changed, 138 insertions, 4 deletions
diff --git a/src/libcore/fmt/mod.rs b/src/libcore/fmt/mod.rs index 74b39a7058c..ddfbfa78502 100644 --- a/src/libcore/fmt/mod.rs +++ b/src/libcore/fmt/mod.rs @@ -250,8 +250,8 @@ pub trait UpperExp for Sized? { fn fmt(&self, &mut Formatter) -> Result; } -// FIXME #11938 - UFCS would make us able call the above methods -// directly Show::show(x, fmt). +// NOTE(stage0): Remove macro after next snapshot +#[cfg(stage0)] macro_rules! uniform_fn_call_workaround { ($( $name: ident, $trait_: ident; )*) => { $( @@ -262,6 +262,8 @@ macro_rules! uniform_fn_call_workaround { )* } } +// NOTE(stage0): Remove macro after next snapshot +#[cfg(stage0)] uniform_fn_call_workaround! { secret_show, Show; secret_bool, Bool; @@ -568,36 +570,65 @@ pub fn argument<'a, T>(f: extern "Rust" fn(&T, &mut Formatter) -> Result, /// When the compiler determines that the type of an argument *must* be a string /// (such as for select), then it invokes this method. +// NOTE(stage0): remove function after a snapshot +#[cfg(stage0)] #[doc(hidden)] #[inline] pub fn argumentstr<'a>(s: &'a &str) -> Argument<'a> { argument(secret_string, s) } +/// When the compiler determines that the type of an argument *must* be a string +/// (such as for select), then it invokes this method. +#[cfg(not(stage0))] // NOTE(stage0): remove cfg after a snapshot +#[doc(hidden)] #[inline] +pub fn argumentstr<'a>(s: &'a &str) -> Argument<'a> { + argument(String::fmt, s) +} + /// When the compiler determines that the type of an argument *must* be a uint /// (such as for plural), then it invokes this method. +// NOTE(stage0): remove function after a snapshot +#[cfg(stage0)] #[doc(hidden)] #[inline] pub fn argumentuint<'a>(s: &'a uint) -> Argument<'a> { argument(secret_unsigned, s) } +/// When the compiler determines that the type of an argument *must* be a uint +/// (such as for plural), then it invokes this method. +#[cfg(not(stage0))] // NOTE(stage0): remove cfg after a snapshot +#[doc(hidden)] #[inline] +pub fn argumentuint<'a>(s: &'a uint) -> Argument<'a> { + argument(Unsigned::fmt, s) +} + // Implementations of the core formatting traits impl<'a, Sized? T: Show> Show for &'a T { - fn fmt(&self, f: &mut Formatter) -> Result { secret_show(*self, f) } + fn fmt(&self, f: &mut Formatter) -> Result { (**self).fmt(f) } } impl<'a, Sized? T: Show> Show for &'a mut T { - fn fmt(&self, f: &mut Formatter) -> Result { secret_show(&**self, f) } + fn fmt(&self, f: &mut Formatter) -> Result { (**self).fmt(f) } } impl<'a> Show for &'a Show+'a { fn fmt(&self, f: &mut Formatter) -> Result { (*self).fmt(f) } } +// NOTE(stage0): remove impl after a snapshot +#[cfg(stage0)] impl Bool for bool { fn fmt(&self, f: &mut Formatter) -> Result { secret_string(&(if *self {"true"} else {"false"}), f) } } +#[cfg(not(stage0))] // NOTE(stage0): remove cfg after a snapshot +impl Bool for bool { + fn fmt(&self, f: &mut Formatter) -> Result { + String::fmt(if *self { "true" } else { "false" }, f) + } +} + impl<T: str::Str> String for T { fn fmt(&self, f: &mut Formatter) -> Result { f.pad(self.as_slice()) @@ -610,6 +641,8 @@ impl String for str { } } +// NOTE(stage0): remove impl after a snapshot +#[cfg(stage0)] impl Char for char { fn fmt(&self, f: &mut Formatter) -> Result { use char::Char; @@ -621,28 +654,80 @@ impl Char for char { } } +#[cfg(not(stage0))] // NOTE(stage0): remove cfg after a snapshot +impl Char for char { + fn fmt(&self, f: &mut Formatter) -> Result { + use char::Char; + + let mut utf8 = [0u8, ..4]; + let amt = self.encode_utf8(utf8).unwrap_or(0); + let s: &str = unsafe { mem::transmute(utf8[..amt]) }; + String::fmt(s, f) + } +} + +// NOTE(stage0): remove impl after a snapshot +#[cfg(stage0)] impl<T> Pointer for *const T { fn fmt(&self, f: &mut Formatter) -> Result { f.flags |= 1 << (rt::FlagAlternate as uint); secret_lower_hex::<uint>(&(*self as uint), f) } } + +#[cfg(not(stage0))] // NOTE(stage0): remove cfg after a snapshot +impl<T> Pointer for *const T { + fn fmt(&self, f: &mut Formatter) -> Result { + f.flags |= 1 << (rt::FlagAlternate as uint); + LowerHex::fmt(&(*self as uint), f) + } +} + +// NOTE(stage0): remove impl after a snapshot +#[cfg(stage0)] impl<T> Pointer for *mut T { fn fmt(&self, f: &mut Formatter) -> Result { secret_pointer::<*const T>(&(*self as *const T), f) } } + +#[cfg(not(stage0))] // NOTE(stage0): remove cfg after a snapshot +impl<T> Pointer for *mut T { + fn fmt(&self, f: &mut Formatter) -> Result { + Pointer::fmt(&(*self as *const T), f) + } +} + +// NOTE(stage0): remove impl after a snapshot +#[cfg(stage0)] impl<'a, T> Pointer for &'a T { fn fmt(&self, f: &mut Formatter) -> Result { secret_pointer::<*const T>(&(&**self as *const T), f) } } + +#[cfg(not(stage0))] // NOTE(stage0): remove cfg after a snapshot +impl<'a, T> Pointer for &'a T { + fn fmt(&self, f: &mut Formatter) -> Result { + Pointer::fmt(&(*self as *const T), f) + } +} + +// NOTE(stage0): remove impl after a snapshot +#[cfg(stage0)] impl<'a, T> Pointer for &'a mut T { fn fmt(&self, f: &mut Formatter) -> Result { secret_pointer::<*const T>(&(&**self as *const T), f) } } +#[cfg(not(stage0))] // NOTE(stage0): remove cfg after a snapshot +impl<'a, T> Pointer for &'a mut T { + fn fmt(&self, f: &mut Formatter) -> Result { + Pointer::fmt(&(&**self as *const T), f) + } +} + macro_rules! floating(($ty:ident) => { impl Float for $ty { fn fmt(&self, fmt: &mut Formatter) -> Result { @@ -712,6 +797,8 @@ floating!(f64) // Implementation of Show for various core types +// NOTE(stage0): remove macro after a snapshot +#[cfg(stage0)] macro_rules! delegate(($ty:ty to $other:ident) => { impl Show for $ty { fn fmt(&self, f: &mut Formatter) -> Result { @@ -719,19 +806,60 @@ macro_rules! delegate(($ty:ty to $other:ident) => { } } }) + +// NOTE(stage0): remove these macros after a snapshot +#[cfg(stage0)] delegate!(str to string) +#[cfg(stage0)] delegate!(bool to bool) +#[cfg(stage0)] delegate!(char to char) +#[cfg(stage0)] delegate!(f32 to float) +#[cfg(stage0)] delegate!(f64 to float) +#[cfg(not(stage0))] // NOTE(stage0): remove cfg after a snapshot +macro_rules! delegate(($ty:ty to $other:ident) => { + impl Show for $ty { + fn fmt(&self, f: &mut Formatter) -> Result { + $other::fmt(self, f) + } + } +}) +#[cfg(not(stage0))] // NOTE(stage0): remove cfg after a snapshot +delegate!(str to String) +#[cfg(not(stage0))] // NOTE(stage0): remove cfg after a snapshot +delegate!(bool to Bool) +#[cfg(not(stage0))] // NOTE(stage0): remove cfg after a snapshot +delegate!(char to Char) +#[cfg(not(stage0))] // NOTE(stage0): remove cfg after a snapshot +delegate!(f32 to Float) +#[cfg(not(stage0))] // NOTE(stage0): remove cfg after a snapshot +delegate!(f64 to Float) + +// NOTE(stage0): remove impl after a snapshot +#[cfg(stage0)] impl<T> Show for *const T { fn fmt(&self, f: &mut Formatter) -> Result { secret_pointer(self, f) } } + +#[cfg(not(stage0))] // NOTE(stage0): remove cfg after a snapshot +impl<T> Show for *const T { + fn fmt(&self, f: &mut Formatter) -> Result { Pointer::fmt(self, f) } +} + +// NOTE(stage0): remove impl after a snapshot +#[cfg(stage0)] impl<T> Show for *mut T { fn fmt(&self, f: &mut Formatter) -> Result { secret_pointer(self, f) } } +#[cfg(not(stage0))] // NOTE(stage0): remove cfg after a snapshot +impl<T> Show for *mut T { + fn fmt(&self, f: &mut Formatter) -> Result { Pointer::fmt(self, f) } +} + macro_rules! peel(($name:ident, $($other:ident,)*) => (tuple!($($other,)*))) macro_rules! tuple ( diff --git a/src/libstd/fmt.rs b/src/libstd/fmt.rs index 27451c91f3f..cb151dd9c0a 100644 --- a/src/libstd/fmt.rs +++ b/src/libstd/fmt.rs @@ -424,14 +424,20 @@ pub use core::fmt::{Argument, Arguments, write, radix, Radix, RadixFmt}; #[doc(hidden)] pub use core::fmt::{argument, argumentstr, argumentuint}; +// NOTE(stage0): remove these imports after a snapshot +#[cfg(stage0)] #[doc(hidden)] pub use core::fmt::{secret_show, secret_string, secret_unsigned}; +#[cfg(stage0)] #[doc(hidden)] pub use core::fmt::{secret_signed, secret_lower_hex, secret_upper_hex}; +#[cfg(stage0)] #[doc(hidden)] pub use core::fmt::{secret_bool, secret_char, secret_octal, secret_binary}; +#[cfg(stage0)] #[doc(hidden)] pub use core::fmt::{secret_float, secret_upper_exp, secret_lower_exp}; +#[cfg(stage0)] #[doc(hidden)] pub use core::fmt::{secret_pointer}; |
