about summary refs log tree commit diff
path: root/src/libsyntax/parse
diff options
context:
space:
mode:
authorFlorian Hahn <flo@fhahn.com>2016-01-27 10:47:33 +0100
committerFlorian Hahn <flo@fhahn.com>2016-01-27 10:47:33 +0100
commit47bfd8c93c71730628af48818dd04ed62cffee74 (patch)
treee9bd48f6a095f82845df7897aaf01b0f5ef32694 /src/libsyntax/parse
parent9d8c64b9966a2e6fe6b022491eb3fb7bb81ec292 (diff)
downloadrust-47bfd8c93c71730628af48818dd04ed62cffee74.tar.gz
rust-47bfd8c93c71730628af48818dd04ed62cffee74.zip
Turn interpolated_or_expr_span into a function
Diffstat (limited to 'src/libsyntax/parse')
-rw-r--r--src/libsyntax/parse/parser.rs52
1 files changed, 24 insertions, 28 deletions
diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs
index 4c818da6336..24a71e019f0 100644
--- a/src/libsyntax/parse/parser.rs
+++ b/src/libsyntax/parse/parser.rs
@@ -233,23 +233,6 @@ macro_rules! maybe_whole {
     )
 }
 
-/// Uses $parse_expr to parse an expression and returns the span of the interpolated
-/// token or the span of the parsed expression, if it was not interpolated
-macro_rules! interpolated_or_expr_span {
-    ($p:expr, $parse_expr:expr) => {
-        {
-            let is_interpolated = $p.token.is_interpolated();
-            $parse_expr.map(|e| {
-                if is_interpolated {
-                    ($p.last_span, e)
-                } else {
-                    (e.span, e)
-                }
-            })
-        }
-    }
-}
-
 fn maybe_append(mut lhs: Vec<Attribute>, rhs: Option<Vec<Attribute>>)
                 -> Vec<Attribute> {
     if let Some(ref attrs) = rhs {
@@ -558,6 +541,18 @@ impl<'a> Parser<'a> {
         self.commit_stmt(&[edible], &[])
     }
 
+    /// returns the span of expr, if it was not interpolated or the span of the interpolated token
+    fn interpolated_or_expr_span(&self, expr: PResult<'a, P<Expr>>) -> PResult<'a, (Span, P<Expr>)> {
+        let is_interpolated = self.token.is_interpolated();
+        expr.map(|e| {
+            if is_interpolated {
+                (self.last_span, e)
+            } else {
+                (e.span, e)
+            }
+        })
+    }
+
     pub fn parse_ident(&mut self) -> PResult<'a, ast::Ident> {
         self.check_strict_keywords();
         self.check_reserved_keywords();
@@ -2339,7 +2334,8 @@ impl<'a> Parser<'a> {
                                   -> PResult<'a, P<Expr>> {
         let attrs = try!(self.parse_or_use_outer_attributes(already_parsed_attrs));
 
-        let (span, b) = try!(interpolated_or_expr_span!(self, self.parse_bottom_expr()));
+        let b = self.parse_bottom_expr();
+        let (span, b) = try!(self.interpolated_or_expr_span(b));
         self.parse_dot_or_call_expr_with(b, span.lo, attrs)
     }
 
@@ -2725,30 +2721,30 @@ impl<'a> Parser<'a> {
         let ex = match self.token {
             token::Not => {
                 self.bump();
-                let (span, e) = try!(interpolated_or_expr_span!(self,
-                                                           self.parse_prefix_expr(None)));
+                let e = self.parse_prefix_expr(None);
+                let (span, e) = try!(self.interpolated_or_expr_span(e));
                 hi = span.hi;
                 self.mk_unary(UnNot, e)
             }
             token::BinOp(token::Minus) => {
                 self.bump();
-                let (span, e) = try!(interpolated_or_expr_span!(self,
-                                                           self.parse_prefix_expr(None)));
+                let e = self.parse_prefix_expr(None);
+                let (span, e) = try!(self.interpolated_or_expr_span(e));
                 hi = span.hi;
                 self.mk_unary(UnNeg, e)
             }
             token::BinOp(token::Star) => {
                 self.bump();
-                let (span, e) = try!(interpolated_or_expr_span!(self,
-                                                           self.parse_prefix_expr(None)));
+                let e = self.parse_prefix_expr(None);
+                let (span, e) = try!(self.interpolated_or_expr_span(e));
                 hi = span.hi;
                 self.mk_unary(UnDeref, e)
             }
             token::BinOp(token::And) | token::AndAnd => {
                 try!(self.expect_and());
                 let m = try!(self.parse_mutability());
-                let (span, e) = try!(interpolated_or_expr_span!(self,
-                                                           self.parse_prefix_expr(None)));
+                let e = self.parse_prefix_expr(None);
+                let (span, e) = try!(self.interpolated_or_expr_span(e));
                 hi = span.hi;
                 ExprAddrOf(m, e)
             }
@@ -2767,8 +2763,8 @@ impl<'a> Parser<'a> {
             }
             token::Ident(..) if self.token.is_keyword(keywords::Box) => {
                 self.bump();
-                let (span, e) = try!(interpolated_or_expr_span!(self,
-                                                           self.parse_prefix_expr(None)));
+                let e = self.parse_prefix_expr(None);
+                let (span, e) = try!(self.interpolated_or_expr_span(e));
                 hi = span.hi;
                 ExprBox(e)
             }