diff options
Diffstat (limited to 'src/libsyntax/parse/parser.rs')
| -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) |
