@@ -212,8 +212,8 @@ pub use quote::{quote, quote_span};
212212fn tree_to_bridge_tree (
213213 tree : TokenTree ,
214214) -> bridge:: TokenTree <
215- bridge:: client:: Group ,
216- bridge:: client:: Punct ,
215+ bridge:: client:: TokenStream ,
216+ bridge:: client:: Span ,
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:: Group ,
242- bridge:: client:: Punct ,
241+ bridge:: client:: TokenStream ,
242+ bridge:: client:: Span ,
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:: Group ,
369- bridge:: client:: Punct ,
368+ bridge:: client:: TokenStream ,
369+ bridge:: client:: Span ,
370370 bridge:: client:: Ident ,
371371 bridge:: client:: Literal ,
372372 > ,
@@ -788,7 +788,7 @@ impl fmt::Display for TokenTree {
788788/// A `Group` internally contains a `TokenStream` which is surrounded by `Delimiter`s.
789789#[ derive( Clone ) ]
790790#[ stable( feature = "proc_macro_lib2" , since = "1.29.0" ) ]
791- pub struct Group ( bridge:: client:: Group ) ;
791+ pub struct Group ( bridge:: Group < bridge :: client:: TokenStream , bridge :: client :: Span > ) ;
792792
793793#[ stable( feature = "proc_macro_lib2" , since = "1.29.0" ) ]
794794impl !Send for Group { }
@@ -825,13 +825,17 @@ impl Group {
825825 /// method below.
826826 #[ stable( feature = "proc_macro_lib2" , since = "1.29.0" ) ]
827827 pub fn new ( delimiter : Delimiter , stream : TokenStream ) -> Group {
828- Group ( bridge:: client:: Group :: new ( delimiter, stream. 0 ) )
828+ Group ( bridge:: Group {
829+ delimiter,
830+ stream : stream. 0 ,
831+ span : bridge:: DelimSpan :: from_single ( Span :: call_site ( ) . 0 ) ,
832+ } )
829833 }
830834
831835 /// Returns the delimiter of this `Group`
832836 #[ stable( feature = "proc_macro_lib2" , since = "1.29.0" ) ]
833837 pub fn delimiter ( & self ) -> Delimiter {
834- self . 0 . delimiter ( )
838+ self . 0 . delimiter
835839 }
836840
837841 /// Returns the `TokenStream` of tokens that are delimited in this `Group`.
@@ -840,7 +844,7 @@ impl Group {
840844 /// returned above.
841845 #[ stable( feature = "proc_macro_lib2" , since = "1.29.0" ) ]
842846 pub fn stream ( & self ) -> TokenStream {
843- TokenStream ( Some ( self . 0 . stream ( ) ) )
847+ TokenStream ( self . 0 . stream . clone ( ) )
844848 }
845849
846850 /// Returns the span for the delimiters of this token stream, spanning the
@@ -852,7 +856,7 @@ impl Group {
852856 /// ```
853857 #[ stable( feature = "proc_macro_lib2" , since = "1.29.0" ) ]
854858 pub fn span ( & self ) -> Span {
855- Span ( self . 0 . span ( ) )
859+ Span ( self . 0 . span . entire )
856860 }
857861
858862 /// Returns the span pointing to the opening delimiter of this group.
@@ -863,7 +867,7 @@ impl Group {
863867 /// ```
864868 #[ stable( feature = "proc_macro_group_span" , since = "1.55.0" ) ]
865869 pub fn span_open ( & self ) -> Span {
866- Span ( self . 0 . span_open ( ) )
870+ Span ( self . 0 . span . open )
867871 }
868872
869873 /// Returns the span pointing to the closing delimiter of this group.
@@ -874,7 +878,7 @@ impl Group {
874878 /// ```
875879 #[ stable( feature = "proc_macro_group_span" , since = "1.55.0" ) ]
876880 pub fn span_close ( & self ) -> Span {
877- Span ( self . 0 . span_close ( ) )
881+ Span ( self . 0 . span . close )
878882 }
879883
880884 /// Configures the span for this `Group`'s delimiters, but not its internal
@@ -885,7 +889,7 @@ impl Group {
885889 /// tokens at the level of the `Group`.
886890 #[ stable( feature = "proc_macro_lib2" , since = "1.29.0" ) ]
887891 pub fn set_span ( & mut self , span : Span ) {
888- self . 0 . set_span ( span. 0 ) ;
892+ self . 0 . span = bridge :: DelimSpan :: from_single ( span. 0 ) ;
889893 }
890894}
891895
@@ -925,7 +929,7 @@ impl fmt::Debug for Group {
925929/// forms of `Spacing` returned.
926930#[ stable( feature = "proc_macro_lib2" , since = "1.29.0" ) ]
927931#[ derive( Clone ) ]
928- pub struct Punct ( bridge:: client:: Punct ) ;
932+ pub struct Punct ( bridge:: Punct < bridge :: client:: Span > ) ;
929933
930934#[ stable( feature = "proc_macro_lib2" , since = "1.29.0" ) ]
931935impl !Send for Punct { }
@@ -958,13 +962,24 @@ impl Punct {
958962 /// which can be further configured with the `set_span` method below.
959963 #[ stable( feature = "proc_macro_lib2" , since = "1.29.0" ) ]
960964 pub fn new ( ch : char , spacing : Spacing ) -> Punct {
961- Punct ( bridge:: client:: Punct :: new ( ch, spacing) )
965+ const LEGAL_CHARS : & [ char ] = & [
966+ '=' , '<' , '>' , '!' , '~' , '+' , '-' , '*' , '/' , '%' , '^' , '&' , '|' , '@' , '.' , ',' , ';' ,
967+ ':' , '#' , '$' , '?' , '\'' ,
968+ ] ;
969+ if !LEGAL_CHARS . contains ( & ch) {
970+ panic ! ( "unsupported character `{:?}`" , ch) ;
971+ }
972+ Punct ( bridge:: Punct {
973+ ch : ch as u8 ,
974+ joint : spacing == Spacing :: Joint ,
975+ span : Span :: call_site ( ) . 0 ,
976+ } )
962977 }
963978
964979 /// Returns the value of this punctuation character as `char`.
965980 #[ stable( feature = "proc_macro_lib2" , since = "1.29.0" ) ]
966981 pub fn as_char ( & self ) -> char {
967- self . 0 . as_char ( )
982+ self . 0 . ch as char
968983 }
969984
970985 /// Returns the spacing of this punctuation character, indicating whether it's immediately
@@ -973,28 +988,19 @@ impl Punct {
973988 /// (`Alone`) so the operator has certainly ended.
974989 #[ stable( feature = "proc_macro_lib2" , since = "1.29.0" ) ]
975990 pub fn spacing ( & self ) -> Spacing {
976- self . 0 . spacing ( )
991+ if self . 0 . joint { Spacing :: Joint } else { Spacing :: Alone }
977992 }
978993
979994 /// Returns the span for this punctuation character.
980995 #[ stable( feature = "proc_macro_lib2" , since = "1.29.0" ) ]
981996 pub fn span ( & self ) -> Span {
982- Span ( self . 0 . span ( ) )
997+ Span ( self . 0 . span )
983998 }
984999
9851000 /// Configure the span for this punctuation character.
9861001 #[ stable( feature = "proc_macro_lib2" , since = "1.29.0" ) ]
9871002 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 ( )
1003+ self . 0 . span = span. 0 ;
9981004 }
9991005}
10001006
@@ -1003,7 +1009,7 @@ impl ToString for Punct {
10031009#[ stable( feature = "proc_macro_lib2" , since = "1.29.0" ) ]
10041010impl fmt:: Display for Punct {
10051011 fn fmt ( & self , f : & mut fmt:: Formatter < ' _ > ) -> fmt:: Result {
1006- f . write_str ( & self . to_string ( ) )
1012+ write ! ( f , "{}" , self . as_char ( ) )
10071013 }
10081014}
10091015
0 commit comments