@@ -233,23 +233,6 @@ macro_rules! maybe_whole {
233
233
)
234
234
}
235
235
236
- /// Uses $parse_expr to parse an expression and returns the span of the interpolated
237
- /// token or the span of the parsed expression, if it was not interpolated
238
- macro_rules! interpolated_or_expr_span {
239
- ( $p: expr, $parse_expr: expr) => {
240
- {
241
- let is_interpolated = $p. token. is_interpolated( ) ;
242
- $parse_expr. map( |e| {
243
- if is_interpolated {
244
- ( $p. last_span, e)
245
- } else {
246
- ( e. span, e)
247
- }
248
- } )
249
- }
250
- }
251
- }
252
-
253
236
fn maybe_append ( mut lhs : Vec < Attribute > , rhs : Option < Vec < Attribute > > )
254
237
-> Vec < Attribute > {
255
238
if let Some ( ref attrs) = rhs {
@@ -558,6 +541,18 @@ impl<'a> Parser<'a> {
558
541
self . commit_stmt ( & [ edible] , & [ ] )
559
542
}
560
543
544
+ /// 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
+ expr. map ( |e| {
548
+ if is_interpolated {
549
+ ( self . last_span , e)
550
+ } else {
551
+ ( e. span , e)
552
+ }
553
+ } )
554
+ }
555
+
561
556
pub fn parse_ident ( & mut self ) -> PResult < ' a , ast:: Ident > {
562
557
self . check_strict_keywords ( ) ;
563
558
self . check_reserved_keywords ( ) ;
@@ -2339,7 +2334,8 @@ impl<'a> Parser<'a> {
2339
2334
-> PResult < ' a , P < Expr > > {
2340
2335
let attrs = try!( self . parse_or_use_outer_attributes ( already_parsed_attrs) ) ;
2341
2336
2342
- let ( span, b) = try!( interpolated_or_expr_span ! ( self , self . parse_bottom_expr( ) ) ) ;
2337
+ let b = self . parse_bottom_expr ( ) ;
2338
+ let ( span, b) = try!( self . interpolated_or_expr_span ( b) ) ;
2343
2339
self . parse_dot_or_call_expr_with ( b, span. lo , attrs)
2344
2340
}
2345
2341
@@ -2725,30 +2721,30 @@ impl<'a> Parser<'a> {
2725
2721
let ex = match self . token {
2726
2722
token:: Not => {
2727
2723
self . bump ( ) ;
2728
- let ( span , e ) = try! ( interpolated_or_expr_span ! ( self ,
2729
- self . parse_prefix_expr ( None ) ) ) ;
2724
+ let e = self . parse_prefix_expr ( None ) ;
2725
+ let ( span , e ) = try! ( self . interpolated_or_expr_span ( e ) ) ;
2730
2726
hi = span. hi ;
2731
2727
self . mk_unary ( UnNot , e)
2732
2728
}
2733
2729
token:: BinOp ( token:: Minus ) => {
2734
2730
self . bump ( ) ;
2735
- let ( span , e ) = try! ( interpolated_or_expr_span ! ( self ,
2736
- self . parse_prefix_expr ( None ) ) ) ;
2731
+ let e = self . parse_prefix_expr ( None ) ;
2732
+ let ( span , e ) = try! ( self . interpolated_or_expr_span ( e ) ) ;
2737
2733
hi = span. hi ;
2738
2734
self . mk_unary ( UnNeg , e)
2739
2735
}
2740
2736
token:: BinOp ( token:: Star ) => {
2741
2737
self . bump ( ) ;
2742
- let ( span , e ) = try! ( interpolated_or_expr_span ! ( self ,
2743
- self . parse_prefix_expr ( None ) ) ) ;
2738
+ let e = self . parse_prefix_expr ( None ) ;
2739
+ let ( span , e ) = try! ( self . interpolated_or_expr_span ( e ) ) ;
2744
2740
hi = span. hi ;
2745
2741
self . mk_unary ( UnDeref , e)
2746
2742
}
2747
2743
token:: BinOp ( token:: And ) | token:: AndAnd => {
2748
2744
try!( self . expect_and ( ) ) ;
2749
2745
let m = try!( self . parse_mutability ( ) ) ;
2750
- let ( span , e ) = try! ( interpolated_or_expr_span ! ( self ,
2751
- self . parse_prefix_expr ( None ) ) ) ;
2746
+ let e = self . parse_prefix_expr ( None ) ;
2747
+ let ( span , e ) = try! ( self . interpolated_or_expr_span ( e ) ) ;
2752
2748
hi = span. hi ;
2753
2749
ExprAddrOf ( m, e)
2754
2750
}
@@ -2767,8 +2763,8 @@ impl<'a> Parser<'a> {
2767
2763
}
2768
2764
token:: Ident ( ..) if self . token . is_keyword ( keywords:: Box ) => {
2769
2765
self . bump ( ) ;
2770
- let ( span , e ) = try! ( interpolated_or_expr_span ! ( self ,
2771
- self . parse_prefix_expr ( None ) ) ) ;
2766
+ let e = self . parse_prefix_expr ( None ) ;
2767
+ let ( span , e ) = try! ( self . interpolated_or_expr_span ( e ) ) ;
2772
2768
hi = span. hi ;
2773
2769
ExprBox ( e)
2774
2770
}
0 commit comments