@@ -233,23 +233,6 @@ macro_rules! maybe_whole {
233233 )
234234}
235235
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-
253236fn maybe_append ( mut lhs : Vec < Attribute > , rhs : Option < Vec < Attribute > > )
254237 -> Vec < Attribute > {
255238 if let Some ( ref attrs) = rhs {
@@ -558,6 +541,18 @@ impl<'a> Parser<'a> {
558541 self . commit_stmt ( & [ edible] , & [ ] )
559542 }
560543
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+
561556 pub fn parse_ident ( & mut self ) -> PResult < ' a , ast:: Ident > {
562557 self . check_strict_keywords ( ) ;
563558 self . check_reserved_keywords ( ) ;
@@ -2339,7 +2334,8 @@ impl<'a> Parser<'a> {
23392334 -> PResult < ' a , P < Expr > > {
23402335 let attrs = try!( self . parse_or_use_outer_attributes ( already_parsed_attrs) ) ;
23412336
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) ) ;
23432339 self . parse_dot_or_call_expr_with ( b, span. lo , attrs)
23442340 }
23452341
@@ -2725,30 +2721,30 @@ impl<'a> Parser<'a> {
27252721 let ex = match self . token {
27262722 token:: Not => {
27272723 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 ) ) ;
27302726 hi = span. hi ;
27312727 self . mk_unary ( UnNot , e)
27322728 }
27332729 token:: BinOp ( token:: Minus ) => {
27342730 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 ) ) ;
27372733 hi = span. hi ;
27382734 self . mk_unary ( UnNeg , e)
27392735 }
27402736 token:: BinOp ( token:: Star ) => {
27412737 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 ) ) ;
27442740 hi = span. hi ;
27452741 self . mk_unary ( UnDeref , e)
27462742 }
27472743 token:: BinOp ( token:: And ) | token:: AndAnd => {
27482744 try!( self . expect_and ( ) ) ;
27492745 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 ) ) ;
27522748 hi = span. hi ;
27532749 ExprAddrOf ( m, e)
27542750 }
@@ -2767,8 +2763,8 @@ impl<'a> Parser<'a> {
27672763 }
27682764 token:: Ident ( ..) if self . token . is_keyword ( keywords:: Box ) => {
27692765 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 ) ) ;
27722768 hi = span. hi ;
27732769 ExprBox ( e)
27742770 }
0 commit comments