about summary refs log tree commit diff
path: root/src/libsyntax/parse
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2014-08-12 20:06:30 +0000
committerbors <bors@rust-lang.org>2014-08-12 20:06:30 +0000
commit4bb4a43917bf702fb2c6a614786aa1abe6c1014c (patch)
treea2d4699c245af512a0e647afefeb0209e846321f /src/libsyntax/parse
parente2273d945640442224a09e532865e4a58257a851 (diff)
parent857ba988f189c9a2ebc7d30b1b7b6ec018908aa6 (diff)
downloadrust-4bb4a43917bf702fb2c6a614786aa1abe6c1014c.tar.gz
rust-4bb4a43917bf702fb2c6a614786aa1abe6c1014c.zip
auto merge of #16454 : pcwalton/rust/types-in-path-patterns, r=brson
patterns.

This breaks code like:

    fn main() {
        match Some("foo") {
            None::<int> => {}
            Some(_) => {}
        }
    }

Change this code to not contain a type error. For example:

    fn main() {
        match Some("foo") {
            None::<&str> => {}
            Some(_) => {}
        }
    }

Closes #16353.

[breaking-change]

r? @huonw
Diffstat (limited to 'src/libsyntax/parse')
-rw-r--r--src/libsyntax/parse/parser.rs11
1 files changed, 10 insertions, 1 deletions
diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs
index 7ea000d3aac..08d96f5b008 100644
--- a/src/libsyntax/parse/parser.rs
+++ b/src/libsyntax/parse/parser.rs
@@ -3157,7 +3157,16 @@ impl<'a> Parser<'a> {
                             }
                           },
                           _ => {
-                              if !enum_path.global && enum_path.segments.len() == 1 {
+                              if !enum_path.global &&
+                                    enum_path.segments.len() == 1 &&
+                                    enum_path.segments
+                                             .get(0)
+                                             .lifetimes
+                                             .len() == 0 &&
+                                    enum_path.segments
+                                             .get(0)
+                                             .types
+                                             .len() == 0 {
                                   // it could still be either an enum
                                   // or an identifier pattern, resolve
                                   // will sort it out: