about summary refs log tree commit diff
path: root/src/librustc/hir
diff options
context:
space:
mode:
authorkennytm <kennytm@gmail.com>2018-03-03 06:05:54 +0800
committerkennytm <kennytm@gmail.com>2018-03-15 16:58:03 +0800
commit6399d16cfde37b06f6b82cdafa623e36385d7252 (patch)
tree084c6934333110a4d2d197ac77a0851a68fed3c1 /src/librustc/hir
parenta4d80336c96d7f47b0ef025fa141a9c96abcafbd (diff)
downloadrust-6399d16cfde37b06f6b82cdafa623e36385d7252.tar.gz
rust-6399d16cfde37b06f6b82cdafa623e36385d7252.zip
Disallow &a..=b and box a..=b in pattern.
They are disallowed because they have different precedence than
expressions. I assume parenthesis in pattern will be soon stabilized and
thus write that as suggestion directly.
Diffstat (limited to 'src/librustc/hir')
-rw-r--r--src/librustc/hir/print.rs20
1 files changed, 20 insertions, 0 deletions
diff --git a/src/librustc/hir/print.rs b/src/librustc/hir/print.rs
index d91aa3a3851..9e755f366a7 100644
--- a/src/librustc/hir/print.rs
+++ b/src/librustc/hir/print.rs
@@ -1810,15 +1810,35 @@ impl<'a> State<'a> {
                 self.pclose()?;
             }
             PatKind::Box(ref inner) => {
+                let is_range_inner = match inner.node {
+                    PatKind::Range(..) => true,
+                    _ => false,
+                };
                 self.s.word("box ")?;
+                if is_range_inner {
+                    self.popen()?;
+                }
                 self.print_pat(&inner)?;
+                if is_range_inner {
+                    self.pclose()?;
+                }
             }
             PatKind::Ref(ref inner, mutbl) => {
+                let is_range_inner = match inner.node {
+                    PatKind::Range(..) => true,
+                    _ => false,
+                };
                 self.s.word("&")?;
                 if mutbl == hir::MutMutable {
                     self.s.word("mut ")?;
                 }
+                if is_range_inner {
+                    self.popen()?;
+                }
                 self.print_pat(&inner)?;
+                if is_range_inner {
+                    self.pclose()?;
+                }
             }
             PatKind::Lit(ref e) => self.print_expr(&e)?,
             PatKind::Range(ref begin, ref end, ref end_kind) => {