@@ -250,6 +250,37 @@ pub trait UpperExp for Sized? {
250
250
fn fmt ( & self , & mut Formatter ) -> Result ;
251
251
}
252
252
253
+ // NOTE(stage0): Remove macro after next snapshot
254
+ #[ cfg( stage0) ]
255
+ macro_rules! uniform_fn_call_workaround {
256
+ ( $( $name: ident, $trait_: ident; ) * ) => {
257
+ $(
258
+ #[ doc( hidden) ]
259
+ pub fn $name<Sized ? T : $trait_>( x: & T , fmt: & mut Formatter ) -> Result {
260
+ x. fmt( fmt)
261
+ }
262
+ ) *
263
+ }
264
+ }
265
+ // NOTE(stage0): Remove macro after next snapshot
266
+ #[ cfg( stage0) ]
267
+ uniform_fn_call_workaround ! {
268
+ secret_show, Show ;
269
+ secret_bool, Bool ;
270
+ secret_char, Char ;
271
+ secret_signed, Signed ;
272
+ secret_unsigned, Unsigned ;
273
+ secret_octal, Octal ;
274
+ secret_binary, Binary ;
275
+ secret_lower_hex, LowerHex ;
276
+ secret_upper_hex, UpperHex ;
277
+ secret_string, String ;
278
+ secret_pointer, Pointer ;
279
+ secret_float, Float ;
280
+ secret_lower_exp, LowerExp ;
281
+ secret_upper_exp, UpperExp ;
282
+ }
283
+
253
284
static DEFAULT_ARGUMENT : rt:: Argument < ' static > = rt:: Argument {
254
285
position : rt:: ArgumentNext ,
255
286
format : rt:: FormatSpec {
@@ -539,13 +570,33 @@ pub fn argument<'a, T>(f: extern "Rust" fn(&T, &mut Formatter) -> Result,
539
570
540
571
/// When the compiler determines that the type of an argument *must* be a string
541
572
/// (such as for select), then it invokes this method.
573
+ // NOTE(stage0): remove function after a snapshot
574
+ #[ cfg( stage0) ]
575
+ #[ doc( hidden) ] #[ inline]
576
+ pub fn argumentstr < ' a > ( s : & ' a & str ) -> Argument < ' a > {
577
+ argument ( secret_string, s)
578
+ }
579
+
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
542
583
#[ doc( hidden) ] #[ inline]
543
584
pub fn argumentstr < ' a > ( s : & ' a & str ) -> Argument < ' a > {
544
585
argument ( String :: fmt, s)
545
586
}
546
587
547
588
/// When the compiler determines that the type of an argument *must* be a uint
548
589
/// (such as for plural), then it invokes this method.
590
+ // NOTE(stage0): remove function after a snapshot
591
+ #[ cfg( stage0) ]
592
+ #[ doc( hidden) ] #[ inline]
593
+ pub fn argumentuint < ' a > ( s : & ' a uint ) -> Argument < ' a > {
594
+ argument ( secret_unsigned, s)
595
+ }
596
+
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
549
600
#[ doc( hidden) ] #[ inline]
550
601
pub fn argumentuint < ' a > ( s : & ' a uint ) -> Argument < ' a > {
551
602
argument ( Unsigned :: fmt, s)
@@ -563,6 +614,15 @@ impl<'a> Show for &'a Show+'a {
563
614
fn fmt ( & self , f : & mut Formatter ) -> Result { ( * self ) . fmt ( f) }
564
615
}
565
616
617
+ // NOTE(stage0): remove impl after a snapshot
618
+ #[ cfg( stage0) ]
619
+ impl Bool for bool {
620
+ fn fmt ( & self , f : & mut Formatter ) -> Result {
621
+ secret_string ( & ( if * self { "true" } else { "false" } ) , f)
622
+ }
623
+ }
624
+
625
+ #[ cfg( not( stage0) ) ] // NOTE(stage0): remove cfg after a snapshot
566
626
impl Bool for bool {
567
627
fn fmt ( & self , f : & mut Formatter ) -> Result {
568
628
String :: fmt ( if * self { "true" } else { "false" } , f)
@@ -581,6 +641,20 @@ impl String for str {
581
641
}
582
642
}
583
643
644
+ // NOTE(stage0): remove impl after a snapshot
645
+ #[ cfg( stage0) ]
646
+ impl Char for char {
647
+ fn fmt ( & self , f : & mut Formatter ) -> Result {
648
+ use char:: Char ;
649
+
650
+ let mut utf8 = [ 0u8 , ..4 ] ;
651
+ let amt = self . encode_utf8 ( utf8) . unwrap_or ( 0 ) ;
652
+ let s: & str = unsafe { mem:: transmute ( utf8[ ..amt] ) } ;
653
+ secret_string ( & s, f)
654
+ }
655
+ }
656
+
657
+ #[ cfg( not( stage0) ) ] // NOTE(stage0): remove cfg after a snapshot
584
658
impl Char for char {
585
659
fn fmt ( & self , f : & mut Formatter ) -> Result {
586
660
use char:: Char ;
@@ -592,25 +666,62 @@ impl Char for char {
592
666
}
593
667
}
594
668
669
+ // NOTE(stage0): remove impl after a snapshot
670
+ #[ cfg( stage0) ]
671
+ impl < T > Pointer for * const T {
672
+ fn fmt ( & self , f : & mut Formatter ) -> Result {
673
+ f. flags |= 1 << ( rt:: FlagAlternate as uint ) ;
674
+ secret_lower_hex :: < uint > ( & ( * self as uint ) , f)
675
+ }
676
+ }
677
+
678
+ #[ cfg( not( stage0) ) ] // NOTE(stage0): remove cfg after a snapshot
595
679
impl < T > Pointer for * const T {
596
680
fn fmt ( & self , f : & mut Formatter ) -> Result {
597
681
f. flags |= 1 << ( rt:: FlagAlternate as uint ) ;
598
682
LowerHex :: fmt ( & ( * self as uint ) , f)
599
683
}
600
684
}
601
685
686
+ // NOTE(stage0): remove impl after a snapshot
687
+ #[ cfg( stage0) ]
688
+ impl < T > Pointer for * mut T {
689
+ fn fmt ( & self , f : & mut Formatter ) -> Result {
690
+ secret_pointer :: < * const T > ( & ( * self as * const T ) , f)
691
+ }
692
+ }
693
+
694
+ #[ cfg( not( stage0) ) ] // NOTE(stage0): remove cfg after a snapshot
602
695
impl < T > Pointer for * mut T {
603
696
fn fmt ( & self , f : & mut Formatter ) -> Result {
604
697
Pointer :: fmt ( & ( * self as * const T ) , f)
605
698
}
606
699
}
607
700
701
+ // NOTE(stage0): remove impl after a snapshot
702
+ #[ cfg( stage0) ]
703
+ impl < ' a , T > Pointer for & ' a T {
704
+ fn fmt ( & self , f : & mut Formatter ) -> Result {
705
+ secret_pointer :: < * const T > ( & ( & * * self as * const T ) , f)
706
+ }
707
+ }
708
+
709
+ #[ cfg( not( stage0) ) ] // NOTE(stage0): remove cfg after a snapshot
608
710
impl < ' a , T > Pointer for & ' a T {
609
711
fn fmt ( & self , f : & mut Formatter ) -> Result {
610
712
Pointer :: fmt ( & ( * self as * const T ) , f)
611
713
}
612
714
}
613
715
716
+ // NOTE(stage0): remove impl after a snapshot
717
+ #[ cfg( stage0) ]
718
+ impl < ' a , T > Pointer for & ' a mut T {
719
+ fn fmt ( & self , f : & mut Formatter ) -> Result {
720
+ secret_pointer :: < * const T > ( & ( & * * self as * const T ) , f)
721
+ }
722
+ }
723
+
724
+ #[ cfg( not( stage0) ) ] // NOTE(stage0): remove cfg after a snapshot
614
725
impl < ' a , T > Pointer for & ' a mut T {
615
726
fn fmt ( & self , f : & mut Formatter ) -> Result {
616
727
Pointer :: fmt ( & ( & * * self as * const T ) , f)
@@ -686,23 +797,65 @@ floating!(f64)
686
797
687
798
// Implementation of Show for various core types
688
799
800
+ // NOTE(stage0): remove macro after a snapshot
801
+ #[ cfg( stage0) ]
802
+ macro_rules! delegate( ( $ty: ty to $other: ident) => {
803
+ impl Show for $ty {
804
+ fn fmt( & self , f: & mut Formatter ) -> Result {
805
+ ( concat_idents!( secret_, $other) ( self , f) )
806
+ }
807
+ }
808
+ } )
809
+
810
+ // NOTE(stage0): remove these macros after a snapshot
811
+ #[ cfg( stage0) ]
812
+ delegate ! ( str to string)
813
+ #[ cfg( stage0) ]
814
+ delegate ! ( bool to bool )
815
+ #[ cfg( stage0) ]
816
+ delegate ! ( char to char )
817
+ #[ cfg( stage0) ]
818
+ delegate ! ( f32 to float)
819
+ #[ cfg( stage0) ]
820
+ delegate ! ( f64 to float)
821
+
822
+ #[ cfg( not( stage0) ) ] // NOTE(stage0): remove cfg after a snapshot
689
823
macro_rules! delegate( ( $ty: ty to $other: ident) => {
690
824
impl Show for $ty {
691
825
fn fmt( & self , f: & mut Formatter ) -> Result {
692
826
$other:: fmt( self , f)
693
827
}
694
828
}
695
829
} )
830
+ #[ cfg( not( stage0) ) ] // NOTE(stage0): remove cfg after a snapshot
696
831
delegate ! ( str to String )
832
+ #[ cfg( not( stage0) ) ] // NOTE(stage0): remove cfg after a snapshot
697
833
delegate ! ( bool to Bool )
834
+ #[ cfg( not( stage0) ) ] // NOTE(stage0): remove cfg after a snapshot
698
835
delegate ! ( char to Char )
836
+ #[ cfg( not( stage0) ) ] // NOTE(stage0): remove cfg after a snapshot
699
837
delegate ! ( f32 to Float )
838
+ #[ cfg( not( stage0) ) ] // NOTE(stage0): remove cfg after a snapshot
700
839
delegate ! ( f64 to Float )
701
840
841
+ // NOTE(stage0): remove impl after a snapshot
842
+ #[ cfg( stage0) ]
843
+ impl < T > Show for * const T {
844
+ fn fmt ( & self , f : & mut Formatter ) -> Result { secret_pointer ( self , f) }
845
+ }
846
+
847
+ #[ cfg( not( stage0) ) ] // NOTE(stage0): remove cfg after a snapshot
702
848
impl < T > Show for * const T {
703
849
fn fmt ( & self , f : & mut Formatter ) -> Result { Pointer :: fmt ( self , f) }
704
850
}
705
851
852
+ // NOTE(stage0): remove impl after a snapshot
853
+ #[ cfg( stage0) ]
854
+ impl < T > Show for * mut T {
855
+ fn fmt ( & self , f : & mut Formatter ) -> Result { secret_pointer ( self , f) }
856
+ }
857
+
858
+ #[ cfg( not( stage0) ) ] // NOTE(stage0): remove cfg after a snapshot
706
859
impl < T > Show for * mut T {
707
860
fn fmt ( & self , f : & mut Formatter ) -> Result { Pointer :: fmt ( self , f) }
708
861
}
0 commit comments