@@ -193,13 +193,7 @@ impl<'a> Parser<'a> {
193
193
194
194
self . expected_tokens . push ( TokenType :: Operator ) ;
195
195
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) ;
203
197
let cur_op_span = self . token . span ;
204
198
let restrictions = if op. node . is_assign_like ( ) {
205
199
self . restrictions & Restrictions :: NO_STRUCT_LITERAL
@@ -626,8 +620,8 @@ impl<'a> Parser<'a> {
626
620
627
621
fn parse_expr_prefix_common ( & mut self , lo : Span ) -> PResult < ' a , ( Span , P < Expr > ) > {
628
622
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) ;
631
625
Ok ( ( lo. to ( span) , expr) )
632
626
}
633
627
@@ -702,20 +696,12 @@ impl<'a> Parser<'a> {
702
696
self . parse_expr_unary ( lo, UnOp :: Not )
703
697
}
704
698
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
+ }
719
705
}
720
706
721
707
fn parse_assoc_op_cast (
@@ -898,8 +884,8 @@ impl<'a> Parser<'a> {
898
884
self . parse_expr_prefix_range ( None )
899
885
} else {
900
886
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) ;
903
889
let span = lo. to ( hi) ;
904
890
if let Some ( lt) = lifetime {
905
891
self . error_remove_borrow_lifetime ( span, lt. ident . span ) ;
@@ -930,8 +916,8 @@ impl<'a> Parser<'a> {
930
916
fn parse_expr_dot_or_call ( & mut self , attrs : Option < AttrWrapper > ) -> PResult < ' a , P < Expr > > {
931
917
let attrs = self . parse_or_use_outer_attributes ( attrs) ?;
932
918
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) ;
935
921
this. parse_expr_dot_or_call_with ( base, span, attrs)
936
922
} )
937
923
}
0 commit comments