@@ -254,6 +254,7 @@ pub struct Parser<'a> {
254254 pub cfg : CrateConfig ,
255255 /// the previous token or None (only stashed sometimes).
256256 pub last_token : Option < Box < token:: Token > > ,
257+ last_token_interpolated : bool ,
257258 pub buffer : [ TokenAndSpan ; 4 ] ,
258259 pub buffer_start : isize ,
259260 pub buffer_end : isize ,
@@ -361,6 +362,7 @@ impl<'a> Parser<'a> {
361362 span : span,
362363 last_span : span,
363364 last_token : None ,
365+ last_token_interpolated : false ,
364366 buffer : [
365367 placeholder. clone ( ) ,
366368 placeholder. clone ( ) ,
@@ -542,10 +544,11 @@ impl<'a> Parser<'a> {
542544 }
543545
544546 /// 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 > ) > {
547550 expr. map ( |e| {
548- if is_interpolated {
551+ if self . last_token_interpolated {
549552 ( self . last_span , e)
550553 } else {
551554 ( e. span , e)
@@ -939,12 +942,12 @@ impl<'a> Parser<'a> {
939942 // Stash token for error recovery (sometimes; clone is not necessarily cheap).
940943 self . last_token = if self . token . is_ident ( ) ||
941944 self . token . is_path ( ) ||
942- self . token . is_interpolated ( ) ||
943945 self . token == token:: Comma {
944946 Some ( Box :: new ( self . token . clone ( ) ) )
945947 } else {
946948 None
947949 } ;
950+ self . last_token_interpolated = self . token . is_interpolated ( ) ;
948951 let next = if self . buffer_start == self . buffer_end {
949952 self . reader . real_token ( )
950953 } else {
@@ -2810,9 +2813,10 @@ impl<'a> Parser<'a> {
28102813 self . expected_tokens . push ( TokenType :: Operator ) ;
28112814 while let Some ( op) = AssocOp :: from_token ( & self . token ) {
28122815
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
28162820 } ;
28172821
28182822 let cur_op_span = self . span ;
0 commit comments