@@ -212,8 +212,8 @@ pub use quote::{quote, quote_span};
212212fn tree_to_bridge_tree (
213213 tree : TokenTree ,
214214) -> bridge:: TokenTree <
215+ bridge:: client:: Span ,
215216 bridge:: client:: Group ,
216- bridge:: client:: Punct ,
217217 bridge:: client:: Ident ,
218218 bridge:: client:: Literal ,
219219> {
@@ -238,8 +238,8 @@ impl From<TokenTree> for TokenStream {
238238struct ConcatTreesHelper {
239239 trees : Vec <
240240 bridge:: TokenTree <
241+ bridge:: client:: Span ,
241242 bridge:: client:: Group ,
242- bridge:: client:: Punct ,
243243 bridge:: client:: Ident ,
244244 bridge:: client:: Literal ,
245245 > ,
@@ -365,8 +365,8 @@ pub mod token_stream {
365365 pub struct IntoIter (
366366 std:: vec:: IntoIter <
367367 bridge:: TokenTree <
368+ bridge:: client:: Span ,
368369 bridge:: client:: Group ,
369- bridge:: client:: Punct ,
370370 bridge:: client:: Ident ,
371371 bridge:: client:: Literal ,
372372 > ,
@@ -925,7 +925,7 @@ impl fmt::Debug for Group {
925925/// forms of `Spacing` returned.
926926#[ stable( feature = "proc_macro_lib2" , since = "1.29.0" ) ]
927927#[ derive( Clone ) ]
928- pub struct Punct ( bridge:: client:: Punct ) ;
928+ pub struct Punct ( bridge:: Punct < bridge :: client:: Span > ) ;
929929
930930#[ stable( feature = "proc_macro_lib2" , since = "1.29.0" ) ]
931931impl !Send for Punct { }
@@ -958,13 +958,20 @@ impl Punct {
958958 /// which can be further configured with the `set_span` method below.
959959 #[ stable( feature = "proc_macro_lib2" , since = "1.29.0" ) ]
960960 pub fn new ( ch : char , spacing : Spacing ) -> Punct {
961- Punct ( bridge:: client:: Punct :: new ( ch, spacing) )
961+ const LEGAL_CHARS : & [ char ] = & [
962+ '=' , '<' , '>' , '!' , '~' , '+' , '-' , '*' , '/' , '%' , '^' , '&' , '|' , '@' , '.' , ',' , ';' ,
963+ ':' , '#' , '$' , '?' , '\'' ,
964+ ] ;
965+ if !LEGAL_CHARS . contains ( & ch) {
966+ panic ! ( "unsupported character `{:?}`" , ch) ;
967+ }
968+ Punct ( bridge:: Punct { ch, joint : spacing == Spacing :: Joint , span : Span :: call_site ( ) . 0 } )
962969 }
963970
964971 /// Returns the value of this punctuation character as `char`.
965972 #[ stable( feature = "proc_macro_lib2" , since = "1.29.0" ) ]
966973 pub fn as_char ( & self ) -> char {
967- self . 0 . as_char ( )
974+ self . 0 . ch
968975 }
969976
970977 /// Returns the spacing of this punctuation character, indicating whether it's immediately
@@ -973,28 +980,19 @@ impl Punct {
973980 /// (`Alone`) so the operator has certainly ended.
974981 #[ stable( feature = "proc_macro_lib2" , since = "1.29.0" ) ]
975982 pub fn spacing ( & self ) -> Spacing {
976- self . 0 . spacing ( )
983+ if self . 0 . joint { Spacing :: Joint } else { Spacing :: Alone }
977984 }
978985
979986 /// Returns the span for this punctuation character.
980987 #[ stable( feature = "proc_macro_lib2" , since = "1.29.0" ) ]
981988 pub fn span ( & self ) -> Span {
982- Span ( self . 0 . span ( ) )
989+ Span ( self . 0 . span )
983990 }
984991
985992 /// Configure the span for this punctuation character.
986993 #[ stable( feature = "proc_macro_lib2" , since = "1.29.0" ) ]
987994 pub fn set_span ( & mut self , span : Span ) {
988- self . 0 = self . 0 . with_span ( span. 0 ) ;
989- }
990- }
991-
992- // N.B., the bridge only provides `to_string`, implement `fmt::Display`
993- // based on it (the reverse of the usual relationship between the two).
994- #[ stable( feature = "proc_macro_lib" , since = "1.15.0" ) ]
995- impl ToString for Punct {
996- fn to_string ( & self ) -> String {
997- TokenStream :: from ( TokenTree :: from ( self . clone ( ) ) ) . to_string ( )
995+ self . 0 . span = span. 0 ;
998996 }
999997}
1000998
@@ -1003,7 +1001,7 @@ impl ToString for Punct {
10031001#[ stable( feature = "proc_macro_lib2" , since = "1.29.0" ) ]
10041002impl fmt:: Display for Punct {
10051003 fn fmt ( & self , f : & mut fmt:: Formatter < ' _ > ) -> fmt:: Result {
1006- f . write_str ( & self . to_string ( ) )
1004+ write ! ( f , "{}" , self . as_char ( ) )
10071005 }
10081006}
10091007
0 commit comments