@@ -239,12 +239,13 @@ macro_rules! interpolated_or_expr_span {
239239 ( $p: expr, $parse_expr: expr) => {
240240 {
241241 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+ } )
248249 }
249250 }
250251}
@@ -2338,7 +2339,7 @@ impl<'a> Parser<'a> {
23382339 -> PResult < ' a , P < Expr > > {
23392340 let attrs = try!( self . parse_or_use_outer_attributes ( already_parsed_attrs) ) ;
23402341
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( ) ) ) ;
23422343 self . parse_dot_or_call_expr_with ( b, span. lo , attrs)
23432344 }
23442345
@@ -2724,30 +2725,30 @@ impl<'a> Parser<'a> {
27242725 let ex = match self . token {
27252726 token:: Not => {
27262727 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 ) ) ) ;
27292730 hi = span. hi ;
27302731 self . mk_unary ( UnNot , e)
27312732 }
27322733 token:: BinOp ( token:: Minus ) => {
27332734 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 ) ) ) ;
27362737 hi = span. hi ;
27372738 self . mk_unary ( UnNeg , e)
27382739 }
27392740 token:: BinOp ( token:: Star ) => {
27402741 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 ) ) ) ;
27432744 hi = span. hi ;
27442745 self . mk_unary ( UnDeref , e)
27452746 }
27462747 token:: BinOp ( token:: And ) | token:: AndAnd => {
27472748 try!( self . expect_and ( ) ) ;
27482749 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 ) ) ) ;
27512752 hi = span. hi ;
27522753 ExprAddrOf ( m, e)
27532754 }
@@ -2766,8 +2767,8 @@ impl<'a> Parser<'a> {
27662767 }
27672768 token:: Ident ( ..) if self . token . is_keyword ( keywords:: Box ) => {
27682769 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 ) ) ) ;
27712772 hi = span. hi ;
27722773 ExprBox ( e)
27732774 }
0 commit comments