Accept trailing commas in struct patterns
We decided in the 12/10/13 weekly meeting that trailing commas should be accepted pretty much anywhere. They are currently not allowed in struct patterns, and this commit adds support for that. Closes #10392
This commit is contained in:
parent
e86cdaf23d
commit
bfb760c697
@ -2800,8 +2800,13 @@ impl Parser {
|
||||
let mut etc = false;
|
||||
let mut first = true;
|
||||
while *self.token != token::RBRACE {
|
||||
if first { first = false; }
|
||||
else { self.expect(&token::COMMA); }
|
||||
if first {
|
||||
first = false;
|
||||
} else {
|
||||
self.expect(&token::COMMA);
|
||||
// accept trailing commas
|
||||
if *self.token == token::RBRACE { break }
|
||||
}
|
||||
|
||||
etc = *self.token == token::UNDERSCORE || *self.token == token::DOTDOT;
|
||||
if *self.token == token::UNDERSCORE {
|
||||
|
18
src/test/compile-fail/issue-10392-2.rs
Normal file
18
src/test/compile-fail/issue-10392-2.rs
Normal file
@ -0,0 +1,18 @@
|
||||
// Copyright 2012-2013 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.
|
||||
|
||||
struct A { foo: int }
|
||||
|
||||
fn a() -> A { fail!() }
|
||||
|
||||
fn main() {
|
||||
let A { .., } = a(); //~ ERROR: expected `}`
|
||||
}
|
||||
|
17
src/test/compile-fail/issue-10392.rs
Normal file
17
src/test/compile-fail/issue-10392.rs
Normal file
@ -0,0 +1,17 @@
|
||||
// Copyright 2012-2013 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.
|
||||
|
||||
struct A { foo: int }
|
||||
|
||||
fn a() -> A { fail!() }
|
||||
|
||||
fn main() {
|
||||
let A { , } = a(); //~ ERROR: expected ident
|
||||
}
|
37
src/test/run-pass/issue-10392.rs
Normal file
37
src/test/run-pass/issue-10392.rs
Normal file
@ -0,0 +1,37 @@
|
||||
// Copyright 2013 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.
|
||||
|
||||
struct A { foo: int }
|
||||
struct B { a: int, b: int, c: int }
|
||||
|
||||
fn mka() -> A { fail!() }
|
||||
fn mkb() -> B { fail!() }
|
||||
|
||||
fn test() {
|
||||
let A { foo, } = mka();
|
||||
let A {
|
||||
foo,
|
||||
} = mka();
|
||||
|
||||
let B { a, b, c, } = mkb();
|
||||
|
||||
match mka() {
|
||||
A { foo: _foo, } => {}
|
||||
}
|
||||
|
||||
match Some(mka()) {
|
||||
Some(A { foo: _foo, }) => {}
|
||||
None => {}
|
||||
}
|
||||
}
|
||||
|
||||
pub fn main() {
|
||||
if false { test() }
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user