@@ -254,6 +254,7 @@ pub struct Parser<'a> {
254
254
pub cfg : CrateConfig ,
255
255
/// the previous token or None (only stashed sometimes).
256
256
pub last_token : Option < Box < token:: Token > > ,
257
+ last_token_interpolated : bool ,
257
258
pub buffer : [ TokenAndSpan ; 4 ] ,
258
259
pub buffer_start : isize ,
259
260
pub buffer_end : isize ,
@@ -361,6 +362,7 @@ impl<'a> Parser<'a> {
361
362
span : span,
362
363
last_span : span,
363
364
last_token : None ,
365
+ last_token_interpolated : false ,
364
366
buffer : [
365
367
placeholder. clone ( ) ,
366
368
placeholder. clone ( ) ,
@@ -542,10 +544,11 @@ impl<'a> Parser<'a> {
542
544
}
543
545
544
546
/// returns the span of expr, if it was not interpolated or the span of the interpolated token
545
- fn interpolated_or_expr_span ( & self , expr : PResult < ' a , P < Expr > > ) -> PResult < ' a , ( Span , P < Expr > ) > {
546
- let is_interpolated = self . token . is_interpolated ( ) ;
547
+ fn interpolated_or_expr_span ( & self ,
548
+ expr : PResult < ' a , P < Expr > > )
549
+ -> PResult < ' a , ( Span , P < Expr > ) > {
547
550
expr. map ( |e| {
548
- if is_interpolated {
551
+ if self . last_token_interpolated {
549
552
( self . last_span , e)
550
553
} else {
551
554
( e. span , e)
@@ -939,12 +942,12 @@ impl<'a> Parser<'a> {
939
942
// Stash token for error recovery (sometimes; clone is not necessarily cheap).
940
943
self . last_token = if self . token . is_ident ( ) ||
941
944
self . token . is_path ( ) ||
942
- self . token . is_interpolated ( ) ||
943
945
self . token == token:: Comma {
944
946
Some ( Box :: new ( self . token . clone ( ) ) )
945
947
} else {
946
948
None
947
949
} ;
950
+ self . last_token_interpolated = self . token . is_interpolated ( ) ;
948
951
let next = if self . buffer_start == self . buffer_end {
949
952
self . reader . real_token ( )
950
953
} else {
@@ -2810,9 +2813,10 @@ impl<'a> Parser<'a> {
2810
2813
self . expected_tokens . push ( TokenType :: Operator ) ;
2811
2814
while let Some ( op) = AssocOp :: from_token ( & self . token ) {
2812
2815
2813
- let lhs_span = match self . last_token {
2814
- Some ( ref lt) if lt. is_interpolated ( ) => self . last_span ,
2815
- _ => lhs. span
2816
+ let lhs_span = if self . last_token_interpolated {
2817
+ self . last_span
2818
+ } else {
2819
+ lhs. span
2816
2820
} ;
2817
2821
2818
2822
let cur_op_span = self . span ;
0 commit comments