about summary refs log tree commit diff
path: root/src/libsyntax/parse/parser
diff options
context:
space:
mode:
authorMazdak Farrokhzad <twingoow@gmail.com>2019-08-12 07:37:08 +0200
committerMazdak Farrokhzad <twingoow@gmail.com>2019-08-12 09:28:49 +0200
commit90793c0f126a9d5a0ffab297e9fef8bbbed6ae70 (patch)
tree2da4de40c352de42efc04c4ac3a4b2f55b74c080 /src/libsyntax/parse/parser
parenta4af9d1ac25113362898ca598556db5eaa3d8f31 (diff)
downloadrust-90793c0f126a9d5a0ffab297e9fef8bbbed6ae70.tar.gz
rust-90793c0f126a9d5a0ffab297e9fef8bbbed6ae70.zip
extract parse_pat_deref
Diffstat (limited to 'src/libsyntax/parse/parser')
-rw-r--r--src/libsyntax/parse/parser/pat.rs28
1 files changed, 16 insertions, 12 deletions
diff --git a/src/libsyntax/parse/parser/pat.rs b/src/libsyntax/parse/parser/pat.rs
index 21b38751831..95678f9f7a1 100644
--- a/src/libsyntax/parse/parser/pat.rs
+++ b/src/libsyntax/parse/parser/pat.rs
@@ -109,18 +109,7 @@ impl<'a> Parser<'a> {
 
         let lo = self.token.span;
         let pat = match self.token.kind {
-            token::BinOp(token::And) | token::AndAnd => {
-                // Parse &pat / &mut pat
-                self.expect_and()?;
-                let mutbl = self.parse_mutability();
-                if let token::Lifetime(name) = self.token.kind {
-                    let mut err = self.fatal(&format!("unexpected lifetime `{}` in pattern", name));
-                    err.span_label(self.token.span, "unexpected lifetime");
-                    return Err(err);
-                }
-                let subpat = self.parse_pat_with_range_pat(false, expected)?;
-                PatKind::Ref(subpat, mutbl)
-            }
+            token::BinOp(token::And) | token::AndAnd => self.parse_pat_deref(expected)?,
             token::OpenDelim(token::Paren) => {
                 // Parse a tuple or parenthesis pattern.
                 let (fields, trailing_comma) = self.parse_paren_comma_seq(|p| p.parse_pat(None))?;
@@ -332,6 +321,21 @@ impl<'a> Parser<'a> {
         Ok(pat)
     }
 
+    /// Parse `&pat` / `&mut pat`.
+    fn parse_pat_deref(&mut self, expected: Option<&'static str>) -> PResult<'a, PatKind> {
+        self.expect_and()?;
+        let mutbl = self.parse_mutability();
+
+        if let token::Lifetime(name) = self.token.kind {
+            let mut err = self.fatal(&format!("unexpected lifetime `{}` in pattern", name));
+            err.span_label(self.token.span, "unexpected lifetime");
+            return Err(err);
+        }
+
+        let subpat = self.parse_pat_with_range_pat(false, expected)?;
+        Ok(PatKind::Ref(subpat, mutbl))
+    }
+
     // Helper function to decide whether to parse as ident binding
     // or to try to do something more complex like range patterns.
     fn parse_as_ident(&mut self) -> bool {