1
Fork 0

librustc: Disallow multiple patterns from appearing in a "let" declaration.

You can still initialize multiple variables at once with "let (x, y) = (1, 2)".
This commit is contained in:
Patrick Walton 2013-06-04 21:43:41 -07:00
parent 16086ecff7
commit 8114d0e950
80 changed files with 425 additions and 263 deletions

View file

@ -84,7 +84,7 @@ use parse::obsolete::ObsoleteMode;
use parse::obsolete::{ObsoleteLifetimeNotation, ObsoleteConstManagedPointer};
use parse::obsolete::{ObsoletePurity, ObsoleteStaticMethod};
use parse::obsolete::{ObsoleteConstItem, ObsoleteFixedLengthVectorType};
use parse::obsolete::{ObsoleteNamedExternModule};
use parse::obsolete::{ObsoleteNamedExternModule, ObsoleteMultipleLocalDecl};
use parse::token::{can_begin_expr, is_ident, is_ident_or_path};
use parse::token::{is_plain_ident, INTERPOLATED, keywords, special_idents, token_to_binop};
use parse::token;
@ -2573,11 +2573,12 @@ impl Parser {
fn parse_let(&self) -> @decl {
let is_mutbl = self.eat_keyword(keywords::Mut);
let lo = self.span.lo;
let mut locals = ~[self.parse_local(is_mutbl)];
let mut local = self.parse_local(is_mutbl);
while self.eat(&token::COMMA) {
locals.push(self.parse_local(is_mutbl));
let _ = self.parse_local(is_mutbl);
self.obsolete(*self.span, ObsoleteMultipleLocalDecl);
}
return @spanned(lo, self.last_span.hi, decl_local(locals));
return @spanned(lo, self.last_span.hi, decl_local(local));
}
// parse a structure field
@ -3840,15 +3841,18 @@ impl Parser {
// parse the part of an "enum" decl following the '{'
fn parse_enum_def(&self, _generics: &ast::Generics) -> enum_def {
let mut variants = ~[];
let mut all_nullary = true, have_disr = false;
let mut all_nullary = true;
let mut have_disr = false;
while *self.token != token::RBRACE {
let variant_attrs = self.parse_outer_attributes();
let vlo = self.span.lo;
let vis = self.parse_visibility();
let ident, kind;
let mut args = ~[], disr_expr = None;
let ident;
let kind;
let mut args = ~[];
let mut disr_expr = None;
ident = self.parse_ident();
if self.eat(&token::LBRACE) {
// Parse a struct variant.
@ -4352,7 +4356,8 @@ impl Parser {
}
fn is_view_item(&self) -> bool {
let tok, next_tok;
let tok;
let next_tok;
if !self.is_keyword(keywords::Pub) && !self.is_keyword(keywords::Priv) {
tok = copy *self.token;
next_tok = self.look_ahead(1);