Skip to content

Commit 860317f

Browse files
committed
---
yaml --- r: 1372 b: refs/heads/master c: a396652 h: refs/heads/master v: v3
1 parent 01d0ad6 commit 860317f

File tree

3 files changed

+23
-23
lines changed

3 files changed

+23
-23
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
---
2-
refs/heads/master: b59d98ccb9de56a49768586961ce745d462e0697
2+
refs/heads/master: a396652766bc6aa2b4526ddd9807439ecd12033a

trunk/src/comp/front/ast.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ type pat = spanned[pat_];
5757
tag pat_ {
5858
pat_wild(ann);
5959
pat_bind(ident, def_id, ann);
60+
pat_lit(@lit, ann);
6061
pat_tag(path, vec[@pat], option.t[variant_def], ann);
6162
}
6263

trunk/src/comp/front/parser.rs

Lines changed: 21 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -351,9 +351,9 @@ impure fn parse_seq[T](token.token bra,
351351
ret spanned(lo, hi, v);
352352
}
353353

354-
impure fn parse_lit(parser p) -> option.t[ast.lit] {
354+
impure fn parse_lit(parser p) -> ast.lit {
355355
auto lo = p.get_span();
356-
let ast.lit_ lit;
356+
let ast.lit_ lit = ast.lit_nil;
357357
alt (p.peek()) {
358358
case (token.LIT_INT(?i)) {
359359
p.bump();
@@ -379,12 +379,11 @@ impure fn parse_lit(parser p) -> option.t[ast.lit] {
379379
p.bump();
380380
lit = ast.lit_str(s);
381381
}
382-
case (_) {
383-
lit = ast.lit_nil; // FIXME: typestate bug requires this
384-
ret none[ast.lit];
382+
case (?t) {
383+
unexpected(p, t);
385384
}
386385
}
387-
ret some(spanned(lo, lo, lit));
386+
ret spanned(lo, lo, lit);
388387
}
389388

390389
fn is_ident(token.token t) -> bool {
@@ -565,15 +564,9 @@ impure fn parse_bottom_expr(parser p) -> @ast.expr {
565564
}
566565

567566
case (_) {
568-
alt (parse_lit(p)) {
569-
case (some[ast.lit](?lit)) {
570-
hi = lit.span;
571-
ex = ast.expr_lit(@lit, ast.ann_none);
572-
}
573-
case (none[ast.lit]) {
574-
p.err("expecting expression");
575-
}
576-
}
567+
auto lit = parse_lit(p);
568+
hi = lit.span;
569+
ex = ast.expr_lit(@lit, ast.ann_none);
577570
}
578571
}
579572

@@ -1081,17 +1074,20 @@ impure fn parse_initializer(parser p) -> option.t[@ast.expr] {
10811074

10821075
impure fn parse_pat(parser p) -> @ast.pat {
10831076
auto lo = p.get_span();
1084-
1077+
auto hi = lo;
10851078
auto pat = ast.pat_wild(ast.ann_none); // FIXME: typestate bug
1079+
10861080
alt (p.peek()) {
10871081
case (token.UNDERSCORE) {
1082+
hi = p.get_span();
10881083
p.bump();
10891084
pat = ast.pat_wild(ast.ann_none);
10901085
}
10911086
case (token.QUES) {
10921087
p.bump();
10931088
alt (p.peek()) {
10941089
case (token.IDENT(?id)) {
1090+
hi = p.get_span();
10951091
p.bump();
10961092
pat = ast.pat_bind(id, p.next_def_id(), ast.ann_none);
10971093
}
@@ -1104,27 +1100,30 @@ impure fn parse_pat(parser p) -> @ast.pat {
11041100
}
11051101
case (token.IDENT(?id)) {
11061102
auto tag_path = parse_path(p, GREEDY);
1103+
hi = tag_path.span;
11071104

11081105
let vec[@ast.pat] args;
11091106
alt (p.peek()) {
11101107
case (token.LPAREN) {
11111108
auto f = parse_pat;
1112-
args = parse_seq[@ast.pat](token.LPAREN, token.RPAREN,
1113-
some(token.COMMA), f, p).node;
1109+
auto a = parse_seq[@ast.pat](token.LPAREN, token.RPAREN,
1110+
some(token.COMMA), f, p);
1111+
args = a.node;
1112+
hi = a.span;
11141113
}
11151114
case (_) { args = vec(); }
11161115
}
11171116

11181117
pat = ast.pat_tag(tag_path, args, none[ast.variant_def],
11191118
ast.ann_none);
11201119
}
1121-
case (?tok) {
1122-
p.err("expected pattern but found " + token.to_str(tok));
1123-
fail;
1120+
case (_) {
1121+
auto lit = parse_lit(p);
1122+
hi = lit.span;
1123+
pat = ast.pat_lit(@lit, ast.ann_none);
11241124
}
11251125
}
11261126

1127-
auto hi = p.get_span();
11281127
ret @spanned(lo, hi, pat);
11291128
}
11301129

0 commit comments

Comments
 (0)