]> git.lizzy.rs Git - rust.git/commitdiff
extract parse_deref_expr
authorMazdak Farrokhzad <twingoow@gmail.com>
Sat, 7 Dec 2019 02:00:06 +0000 (03:00 +0100)
committerMazdak Farrokhzad <twingoow@gmail.com>
Mon, 23 Dec 2019 12:50:56 +0000 (13:50 +0100)
src/librustc_parse/parser/expr.rs

index 982b74adfb0f31db53f7db331ff27b37bb2011dc..45d638849425c7d306895a956156653d300c90cd 100644 (file)
@@ -475,12 +475,7 @@ fn parse_prefix_expr(&mut self, already_parsed_attrs: Option<AttrVec>) -> PResul
                 let (span, e) = self.interpolated_or_expr_span(e)?;
                 (lo.to(span), self.mk_unary(UnOp::Neg, e))
             }
-            token::BinOp(token::Star) => {
-                self.bump();
-                let e = self.parse_prefix_expr(None);
-                let (span, e) = self.interpolated_or_expr_span(e)?;
-                (lo.to(span), self.mk_unary(UnOp::Deref, e))
-            }
+            token::BinOp(token::Star) => self.parse_deref_expr(lo)?,
             token::BinOp(token::And) | token::AndAnd => self.parse_borrow_expr(lo)?,
             token::Ident(..) if self.token.is_keyword(kw::Box) => self.parse_box_expr(lo)?,
             token::Ident(..) if self.is_mistaken_not_ident_negation() => {
@@ -491,14 +486,22 @@ fn parse_prefix_expr(&mut self, already_parsed_attrs: Option<AttrVec>) -> PResul
         return Ok(self.mk_expr(lo.to(hi), ex, attrs));
     }
 
+    /// Parse `*expr`.
+    fn parse_deref_expr(&mut self, lo: Span) -> PResult<'a, (Span, ExprKind)> {
+        self.bump(); // `*`
+        let expr = self.parse_prefix_expr(None);
+        let (span, expr) = self.interpolated_or_expr_span(expr)?;
+        Ok((lo.to(span), self.mk_unary(UnOp::Deref, expr)))
+    }
+
     /// Parse `box expr`.
     fn parse_box_expr(&mut self, lo: Span) -> PResult<'a, (Span, ExprKind)> {
-        self.bump();
-        let e = self.parse_prefix_expr(None);
-        let (span, e) = self.interpolated_or_expr_span(e)?;
+        self.bump(); // `box`
+        let expr = self.parse_prefix_expr(None);
+        let (span, expr) = self.interpolated_or_expr_span(expr)?;
         let span = lo.to(span);
         self.sess.gated_spans.gate(sym::box_syntax, span);
-        Ok((span, ExprKind::Box(e)))
+        Ok((span, ExprKind::Box(expr)))
     }
 
     fn is_mistaken_not_ident_negation(&self) -> bool {