Always eat up mut when parsing general args, fixes #7483
This commit is contained in:
parent
62bb843e32
commit
eaaf3f67ab
2 changed files with 19 additions and 2 deletions
|
@ -1074,10 +1074,9 @@ impl Parser {
|
||||||
// This version of parse arg doesn't necessarily require
|
// This version of parse arg doesn't necessarily require
|
||||||
// identifier names.
|
// identifier names.
|
||||||
pub fn parse_arg_general(&self, require_name: bool) -> arg {
|
pub fn parse_arg_general(&self, require_name: bool) -> arg {
|
||||||
let mut is_mutbl = false;
|
let mut is_mutbl = self.eat_keyword(keywords::Mut);
|
||||||
let pat = if require_name || self.is_named_argument() {
|
let pat = if require_name || self.is_named_argument() {
|
||||||
self.parse_arg_mode();
|
self.parse_arg_mode();
|
||||||
is_mutbl = self.eat_keyword(keywords::Mut);
|
|
||||||
let pat = self.parse_pat();
|
let pat = self.parse_pat();
|
||||||
|
|
||||||
if is_mutbl && !ast_util::pat_is_ident(pat) {
|
if is_mutbl && !ast_util::pat_is_ident(pat) {
|
||||||
|
@ -1087,6 +1086,7 @@ impl Parser {
|
||||||
self.expect(&token::COLON);
|
self.expect(&token::COLON);
|
||||||
pat
|
pat
|
||||||
} else {
|
} else {
|
||||||
|
is_mutbl = false;
|
||||||
ast_util::ident_to_pat(self.get_id(),
|
ast_util::ident_to_pat(self.get_id(),
|
||||||
*self.last_span,
|
*self.last_span,
|
||||||
special_idents::invalid)
|
special_idents::invalid)
|
||||||
|
|
17
src/test/run-pass/traits-default-method-mut.rs
Normal file
17
src/test/run-pass/traits-default-method-mut.rs
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
// Copyright 2012 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.
|
||||||
|
|
||||||
|
#[allow(default_methods)];
|
||||||
|
|
||||||
|
trait Foo {
|
||||||
|
fn foo(mut v: int) { v = 1; }
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {}
|
Loading…
Add table
Add a link
Reference in a new issue