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:
commit
b8516de48f
3 changed files with 64 additions and 1 deletions
|
@ -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
|
||||
};
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue