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 | |
| parent | 35e6c0252422b178cc3b21f7f1510c80bcd064c8 (diff) | |
| download | rust-85f107d8cba0560e1edce8ad7158024f2489ca3b.tar.gz rust-85f107d8cba0560e1edce8ad7158024f2489ca3b.zip | |
Use '..' as slice wildcard in vectors
Diffstat (limited to 'src/libsyntax/parse')
| -rw-r--r-- | src/libsyntax/parse/obsolete.rs | 7 | ||||
| -rw-r--r-- | src/libsyntax/parse/parser.rs | 40 |
2 files changed, 35 insertions, 12 deletions
diff --git a/src/libsyntax/parse/obsolete.rs b/src/libsyntax/parse/obsolete.rs index 8fb96a3e07a..2af6d141aa1 100644 --- a/src/libsyntax/parse/obsolete.rs +++ b/src/libsyntax/parse/obsolete.rs @@ -40,7 +40,8 @@ pub enum ObsoleteSyntax { ObsoleteEmptyImpl, ObsoleteLoopAsContinue, ObsoleteEnumWildcard, - ObsoleteStructWildcard + ObsoleteStructWildcard, + ObsoleteVecDotDotWildcard } impl to_bytes::IterBytes for ObsoleteSyntax { @@ -123,6 +124,10 @@ impl ParserObsoleteMethods for Parser { "struct wildcard", "use `..` instead of `_` for matching trailing struct fields" ), + ObsoleteVecDotDotWildcard => ( + "vec slice wildcard", + "use `..` instead of `.._` for matching slices" + ), }; self.report(sp, kind, kind_str, desc); 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(); |
