diff options
| author | Brian Anderson <banderson@mozilla.com> | 2013-11-07 19:25:39 -0800 |
|---|---|---|
| committer | Brian Anderson <banderson@mozilla.com> | 2013-11-18 16:19:48 -0800 |
| commit | 85f107d8cba0560e1edce8ad7158024f2489ca3b (patch) | |
| tree | c6e490a3a1d1bb9f806fbc607a54b4fc05502c47 /src/libsyntax/parse/parser.rs | |
| parent | 35e6c0252422b178cc3b21f7f1510c80bcd064c8 (diff) | |
| download | rust-85f107d8cba0560e1edce8ad7158024f2489ca3b.tar.gz rust-85f107d8cba0560e1edce8ad7158024f2489ca3b.zip | |
Use '..' as slice wildcard in vectors
Diffstat (limited to 'src/libsyntax/parse/parser.rs')
| -rw-r--r-- | src/libsyntax/parse/parser.rs | 40 |
1 files changed, 29 insertions, 11 deletions
diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs index ea861305d9f..1b2e18f3ca5 100644 --- a/src/libsyntax/parse/parser.rs +++ b/src/libsyntax/parse/parser.rs @@ -43,7 +43,7 @@ use ast::{MutImmutable, MutMutable, mac_, mac_invoc_tt, matcher, match_nontermin use ast::{match_seq, match_tok, method, mt, BiMul, Mutability}; use ast::{named_field, UnNeg, noreturn, UnNot, Pat, PatBox, PatEnum}; use ast::{PatIdent, PatLit, PatRange, PatRegion, PatStruct}; -use ast::{PatTup, PatUniq, PatWild, private}; +use ast::{PatTup, PatUniq, PatWild, PatWildMulti, private}; use ast::{BiRem, required}; use ast::{ret_style, return_val, BiShl, BiShr, Stmt, StmtDecl}; use ast::{StmtExpr, StmtSemi, StmtMac, struct_def, struct_field}; @@ -2724,17 +2724,35 @@ impl Parser { } } - let subpat = self.parse_pat(); if is_slice { - match subpat { - @ast::Pat { node: PatWild, _ } => (), - @ast::Pat { node: PatIdent(_, _, _), _ } => (), - @ast::Pat { span, _ } => self.span_fatal( - span, "expected an identifier or `_`" - ) + if *self.token == token::COMMA || *self.token == token::RBRACKET { + slice = Some(@ast::Pat { + id: ast::DUMMY_NODE_ID, + node: PatWildMulti, + span: *self.span, + }) + } else { + let subpat = self.parse_pat(); + match subpat { + @ast::Pat { id, node: PatWild, span } => { + // NOTE #5830 activate after snapshot + // self.obsolete(*self.span, ObsoleteVecDotDotWildcard); + slice = Some(@ast::Pat { + id: id, + node: PatWildMulti, + span: span + }) + }, + @ast::Pat { node: PatIdent(_, _, _), _ } => { + slice = Some(subpat); + } + @ast::Pat { span, _ } => self.span_fatal( + span, "expected an identifier or nothing" + ) + } } - slice = Some(subpat); } else { + let subpat = self.parse_pat(); if before_slice { before.push(subpat); } else { @@ -2757,7 +2775,7 @@ impl Parser { etc = *self.token == token::UNDERSCORE || *self.token == token::DOTDOT; if *self.token == token::UNDERSCORE { - // FIXME #5830 activate after snapshot + // NOTE #5830 activate after snapshot // self.obsolete(*self.span, ObsoleteStructWildcard); } if etc { @@ -3031,7 +3049,7 @@ impl Parser { // This is a "top constructor only" pat self.bump(); if is_star { - // FIXME #5830 activate after snapshot + // NOTE #5830 activate after snapshot // self.obsolete(*self.span, ObsoleteEnumWildcard); } self.bump(); |
