about summary refs log tree commit diff
diff options
context:
space:
mode:
authorFelix S. Klock II <pnkfelix@pnkfx.org>2013-09-03 01:58:12 +0200
committerFelix S. Klock II <pnkfelix@pnkfx.org>2013-09-03 01:58:12 +0200
commit4fa28a2e855fc47cea8475000a15e2df24799e12 (patch)
tree0a24396d9800153ed448d6440d734c53adf43545
parent7ff102a685de250eeecc77eb8a6d82cd25c1d8a5 (diff)
downloadrust-4fa28a2e855fc47cea8475000a15e2df24799e12.tar.gz
rust-4fa28a2e855fc47cea8475000a15e2df24799e12.zip
Allow _ param name in trait default method for #8468.
-rw-r--r--src/libsyntax/parse/parser.rs16
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)