1
Fork 0

auto merge of #10833 : sfackler/rust/mut-pat, r=brson

Previously, if you wanted to bind a field mutably or by ref, you had to
do something like Foo { x: ref mut x }. You can now just do
Foo { ref mut x }.

Closes #6137
This commit is contained in:
bors 2013-12-10 22:51:19 -08:00
commit b8516de48f
3 changed files with 64 additions and 1 deletions

View file

@ -2807,18 +2807,33 @@ impl Parser {
}
let lo1 = self.last_span.lo;
let bind_type = if self.eat_keyword(keywords::Mut) {
BindByValue(MutMutable)
} else if self.eat_keyword(keywords::Ref) {
BindByRef(self.parse_mutability())
} else {
BindByValue(MutImmutable)
};
let fieldname = self.parse_ident();
let hi1 = self.last_span.lo;
let fieldpath = ast_util::ident_to_path(mk_sp(lo1, hi1),
fieldname);
let subpat;
if *self.token == token::COLON {
match bind_type {
BindByRef(..) | BindByValue(MutMutable) =>
self.fatal(format!("unexpected `{}`",
self.this_token_to_str())),
_ => {}
}
self.bump();
subpat = self.parse_pat();
} else {
subpat = @ast::Pat {
id: ast::DUMMY_NODE_ID,
node: PatIdent(BindByValue(MutImmutable), fieldpath, None),
node: PatIdent(bind_type, fieldpath, None),
span: *self.last_span
};
}