@@ -93,18 +93,16 @@ pub struct Parser<'a> {
9393 /// Use span from this token if you need an isolated span.
9494 pub token : Token ,
9595 /// The current non-normalized token if it's different from `token`.
96- /// Preferable use is through the `unnormalized_token()` getter.
9796 /// Use span from this token if you need to concatenate it with some neighbouring spans.
98- pub unnormalized_token : Option < Token > ,
97+ unnormalized_token : Token ,
9998 /// The previous normalized token.
10099 /// Use span from this token if you need an isolated span.
101100 prev_token : Token ,
102101 /// The previous non-normalized token if it's different from `prev_token`.
103- /// Preferable use is through the `unnormalized_prev_token()` getter.
104102 /// Use span from this token if you need to concatenate it with some neighbouring spans.
105- unnormalized_prev_token : Option < Token > ,
106- /// Equivalent to `unnormalized_prev_token() .span`.
107- /// FIXME: Remove in favor of `(unnormalized_)prev_token() .span`.
103+ unnormalized_prev_token : Token ,
104+ /// Equivalent to `unnormalized_prev_token.span`.
105+ /// FIXME: Remove in favor of `(unnormalized_)prev_token.span`.
108106 pub prev_span : Span ,
109107 restrictions : Restrictions ,
110108 /// Used to determine the path to externally loaded source files.
@@ -378,9 +376,9 @@ impl<'a> Parser<'a> {
378376 let mut parser = Parser {
379377 sess,
380378 token : Token :: dummy ( ) ,
381- unnormalized_token : None ,
379+ unnormalized_token : Token :: dummy ( ) ,
382380 prev_token : Token :: dummy ( ) ,
383- unnormalized_prev_token : None ,
381+ unnormalized_prev_token : Token :: dummy ( ) ,
384382 prev_span : DUMMY_SP ,
385383 restrictions : Restrictions :: empty ( ) ,
386384 recurse_into_file_modules,
@@ -422,14 +420,6 @@ impl<'a> Parser<'a> {
422420 parser
423421 }
424422
425- fn unnormalized_token ( & self ) -> & Token {
426- self . unnormalized_token . as_ref ( ) . unwrap_or ( & self . token )
427- }
428-
429- fn unnormalized_prev_token ( & self ) -> & Token {
430- self . unnormalized_prev_token . as_ref ( ) . unwrap_or ( & self . prev_token )
431- }
432-
433423 fn next_tok ( & mut self , fallback_span : Span ) -> Token {
434424 let mut next = if self . desugar_doc_comments {
435425 self . token_cursor . next_desugared ( )
@@ -899,18 +889,17 @@ impl<'a> Parser<'a> {
899889 // Interpolated identifier (`$i: ident`) and lifetime (`$l: lifetime`)
900890 // tokens are replaced with usual identifier and lifetime tokens,
901891 // so the former are never encountered during normal parsing.
902- fn normalize_token ( token : & Token ) -> Option < Token > {
903- match & token. kind {
892+ crate fn set_token ( & mut self , token : Token ) {
893+ self . unnormalized_token = token;
894+ self . token = match & self . unnormalized_token . kind {
904895 token:: Interpolated ( nt) => match * * nt {
905896 token:: NtIdent ( ident, is_raw) => {
906- Some ( Token :: new ( token:: Ident ( ident. name , is_raw) , ident. span ) )
897+ Token :: new ( token:: Ident ( ident. name , is_raw) , ident. span )
907898 }
908- token:: NtLifetime ( ident) => {
909- Some ( Token :: new ( token:: Lifetime ( ident. name ) , ident. span ) )
910- }
911- _ => None ,
899+ token:: NtLifetime ( ident) => Token :: new ( token:: Lifetime ( ident. name ) , ident. span ) ,
900+ _ => self . unnormalized_token . clone ( ) ,
912901 } ,
913- _ => None ,
902+ _ => self . unnormalized_token . clone ( ) ,
914903 }
915904 }
916905
@@ -925,13 +914,11 @@ impl<'a> Parser<'a> {
925914 // Update the current and previous tokens.
926915 self . prev_token = self . token . take ( ) ;
927916 self . unnormalized_prev_token = self . unnormalized_token . take ( ) ;
928- self . token = self . next_tok ( self . unnormalized_prev_token ( ) . span ) ;
929- if let Some ( normalized_token) = Self :: normalize_token ( & self . token ) {
930- self . unnormalized_token = Some ( mem:: replace ( & mut self . token , normalized_token) ) ;
931- }
917+ let next_token = self . next_tok ( self . unnormalized_prev_token . span ) ;
918+ self . set_token ( next_token) ;
932919
933920 // Update fields derived from the previous token.
934- self . prev_span = self . unnormalized_prev_token ( ) . span ;
921+ self . prev_span = self . unnormalized_prev_token . span ;
935922
936923 self . expected_tokens . clear ( ) ;
937924 }
@@ -945,13 +932,10 @@ impl<'a> Parser<'a> {
945932 // Update the current and previous tokens.
946933 self . prev_token = self . token . take ( ) ;
947934 self . unnormalized_prev_token = self . unnormalized_token . take ( ) ;
948- self . token = Token :: new ( next, span) ;
949- if let Some ( normalized_token) = Self :: normalize_token ( & self . token ) {
950- self . unnormalized_token = Some ( mem:: replace ( & mut self . token , normalized_token) ) ;
951- }
935+ self . set_token ( Token :: new ( next, span) ) ;
952936
953937 // Update fields derived from the previous token.
954- self . prev_span = self . unnormalized_prev_token ( ) . span . with_hi ( span. lo ( ) ) ;
938+ self . prev_span = self . unnormalized_prev_token . span . with_hi ( span. lo ( ) ) ;
955939
956940 self . expected_tokens . clear ( ) ;
957941 }
@@ -1096,8 +1080,7 @@ impl<'a> Parser<'a> {
10961080 & mut self . token_cursor . frame ,
10971081 self . token_cursor . stack . pop ( ) . unwrap ( ) ,
10981082 ) ;
1099- self . token = Token :: new ( TokenKind :: CloseDelim ( frame. delim ) , frame. span . close ) ;
1100- self . unnormalized_token = None ;
1083+ self . set_token ( Token :: new ( TokenKind :: CloseDelim ( frame. delim ) , frame. span . close ) ) ;
11011084 self . bump ( ) ;
11021085 TokenTree :: Delimited ( frame. span , frame. delim , frame. tree_cursor . stream . into ( ) )
11031086 }
0 commit comments