diff options
| author | Felix S. Klock II <pnkfelix@pnkfx.org> | 2013-09-03 01:58:12 +0200 |
|---|---|---|
| committer | Felix S. Klock II <pnkfelix@pnkfx.org> | 2013-09-03 01:58:12 +0200 |
| commit | 4fa28a2e855fc47cea8475000a15e2df24799e12 (patch) | |
| tree | 0a24396d9800153ed448d6440d734c53adf43545 | |
| parent | 7ff102a685de250eeecc77eb8a6d82cd25c1d8a5 (diff) | |
| download | rust-4fa28a2e855fc47cea8475000a15e2df24799e12.tar.gz rust-4fa28a2e855fc47cea8475000a15e2df24799e12.zip | |
Allow _ param name in trait default method for #8468.
| -rw-r--r-- | src/libsyntax/parse/parser.rs | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs index 02af6d23b44..b939ac10931 100644 --- a/src/libsyntax/parse/parser.rs +++ b/src/libsyntax/parse/parser.rs @@ -347,6 +347,13 @@ impl Drop for Parser { fn drop(&self) {} } +fn is_plain_ident_or_underscore(t: &token::Token) -> bool { + match *t { + token::IDENT(_, false) | token::UNDERSCORE => true, + _ => false, + } +} + impl Parser { // convert a token to a string using self's reader pub fn token_to_str(&self, token: &token::Token) -> ~str { @@ -1242,11 +1249,13 @@ impl Parser { _ => 0 }; + debug!("parser is_named_argument offset:%u", offset); + if offset == 0 { - is_plain_ident(&*self.token) + is_plain_ident_or_underscore(&*self.token) && self.look_ahead(1, |t| *t == token::COLON) } else { - self.look_ahead(offset, |t| is_plain_ident(t)) + self.look_ahead(offset, |t| is_plain_ident_or_underscore(t)) && self.look_ahead(offset + 1, |t| *t == token::COLON) } } @@ -1256,6 +1265,8 @@ impl Parser { pub fn parse_arg_general(&self, require_name: bool) -> arg { let is_mutbl = self.eat_keyword(keywords::Mut); let pat = if require_name || self.is_named_argument() { + debug!("parse_arg_general parse_pat (require_name:%?)", + require_name); self.parse_arg_mode(); let pat = self.parse_pat(); @@ -1266,6 +1277,7 @@ impl Parser { self.expect(&token::COLON); pat } else { + debug!("parse_arg_general ident_to_pat"); ast_util::ident_to_pat(self.get_id(), *self.last_span, special_idents::invalid) |
