@@ -127,7 +127,8 @@ impl fmt::Display for TokenStream {
127
127
#[ stable( feature = "proc_macro_lib" , since = "1.15.0" ) ]
128
128
impl fmt:: Debug for TokenStream {
129
129
fn fmt ( & self , f : & mut fmt:: Formatter ) -> fmt:: Result {
130
- self . 0 . fmt ( f)
130
+ f. write_str ( "TokenStream " ) ?;
131
+ f. debug_list ( ) . entries ( self . clone ( ) ) . finish ( )
131
132
}
132
133
}
133
134
@@ -222,7 +223,7 @@ pub fn quote_span(span: Span) -> TokenStream {
222
223
223
224
/// A region of source code, along with macro expansion information.
224
225
#[ unstable( feature = "proc_macro" , issue = "38356" ) ]
225
- #[ derive( Copy , Clone , Debug ) ]
226
+ #[ derive( Copy , Clone ) ]
226
227
pub struct Span ( syntax_pos:: Span ) ;
227
228
228
229
macro_rules! diagnostic_method {
@@ -334,6 +335,16 @@ impl Span {
334
335
diagnostic_method ! ( help, Level :: Help ) ;
335
336
}
336
337
338
+ #[ unstable( feature = "proc_macro" , issue = "38356" ) ]
339
+ impl fmt:: Debug for Span {
340
+ fn fmt ( & self , f : & mut fmt:: Formatter ) -> fmt:: Result {
341
+ write ! ( f, "{:?} bytes({}..{})" ,
342
+ self . 0 . ctxt( ) ,
343
+ self . 0 . lo( ) . 0 ,
344
+ self . 0 . hi( ) . 0 )
345
+ }
346
+ }
347
+
337
348
/// A line-column pair representing the start or end of a `Span`.
338
349
#[ unstable( feature = "proc_macro" , issue = "38356" ) ]
339
350
#[ derive( Copy , Clone , Debug , PartialEq , Eq ) ]
@@ -422,7 +433,7 @@ impl PartialEq<FileName> for SourceFile {
422
433
423
434
/// A single token or a delimited sequence of token trees (e.g. `[1, (), ..]`).
424
435
#[ unstable( feature = "proc_macro" , issue = "38356" ) ]
425
- #[ derive( Clone , Debug ) ]
436
+ #[ derive( Clone ) ]
426
437
pub enum TokenTree {
427
438
/// A delimited tokenstream
428
439
Group ( Group ) ,
@@ -463,6 +474,20 @@ impl TokenTree {
463
474
}
464
475
}
465
476
477
+ #[ unstable( feature = "proc_macro" , issue = "38356" ) ]
478
+ impl fmt:: Debug for TokenTree {
479
+ fn fmt ( & self , f : & mut fmt:: Formatter ) -> fmt:: Result {
480
+ // Each of these has the name in the struct type in the derived debug,
481
+ // so don't bother with an extra layer of indirection
482
+ match * self {
483
+ TokenTree :: Group ( ref tt) => tt. fmt ( f) ,
484
+ TokenTree :: Term ( ref tt) => tt. fmt ( f) ,
485
+ TokenTree :: Op ( ref tt) => tt. fmt ( f) ,
486
+ TokenTree :: Literal ( ref tt) => tt. fmt ( f) ,
487
+ }
488
+ }
489
+ }
490
+
466
491
#[ unstable( feature = "proc_macro" , issue = "38356" ) ]
467
492
impl From < Group > for TokenTree {
468
493
fn from ( g : Group ) -> TokenTree {
@@ -717,7 +742,8 @@ impl fmt::Display for Term {
717
742
#[ derive( Clone , Debug ) ]
718
743
#[ unstable( feature = "proc_macro" , issue = "38356" ) ]
719
744
pub struct Literal {
720
- token : token:: Token ,
745
+ lit : token:: Lit ,
746
+ suffix : Option < ast:: Name > ,
721
747
span : Span ,
722
748
}
723
749
@@ -734,10 +760,9 @@ macro_rules! suffixed_int_literals {
734
760
/// below.
735
761
#[ unstable( feature = "proc_macro" , issue = "38356" ) ]
736
762
pub fn $name( n: $kind) -> Literal {
737
- let lit = token:: Lit :: Integer ( Symbol :: intern( & n. to_string( ) ) ) ;
738
- let ty = Some ( Symbol :: intern( stringify!( $kind) ) ) ;
739
763
Literal {
740
- token: token:: Literal ( lit, ty) ,
764
+ lit: token:: Lit :: Integer ( Symbol :: intern( & n. to_string( ) ) ) ,
765
+ suffix: Some ( Symbol :: intern( stringify!( $kind) ) ) ,
741
766
span: Span :: call_site( ) ,
742
767
}
743
768
}
@@ -759,9 +784,9 @@ macro_rules! unsuffixed_int_literals {
759
784
/// below.
760
785
#[ unstable( feature = "proc_macro" , issue = "38356" ) ]
761
786
pub fn $name( n: $kind) -> Literal {
762
- let lit = token:: Lit :: Integer ( Symbol :: intern( & n. to_string( ) ) ) ;
763
787
Literal {
764
- token: token:: Literal ( lit, None ) ,
788
+ lit: token:: Lit :: Integer ( Symbol :: intern( & n. to_string( ) ) ) ,
789
+ suffix: None ,
765
790
span: Span :: call_site( ) ,
766
791
}
767
792
}
@@ -814,9 +839,9 @@ impl Literal {
814
839
if !n. is_finite ( ) {
815
840
panic ! ( "Invalid float literal {}" , n) ;
816
841
}
817
- let lit = token:: Lit :: Float ( Symbol :: intern ( & n. to_string ( ) ) ) ;
818
842
Literal {
819
- token : token:: Literal ( lit, None ) ,
843
+ lit : token:: Lit :: Float ( Symbol :: intern ( & n. to_string ( ) ) ) ,
844
+ suffix : None ,
820
845
span : Span :: call_site ( ) ,
821
846
}
822
847
}
@@ -837,9 +862,9 @@ impl Literal {
837
862
if !n. is_finite ( ) {
838
863
panic ! ( "Invalid float literal {}" , n) ;
839
864
}
840
- let lit = token:: Lit :: Float ( Symbol :: intern ( & n. to_string ( ) ) ) ;
841
865
Literal {
842
- token : token:: Literal ( lit, Some ( Symbol :: intern ( "f32" ) ) ) ,
866
+ lit : token:: Lit :: Float ( Symbol :: intern ( & n. to_string ( ) ) ) ,
867
+ suffix : Some ( Symbol :: intern ( "f32" ) ) ,
843
868
span : Span :: call_site ( ) ,
844
869
}
845
870
}
@@ -859,9 +884,9 @@ impl Literal {
859
884
if !n. is_finite ( ) {
860
885
panic ! ( "Invalid float literal {}" , n) ;
861
886
}
862
- let lit = token:: Lit :: Float ( Symbol :: intern ( & n. to_string ( ) ) ) ;
863
887
Literal {
864
- token : token:: Literal ( lit, None ) ,
888
+ lit : token:: Lit :: Float ( Symbol :: intern ( & n. to_string ( ) ) ) ,
889
+ suffix : None ,
865
890
span : Span :: call_site ( ) ,
866
891
}
867
892
}
@@ -882,9 +907,9 @@ impl Literal {
882
907
if !n. is_finite ( ) {
883
908
panic ! ( "Invalid float literal {}" , n) ;
884
909
}
885
- let lit = token:: Lit :: Float ( Symbol :: intern ( & n. to_string ( ) ) ) ;
886
910
Literal {
887
- token : token:: Literal ( lit, Some ( Symbol :: intern ( "f64" ) ) ) ,
911
+ lit : token:: Lit :: Float ( Symbol :: intern ( & n. to_string ( ) ) ) ,
912
+ suffix : Some ( Symbol :: intern ( "f64" ) ) ,
888
913
span : Span :: call_site ( ) ,
889
914
}
890
915
}
@@ -897,7 +922,8 @@ impl Literal {
897
922
escaped. extend ( ch. escape_debug ( ) ) ;
898
923
}
899
924
Literal {
900
- token : token:: Literal ( token:: Lit :: Str_ ( Symbol :: intern ( & escaped) ) , None ) ,
925
+ lit : token:: Lit :: Str_ ( Symbol :: intern ( & escaped) ) ,
926
+ suffix : None ,
901
927
span : Span :: call_site ( ) ,
902
928
}
903
929
}
@@ -908,7 +934,8 @@ impl Literal {
908
934
let mut escaped = String :: new ( ) ;
909
935
escaped. extend ( ch. escape_unicode ( ) ) ;
910
936
Literal {
911
- token : token:: Literal ( token:: Lit :: Char ( Symbol :: intern ( & escaped) ) , None ) ,
937
+ lit : token:: Lit :: Char ( Symbol :: intern ( & escaped) ) ,
938
+ suffix : None ,
912
939
span : Span :: call_site ( ) ,
913
940
}
914
941
}
@@ -919,7 +946,8 @@ impl Literal {
919
946
let string = bytes. iter ( ) . cloned ( ) . flat_map ( ascii:: escape_default)
920
947
. map ( Into :: < char > :: into) . collect :: < String > ( ) ;
921
948
Literal {
922
- token : token:: Literal ( token:: Lit :: ByteStr ( Symbol :: intern ( & string) ) , None ) ,
949
+ lit : token:: Lit :: ByteStr ( Symbol :: intern ( & string) ) ,
950
+ suffix : None ,
923
951
span : Span :: call_site ( ) ,
924
952
}
925
953
}
@@ -1055,7 +1083,7 @@ impl TokenTree {
1055
1083
Ident ( ident, true ) => {
1056
1084
tt ! ( Term :: new( & format!( "r#{}" , ident) , Span ( span) ) )
1057
1085
}
1058
- Literal ( .. ) => tt ! ( self :: Literal { token , span: Span ( span) } ) ,
1086
+ Literal ( lit , suffix ) => tt ! ( self :: Literal { lit , suffix , span: Span ( span) } ) ,
1059
1087
DocComment ( c) => {
1060
1088
let style = comments:: doc_comment_style ( & c. as_str ( ) ) ;
1061
1089
let stripped = comments:: strip_doc_comment_decoration ( & c. as_str ( ) ) ;
@@ -1111,33 +1139,36 @@ impl TokenTree {
1111
1139
return TokenTree :: Token ( tt. span . 0 , token) . into ( ) ;
1112
1140
}
1113
1141
self :: TokenTree :: Literal ( self :: Literal {
1114
- token : Literal ( Lit :: Integer ( ref a) , b) ,
1142
+ lit : Lit :: Integer ( ref a) ,
1143
+ suffix,
1115
1144
span,
1116
1145
} )
1117
1146
if a. as_str ( ) . starts_with ( "-" ) =>
1118
1147
{
1119
1148
let minus = BinOp ( BinOpToken :: Minus ) ;
1120
1149
let integer = Symbol :: intern ( & a. as_str ( ) [ 1 ..] ) ;
1121
- let integer = Literal ( Lit :: Integer ( integer) , b ) ;
1150
+ let integer = Literal ( Lit :: Integer ( integer) , suffix ) ;
1122
1151
let a = TokenTree :: Token ( span. 0 , minus) ;
1123
1152
let b = TokenTree :: Token ( span. 0 , integer) ;
1124
1153
return vec ! [ a, b] . into_iter ( ) . collect ( )
1125
1154
}
1126
1155
self :: TokenTree :: Literal ( self :: Literal {
1127
- token : Literal ( Lit :: Float ( ref a) , b) ,
1156
+ lit : Lit :: Float ( ref a) ,
1157
+ suffix,
1128
1158
span,
1129
1159
} )
1130
1160
if a. as_str ( ) . starts_with ( "-" ) =>
1131
1161
{
1132
1162
let minus = BinOp ( BinOpToken :: Minus ) ;
1133
1163
let float = Symbol :: intern ( & a. as_str ( ) [ 1 ..] ) ;
1134
- let float = Literal ( Lit :: Float ( float) , b ) ;
1164
+ let float = Literal ( Lit :: Float ( float) , suffix ) ;
1135
1165
let a = TokenTree :: Token ( span. 0 , minus) ;
1136
1166
let b = TokenTree :: Token ( span. 0 , float) ;
1137
1167
return vec ! [ a, b] . into_iter ( ) . collect ( )
1138
1168
}
1139
1169
self :: TokenTree :: Literal ( tt) => {
1140
- return TokenTree :: Token ( tt. span . 0 , tt. token ) . into ( )
1170
+ let token = Literal ( tt. lit , tt. suffix ) ;
1171
+ return TokenTree :: Token ( tt. span . 0 , token) . into ( )
1141
1172
}
1142
1173
} ;
1143
1174
0 commit comments