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
This commit is contained in:
bors 2014-08-12 20:06:30 +00:00
commit 4bb4a43917
2 changed files with 27 additions and 1 deletions

View File

@ -3157,7 +3157,16 @@ pub fn parse_pat(&mut self) -> Gc<Pat> {
}
},
_ => {
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:

View File

@ -0,0 +1,17 @@
// Copyright 2014 The Rust Project Developers. See the COPYRIGHT
// file at the top-level directory of this distribution and at
// http://rust-lang.org/COPYRIGHT.
//
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
// option. This file may not be copied, modified, or distributed
// except according to those terms.
fn main() {
match Some("foo") {
None::<int> => {} //~ ERROR mismatched types
Some(_) => {}
}
}