@@ -14,8 +14,8 @@ use rustc_span::def_id::CrateNum;
1414use rustc_span:: symbol:: { self , kw, sym, Symbol } ;
1515use rustc_span:: { BytePos , FileName , Pos , SourceFile , Span } ;
1616
17- use pm:: bridge:: { server, TokenTree } ;
18- use pm:: { Delimiter , Level , LineColumn , Spacing } ;
17+ use pm:: bridge:: { server, Punct , TokenTree } ;
18+ use pm:: { Delimiter , Level , LineColumn } ;
1919use std:: ops:: Bound ;
2020use std:: { ascii, panic} ;
2121
@@ -50,7 +50,7 @@ impl ToInternal<token::Delimiter> for Delimiter {
5050}
5151
5252impl FromInternal < ( TreeAndSpacing , & ' _ mut Vec < Self > , & mut Rustc < ' _ , ' _ > ) >
53- for TokenTree < Group , Punct , Ident , Literal >
53+ for TokenTree < Span , Group , Ident , Literal >
5454{
5555 fn from_internal (
5656 ( ( tree, spacing) , stack, rustc) : ( TreeAndSpacing , & mut Vec < Self > , & mut Rustc < ' _ , ' _ > ) ,
@@ -79,16 +79,16 @@ impl FromInternal<(TreeAndSpacing, &'_ mut Vec<Self>, &mut Rustc<'_, '_>)>
7979 }
8080 macro_rules! op {
8181 ( $a: expr) => {
82- tt!( Punct :: new ( $a, joint) )
82+ tt!( Punct { ch : $a, joint } )
8383 } ;
8484 ( $a: expr, $b: expr) => { {
85- stack. push( tt!( Punct :: new ( $b, joint) ) ) ;
86- tt!( Punct :: new ( $a, true ) )
85+ stack. push( tt!( Punct { ch : $b, joint } ) ) ;
86+ tt!( Punct { ch : $a, joint : true } )
8787 } } ;
8888 ( $a: expr, $b: expr, $c: expr) => { {
89- stack. push( tt!( Punct :: new ( $c, joint) ) ) ;
90- stack. push( tt!( Punct :: new ( $b, true ) ) ) ;
91- tt!( Punct :: new ( $a, true ) )
89+ stack. push( tt!( Punct { ch : $c, joint } ) ) ;
90+ stack. push( tt!( Punct { ch : $b, joint : true } ) ) ;
91+ tt!( Punct { ch : $a, joint : true } )
9292 } } ;
9393 }
9494
@@ -146,7 +146,7 @@ impl FromInternal<(TreeAndSpacing, &'_ mut Vec<Self>, &mut Rustc<'_, '_>)>
146146 Lifetime ( name) => {
147147 let ident = symbol:: Ident :: new ( name, span) . without_first_quote ( ) ;
148148 stack. push ( tt ! ( Ident :: new( rustc. sess( ) , ident. name, false ) ) ) ;
149- tt ! ( Punct :: new ( '\'' , true ) )
149+ tt ! ( Punct { ch : '\'' , joint : true } )
150150 }
151151 Literal ( lit) => tt ! ( Literal { lit } ) ,
152152 DocComment ( _, attr_style, data) => {
@@ -169,9 +169,9 @@ impl FromInternal<(TreeAndSpacing, &'_ mut Vec<Self>, &mut Rustc<'_, '_>)>
169169 flatten : false ,
170170 } ) ) ;
171171 if attr_style == ast:: AttrStyle :: Inner {
172- stack. push ( tt ! ( Punct :: new ( '!' , false ) ) ) ;
172+ stack. push ( tt ! ( Punct { ch : '!' , joint : false } ) ) ;
173173 }
174- tt ! ( Punct :: new ( '#' , false ) )
174+ tt ! ( Punct { ch : '#' , joint : false } )
175175 }
176176
177177 Interpolated ( nt) if let NtIdent ( ident, is_raw) = * nt => {
@@ -192,7 +192,7 @@ impl FromInternal<(TreeAndSpacing, &'_ mut Vec<Self>, &mut Rustc<'_, '_>)>
192192 }
193193}
194194
195- impl ToInternal < TokenStream > for TokenTree < Group , Punct , Ident , Literal > {
195+ impl ToInternal < TokenStream > for TokenTree < Span , Group , Ident , Literal > {
196196 fn to_internal ( self ) -> TokenStream {
197197 use rustc_ast:: token:: * ;
198198
@@ -288,27 +288,6 @@ pub struct Group {
288288 flatten : bool ,
289289}
290290
291- #[ derive( Copy , Clone , PartialEq , Eq , Hash ) ]
292- pub struct Punct {
293- ch : char ,
294- // NB. not using `Spacing` here because it doesn't implement `Hash`.
295- joint : bool ,
296- span : Span ,
297- }
298-
299- impl Punct {
300- fn new ( ch : char , joint : bool , span : Span ) -> Punct {
301- const LEGAL_CHARS : & [ char ] = & [
302- '=' , '<' , '>' , '!' , '~' , '+' , '-' , '*' , '/' , '%' , '^' , '&' , '|' , '@' , '.' , ',' , ';' ,
303- ':' , '#' , '$' , '?' , '\'' ,
304- ] ;
305- if !LEGAL_CHARS . contains ( & ch) {
306- panic ! ( "unsupported character `{:?}`" , ch)
307- }
308- Punct { ch, joint, span }
309- }
310- }
311-
312291#[ derive( Copy , Clone , PartialEq , Eq , Hash ) ]
313292pub struct Ident {
314293 sym : Symbol ,
@@ -380,7 +359,6 @@ impl server::Types for Rustc<'_, '_> {
380359 type FreeFunctions = FreeFunctions ;
381360 type TokenStream = TokenStream ;
382361 type Group = Group ;
383- type Punct = Punct ;
384362 type Ident = Ident ;
385363 type Literal = Literal ;
386364 type SourceFile = Lrc < SourceFile > ;
@@ -469,14 +447,14 @@ impl server::TokenStream for Rustc<'_, '_> {
469447 }
470448 fn from_token_tree (
471449 & mut self ,
472- tree : TokenTree < Self :: Group , Self :: Punct , Self :: Ident , Self :: Literal > ,
450+ tree : TokenTree < Self :: Span , Self :: Group , Self :: Ident , Self :: Literal > ,
473451 ) -> Self :: TokenStream {
474452 tree. to_internal ( )
475453 }
476454 fn concat_trees (
477455 & mut self ,
478456 base : Option < Self :: TokenStream > ,
479- trees : Vec < TokenTree < Self :: Group , Self :: Punct , Self :: Ident , Self :: Literal > > ,
457+ trees : Vec < TokenTree < Self :: Span , Self :: Group , Self :: Ident , Self :: Literal > > ,
480458 ) -> Self :: TokenStream {
481459 let mut builder = tokenstream:: TokenStreamBuilder :: new ( ) ;
482460 if let Some ( base) = base {
@@ -504,7 +482,7 @@ impl server::TokenStream for Rustc<'_, '_> {
504482 fn into_iter (
505483 & mut self ,
506484 stream : Self :: TokenStream ,
507- ) -> Vec < TokenTree < Self :: Group , Self :: Punct , Self :: Ident , Self :: Literal > > {
485+ ) -> Vec < TokenTree < Self :: Span , Self :: Group , Self :: Ident , Self :: Literal > > {
508486 // XXX: This is a raw port of the previous approach, and can probably be
509487 // optimized.
510488 let mut cursor = stream. into_trees ( ) ;
@@ -565,24 +543,6 @@ impl server::Group for Rustc<'_, '_> {
565543 }
566544}
567545
568- impl server:: Punct for Rustc < ' _ , ' _ > {
569- fn new ( & mut self , ch : char , spacing : Spacing ) -> Self :: Punct {
570- Punct :: new ( ch, spacing == Spacing :: Joint , server:: Context :: call_site ( self ) )
571- }
572- fn as_char ( & mut self , punct : Self :: Punct ) -> char {
573- punct. ch
574- }
575- fn spacing ( & mut self , punct : Self :: Punct ) -> Spacing {
576- if punct. joint { Spacing :: Joint } else { Spacing :: Alone }
577- }
578- fn span ( & mut self , punct : Self :: Punct ) -> Self :: Span {
579- punct. span
580- }
581- fn with_span ( & mut self , punct : Self :: Punct , span : Self :: Span ) -> Self :: Punct {
582- Punct { span, ..punct }
583- }
584- }
585-
586546impl server:: Ident for Rustc < ' _ , ' _ > {
587547 fn new ( & mut self , string : & str , span : Self :: Span , is_raw : bool ) -> Self :: Ident {
588548 Ident :: new ( self . sess ( ) , Symbol :: intern ( string) , is_raw, span)
0 commit comments