@@ -193,13 +193,7 @@ impl<'a> Parser<'a> {
193193
194194 self . expected_tokens . push ( TokenType :: Operator ) ;
195195 while let Some ( op) = self . check_assoc_op ( ) {
196- // Adjust the span for interpolated LHS to point to the `$lhs` token
197- // and not to what it refers to.
198- let lhs_span = match self . prev_token . kind {
199- TokenKind :: Interpolated ( ..) => self . prev_token . span ,
200- _ => lhs. span ,
201- } ;
202-
196+ let lhs_span = self . interpolated_or_expr_span ( & lhs) ;
203197 let cur_op_span = self . token . span ;
204198 let restrictions = if op. node . is_assign_like ( ) {
205199 self . restrictions & Restrictions :: NO_STRUCT_LITERAL
@@ -626,8 +620,8 @@ impl<'a> Parser<'a> {
626620
627621 fn parse_expr_prefix_common ( & mut self , lo : Span ) -> PResult < ' a , ( Span , P < Expr > ) > {
628622 self . bump ( ) ;
629- let expr = self . parse_expr_prefix ( None ) ;
630- let ( span, expr ) = self . interpolated_or_expr_span ( expr) ? ;
623+ let expr = self . parse_expr_prefix ( None ) ? ;
624+ let span = self . interpolated_or_expr_span ( & expr) ;
631625 Ok ( ( lo. to ( span) , expr) )
632626 }
633627
@@ -702,20 +696,12 @@ impl<'a> Parser<'a> {
702696 self . parse_expr_unary ( lo, UnOp :: Not )
703697 }
704698
705- /// Returns the span of expr, if it was not interpolated or the span of the interpolated token.
706- fn interpolated_or_expr_span (
707- & self ,
708- expr : PResult < ' a , P < Expr > > ,
709- ) -> PResult < ' a , ( Span , P < Expr > ) > {
710- expr. map ( |e| {
711- (
712- match self . prev_token . kind {
713- TokenKind :: Interpolated ( ..) => self . prev_token . span ,
714- _ => e. span ,
715- } ,
716- e,
717- )
718- } )
699+ /// Returns the span of expr if it was not interpolated, or the span of the interpolated token.
700+ fn interpolated_or_expr_span ( & self , expr : & Expr ) -> Span {
701+ match self . prev_token . kind {
702+ TokenKind :: Interpolated ( ..) => self . prev_token . span ,
703+ _ => expr. span ,
704+ }
719705 }
720706
721707 fn parse_assoc_op_cast (
@@ -898,8 +884,8 @@ impl<'a> Parser<'a> {
898884 self . parse_expr_prefix_range ( None )
899885 } else {
900886 self . parse_expr_prefix ( None )
901- } ;
902- let ( hi , expr ) = self . interpolated_or_expr_span ( expr) ? ;
887+ } ? ;
888+ let hi = self . interpolated_or_expr_span ( & expr) ;
903889 let span = lo. to ( hi) ;
904890 if let Some ( lt) = lifetime {
905891 self . error_remove_borrow_lifetime ( span, lt. ident . span ) ;
@@ -930,8 +916,8 @@ impl<'a> Parser<'a> {
930916 fn parse_expr_dot_or_call ( & mut self , attrs : Option < AttrWrapper > ) -> PResult < ' a , P < Expr > > {
931917 let attrs = self . parse_or_use_outer_attributes ( attrs) ?;
932918 self . collect_tokens_for_expr ( attrs, |this, attrs| {
933- let base = this. parse_expr_bottom ( ) ;
934- let ( span, base ) = this. interpolated_or_expr_span ( base) ? ;
919+ let base = this. parse_expr_bottom ( ) ? ;
920+ let span = this. interpolated_or_expr_span ( & base) ;
935921 this. parse_expr_dot_or_call_with ( base, span, attrs)
936922 } )
937923 }
0 commit comments