Skip to content

Commit 9a0e85a

Browse files
committed
Change "etc" syntax for record patterns from {a:b ...} to {a:b, _}.
1 parent 48dbee6 commit 9a0e85a

File tree

3 files changed

+7
-6
lines changed

3 files changed

+7
-6
lines changed

src/comp/syntax/parse/parser.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1465,19 +1465,19 @@ fn parse_pat(&parser p) -> @ast::pat {
14651465
auto etc = false;
14661466
auto first = true;
14671467
while (p.peek() != token::RBRACE) {
1468-
if (p.peek() == token::DOT) {
1468+
if (first) { first = false; }
1469+
else { expect(p, token::COMMA); }
1470+
1471+
if (p.peek() == token::UNDERSCORE) {
14691472
p.bump();
1470-
expect(p, token::DOT);
1471-
expect(p, token::DOT);
14721473
if (p.peek() != token::RBRACE) {
14731474
p.fatal("expecting }, found " +
14741475
token::to_str(p.get_reader(), p.peek()));
14751476
}
14761477
etc = true;
14771478
break;
14781479
}
1479-
if (first) { first = false; }
1480-
else { expect(p, token::COMMA); }
1480+
14811481
auto fieldname = parse_ident(p);
14821482
auto subpat;
14831483
if (p.peek() == token::COLON) {

src/comp/syntax/parse/token.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,7 @@ fn to_str(lexer::reader r, token t) -> str {
116116
/* Structural symbols */
117117
case (AT) { ret "@"; }
118118
case (DOT) { ret "."; }
119+
case (ELIPSIS) { ret "..."; }
119120
case (COMMA) { ret ","; }
120121
case (SEMI) { ret ";"; }
121122
case (COLON) { ret ":"; }

src/test/run-pass/record-pat.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ tag t3 { c(t2, uint); }
44

55
fn m(&t3 in) -> int {
66
alt in {
7-
c({x: a(?m) ...}, _) { ret m; }
7+
c({x: a(?m), _}, _) { ret m; }
88
c({x: b(?m), y}, ?z) { ret (m + z) as int + y; }
99
}
1010
}

0 commit comments

Comments
 (0)