@@ -239,12 +239,13 @@ macro_rules! interpolated_or_expr_span {
239
239
( $p: expr, $parse_expr: expr) => {
240
240
{
241
241
let is_interpolated = $p. token. is_interpolated( ) ;
242
- let e = $parse_expr;
243
- if is_interpolated {
244
- ( $p. last_span, e)
245
- } else {
246
- ( e. span, e)
247
- }
242
+ $parse_expr. map( |e| {
243
+ if is_interpolated {
244
+ ( $p. last_span, e)
245
+ } else {
246
+ ( e. span, e)
247
+ }
248
+ } )
248
249
}
249
250
}
250
251
}
@@ -2338,7 +2339,7 @@ impl<'a> Parser<'a> {
2338
2339
-> PResult < ' a , P < Expr > > {
2339
2340
let attrs = try!( self . parse_or_use_outer_attributes ( already_parsed_attrs) ) ;
2340
2341
2341
- let ( span, b) = interpolated_or_expr_span ! ( self , try! ( self . parse_bottom_expr( ) ) ) ;
2342
+ let ( span, b) = try! ( interpolated_or_expr_span ! ( self , self . parse_bottom_expr( ) ) ) ;
2342
2343
self . parse_dot_or_call_expr_with ( b, span. lo , attrs)
2343
2344
}
2344
2345
@@ -2724,30 +2725,30 @@ impl<'a> Parser<'a> {
2724
2725
let ex = match self . token {
2725
2726
token:: Not => {
2726
2727
self . bump ( ) ;
2727
- let ( span, e) = interpolated_or_expr_span ! ( self ,
2728
- try! ( self . parse_prefix_expr( None ) ) ) ;
2728
+ let ( span, e) = try! ( interpolated_or_expr_span ! ( self ,
2729
+ self . parse_prefix_expr( None ) ) ) ;
2729
2730
hi = span. hi ;
2730
2731
self . mk_unary ( UnNot , e)
2731
2732
}
2732
2733
token:: BinOp ( token:: Minus ) => {
2733
2734
self . bump ( ) ;
2734
- let ( span, e) = interpolated_or_expr_span ! ( self ,
2735
- try! ( self . parse_prefix_expr( None ) ) ) ;
2735
+ let ( span, e) = try! ( interpolated_or_expr_span ! ( self ,
2736
+ self . parse_prefix_expr( None ) ) ) ;
2736
2737
hi = span. hi ;
2737
2738
self . mk_unary ( UnNeg , e)
2738
2739
}
2739
2740
token:: BinOp ( token:: Star ) => {
2740
2741
self . bump ( ) ;
2741
- let ( span, e) = interpolated_or_expr_span ! ( self ,
2742
- try! ( self . parse_prefix_expr( None ) ) ) ;
2742
+ let ( span, e) = try! ( interpolated_or_expr_span ! ( self ,
2743
+ self . parse_prefix_expr( None ) ) ) ;
2743
2744
hi = span. hi ;
2744
2745
self . mk_unary ( UnDeref , e)
2745
2746
}
2746
2747
token:: BinOp ( token:: And ) | token:: AndAnd => {
2747
2748
try!( self . expect_and ( ) ) ;
2748
2749
let m = try!( self . parse_mutability ( ) ) ;
2749
- let ( span, e) = interpolated_or_expr_span ! ( self ,
2750
- try! ( self . parse_prefix_expr( None ) ) ) ;
2750
+ let ( span, e) = try! ( interpolated_or_expr_span ! ( self ,
2751
+ self . parse_prefix_expr( None ) ) ) ;
2751
2752
hi = span. hi ;
2752
2753
ExprAddrOf ( m, e)
2753
2754
}
@@ -2766,8 +2767,8 @@ impl<'a> Parser<'a> {
2766
2767
}
2767
2768
token:: Ident ( ..) if self . token . is_keyword ( keywords:: Box ) => {
2768
2769
self . bump ( ) ;
2769
- let ( span, e) = interpolated_or_expr_span ! ( self ,
2770
- try! ( self . parse_prefix_expr( None ) ) ) ;
2770
+ let ( span, e) = try! ( interpolated_or_expr_span ! ( self ,
2771
+ self . parse_prefix_expr( None ) ) ) ;
2771
2772
hi = span. hi ;
2772
2773
ExprBox ( e)
2773
2774
}
0 commit comments