@@ -250,8 +250,8 @@ pub trait UpperExp for Sized? {
250250 fn fmt ( & self , & mut Formatter ) -> Result ;
251251}
252252
253- // FIXME #11938 - UFCS would make us able call the above methods
254- // directly Show::show(x, fmt).
253+ // NOTE(stage0): Remove macro after next snapshot
254+ # [ cfg ( stage0 ) ]
255255macro_rules! uniform_fn_call_workaround {
256256 ( $( $name: ident, $trait_: ident; ) * ) => {
257257 $(
@@ -262,6 +262,8 @@ macro_rules! uniform_fn_call_workaround {
262262 ) *
263263 }
264264}
265+ // NOTE(stage0): Remove macro after next snapshot
266+ #[ cfg( stage0) ]
265267uniform_fn_call_workaround ! {
266268 secret_show, Show ;
267269 secret_bool, Bool ;
@@ -568,36 +570,65 @@ pub fn argument<'a, T>(f: extern "Rust" fn(&T, &mut Formatter) -> Result,
568570
569571/// When the compiler determines that the type of an argument *must* be a string
570572/// (such as for select), then it invokes this method.
573+ // NOTE(stage0): remove function after a snapshot
574+ #[ cfg( stage0) ]
571575#[ doc( hidden) ] #[ inline]
572576pub fn argumentstr < ' a > ( s : & ' a & str ) -> Argument < ' a > {
573577 argument ( secret_string, s)
574578}
575579
580+ /// When the compiler determines that the type of an argument *must* be a string
581+ /// (such as for select), then it invokes this method.
582+ #[ cfg( not( stage0) ) ] // NOTE(stage0): remove cfg after a snapshot
583+ #[ doc( hidden) ] #[ inline]
584+ pub fn argumentstr < ' a > ( s : & ' a & str ) -> Argument < ' a > {
585+ argument ( String :: fmt, s)
586+ }
587+
576588/// When the compiler determines that the type of an argument *must* be a uint
577589/// (such as for plural), then it invokes this method.
590+ // NOTE(stage0): remove function after a snapshot
591+ #[ cfg( stage0) ]
578592#[ doc( hidden) ] #[ inline]
579593pub fn argumentuint < ' a > ( s : & ' a uint ) -> Argument < ' a > {
580594 argument ( secret_unsigned, s)
581595}
582596
597+ /// When the compiler determines that the type of an argument *must* be a uint
598+ /// (such as for plural), then it invokes this method.
599+ #[ cfg( not( stage0) ) ] // NOTE(stage0): remove cfg after a snapshot
600+ #[ doc( hidden) ] #[ inline]
601+ pub fn argumentuint < ' a > ( s : & ' a uint ) -> Argument < ' a > {
602+ argument ( Unsigned :: fmt, s)
603+ }
604+
583605// Implementations of the core formatting traits
584606
585607impl < ' a , Sized ? T : Show > Show for & ' a T {
586- fn fmt ( & self , f : & mut Formatter ) -> Result { secret_show ( * self , f) }
608+ fn fmt ( & self , f : & mut Formatter ) -> Result { ( * * self ) . fmt ( f) }
587609}
588610impl < ' a , Sized ? T : Show > Show for & ' a mut T {
589- fn fmt ( & self , f : & mut Formatter ) -> Result { secret_show ( & * * self , f) }
611+ fn fmt ( & self , f : & mut Formatter ) -> Result { ( * * self ) . fmt ( f) }
590612}
591613impl < ' a > Show for & ' a Show +' a {
592614 fn fmt ( & self , f : & mut Formatter ) -> Result { ( * self ) . fmt ( f) }
593615}
594616
617+ // NOTE(stage0): remove impl after a snapshot
618+ #[ cfg( stage0) ]
595619impl Bool for bool {
596620 fn fmt ( & self , f : & mut Formatter ) -> Result {
597621 secret_string ( & ( if * self { "true" } else { "false" } ) , f)
598622 }
599623}
600624
625+ #[ cfg( not( stage0) ) ] // NOTE(stage0): remove cfg after a snapshot
626+ impl Bool for bool {
627+ fn fmt ( & self , f : & mut Formatter ) -> Result {
628+ String :: fmt ( if * self { "true" } else { "false" } , f)
629+ }
630+ }
631+
601632impl < T : str:: Str > String for T {
602633 fn fmt ( & self , f : & mut Formatter ) -> Result {
603634 f. pad ( self . as_slice ( ) )
@@ -610,6 +641,8 @@ impl String for str {
610641 }
611642}
612643
644+ // NOTE(stage0): remove impl after a snapshot
645+ #[ cfg( stage0) ]
613646impl Char for char {
614647 fn fmt ( & self , f : & mut Formatter ) -> Result {
615648 use char:: Char ;
@@ -621,28 +654,80 @@ impl Char for char {
621654 }
622655}
623656
657+ #[ cfg( not( stage0) ) ] // NOTE(stage0): remove cfg after a snapshot
658+ impl Char for char {
659+ fn fmt ( & self , f : & mut Formatter ) -> Result {
660+ use char:: Char ;
661+
662+ let mut utf8 = [ 0u8 , ..4 ] ;
663+ let amt = self . encode_utf8 ( utf8) . unwrap_or ( 0 ) ;
664+ let s: & str = unsafe { mem:: transmute ( utf8[ ..amt] ) } ;
665+ String :: fmt ( s, f)
666+ }
667+ }
668+
669+ // NOTE(stage0): remove impl after a snapshot
670+ #[ cfg( stage0) ]
624671impl < T > Pointer for * const T {
625672 fn fmt ( & self , f : & mut Formatter ) -> Result {
626673 f. flags |= 1 << ( rt:: FlagAlternate as uint ) ;
627674 secret_lower_hex :: < uint > ( & ( * self as uint ) , f)
628675 }
629676}
677+
678+ #[ cfg( not( stage0) ) ] // NOTE(stage0): remove cfg after a snapshot
679+ impl < T > Pointer for * const T {
680+ fn fmt ( & self , f : & mut Formatter ) -> Result {
681+ f. flags |= 1 << ( rt:: FlagAlternate as uint ) ;
682+ LowerHex :: fmt ( & ( * self as uint ) , f)
683+ }
684+ }
685+
686+ // NOTE(stage0): remove impl after a snapshot
687+ #[ cfg( stage0) ]
630688impl < T > Pointer for * mut T {
631689 fn fmt ( & self , f : & mut Formatter ) -> Result {
632690 secret_pointer :: < * const T > ( & ( * self as * const T ) , f)
633691 }
634692}
693+
694+ #[ cfg( not( stage0) ) ] // NOTE(stage0): remove cfg after a snapshot
695+ impl < T > Pointer for * mut T {
696+ fn fmt ( & self , f : & mut Formatter ) -> Result {
697+ Pointer :: fmt ( & ( * self as * const T ) , f)
698+ }
699+ }
700+
701+ // NOTE(stage0): remove impl after a snapshot
702+ #[ cfg( stage0) ]
635703impl < ' a , T > Pointer for & ' a T {
636704 fn fmt ( & self , f : & mut Formatter ) -> Result {
637705 secret_pointer :: < * const T > ( & ( & * * self as * const T ) , f)
638706 }
639707}
708+
709+ #[ cfg( not( stage0) ) ] // NOTE(stage0): remove cfg after a snapshot
710+ impl < ' a , T > Pointer for & ' a T {
711+ fn fmt ( & self , f : & mut Formatter ) -> Result {
712+ Pointer :: fmt ( & ( * self as * const T ) , f)
713+ }
714+ }
715+
716+ // NOTE(stage0): remove impl after a snapshot
717+ #[ cfg( stage0) ]
640718impl < ' a , T > Pointer for & ' a mut T {
641719 fn fmt ( & self , f : & mut Formatter ) -> Result {
642720 secret_pointer :: < * const T > ( & ( & * * self as * const T ) , f)
643721 }
644722}
645723
724+ #[ cfg( not( stage0) ) ] // NOTE(stage0): remove cfg after a snapshot
725+ impl < ' a , T > Pointer for & ' a mut T {
726+ fn fmt ( & self , f : & mut Formatter ) -> Result {
727+ Pointer :: fmt ( & ( & * * self as * const T ) , f)
728+ }
729+ }
730+
646731macro_rules! floating( ( $ty: ident) => {
647732 impl Float for $ty {
648733 fn fmt( & self , fmt: & mut Formatter ) -> Result {
@@ -712,26 +797,69 @@ floating!(f64)
712797
713798// Implementation of Show for various core types
714799
800+ // NOTE(stage0): remove macro after a snapshot
801+ #[ cfg( stage0) ]
715802macro_rules! delegate( ( $ty: ty to $other: ident) => {
716803 impl Show for $ty {
717804 fn fmt( & self , f: & mut Formatter ) -> Result {
718805 ( concat_idents!( secret_, $other) ( self , f) )
719806 }
720807 }
721808} )
809+
810+ // NOTE(stage0): remove these macros after a snapshot
811+ #[ cfg( stage0) ]
722812delegate ! ( str to string)
813+ #[ cfg( stage0) ]
723814delegate ! ( bool to bool )
815+ #[ cfg( stage0) ]
724816delegate ! ( char to char )
817+ #[ cfg( stage0) ]
725818delegate ! ( f32 to float)
819+ #[ cfg( stage0) ]
726820delegate ! ( f64 to float)
727821
822+ #[ cfg( not( stage0) ) ] // NOTE(stage0): remove cfg after a snapshot
823+ macro_rules! delegate( ( $ty: ty to $other: ident) => {
824+ impl Show for $ty {
825+ fn fmt( & self , f: & mut Formatter ) -> Result {
826+ $other:: fmt( self , f)
827+ }
828+ }
829+ } )
830+ #[ cfg( not( stage0) ) ] // NOTE(stage0): remove cfg after a snapshot
831+ delegate ! ( str to String )
832+ #[ cfg( not( stage0) ) ] // NOTE(stage0): remove cfg after a snapshot
833+ delegate ! ( bool to Bool )
834+ #[ cfg( not( stage0) ) ] // NOTE(stage0): remove cfg after a snapshot
835+ delegate ! ( char to Char )
836+ #[ cfg( not( stage0) ) ] // NOTE(stage0): remove cfg after a snapshot
837+ delegate ! ( f32 to Float )
838+ #[ cfg( not( stage0) ) ] // NOTE(stage0): remove cfg after a snapshot
839+ delegate ! ( f64 to Float )
840+
841+ // NOTE(stage0): remove impl after a snapshot
842+ #[ cfg( stage0) ]
728843impl < T > Show for * const T {
729844 fn fmt ( & self , f : & mut Formatter ) -> Result { secret_pointer ( self , f) }
730845}
846+
847+ #[ cfg( not( stage0) ) ] // NOTE(stage0): remove cfg after a snapshot
848+ impl < T > Show for * const T {
849+ fn fmt ( & self , f : & mut Formatter ) -> Result { Pointer :: fmt ( self , f) }
850+ }
851+
852+ // NOTE(stage0): remove impl after a snapshot
853+ #[ cfg( stage0) ]
731854impl < T > Show for * mut T {
732855 fn fmt ( & self , f : & mut Formatter ) -> Result { secret_pointer ( self , f) }
733856}
734857
858+ #[ cfg( not( stage0) ) ] // NOTE(stage0): remove cfg after a snapshot
859+ impl < T > Show for * mut T {
860+ fn fmt ( & self , f : & mut Formatter ) -> Result { Pointer :: fmt ( self , f) }
861+ }
862+
735863macro_rules! peel( ( $name: ident, $( $other: ident, ) * ) => ( tuple!( $( $other, ) * ) ) )
736864
737865macro_rules! tuple (
0 commit comments