@@ -351,9 +351,9 @@ impure fn parse_seq[T](token.token bra,
351
351
ret spanned( lo, hi, v) ;
352
352
}
353
353
354
- impure fn parse_lit ( parser p) -> option . t [ ast . lit] {
354
+ impure fn parse_lit ( parser p) -> ast . lit {
355
355
auto lo = p. get_span ( ) ;
356
- let ast. lit_ lit;
356
+ let ast. lit_ lit = ast . lit_nil ;
357
357
alt ( p. peek ( ) ) {
358
358
case ( token. LIT_INT ( ?i) ) {
359
359
p. bump ( ) ;
@@ -379,12 +379,11 @@ impure fn parse_lit(parser p) -> option.t[ast.lit] {
379
379
p. bump ( ) ;
380
380
lit = ast. lit_str ( s) ;
381
381
}
382
- case ( _) {
383
- lit = ast. lit_nil ; // FIXME: typestate bug requires this
384
- ret none[ ast. lit ] ;
382
+ case ( ?t) {
383
+ unexpected ( p, t) ;
385
384
}
386
385
}
387
- ret some ( spanned ( lo, lo, lit) ) ;
386
+ ret spanned( lo, lo, lit) ;
388
387
}
389
388
390
389
fn is_ident ( token . token t) -> bool {
@@ -565,15 +564,9 @@ impure fn parse_bottom_expr(parser p) -> @ast.expr {
565
564
}
566
565
567
566
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 ) ;
577
570
}
578
571
}
579
572
@@ -1081,17 +1074,20 @@ impure fn parse_initializer(parser p) -> option.t[@ast.expr] {
1081
1074
1082
1075
impure fn parse_pat ( parser p) -> @ast . pat {
1083
1076
auto lo = p. get_span ( ) ;
1084
-
1077
+ auto hi = lo ;
1085
1078
auto pat = ast. pat_wild ( ast. ann_none ) ; // FIXME: typestate bug
1079
+
1086
1080
alt ( p. peek ( ) ) {
1087
1081
case ( token. UNDERSCORE ) {
1082
+ hi = p. get_span ( ) ;
1088
1083
p. bump ( ) ;
1089
1084
pat = ast. pat_wild ( ast. ann_none ) ;
1090
1085
}
1091
1086
case ( token. QUES ) {
1092
1087
p. bump ( ) ;
1093
1088
alt ( p. peek ( ) ) {
1094
1089
case ( token. IDENT ( ?id) ) {
1090
+ hi = p. get_span ( ) ;
1095
1091
p. bump ( ) ;
1096
1092
pat = ast. pat_bind ( id, p. next_def_id ( ) , ast. ann_none ) ;
1097
1093
}
@@ -1104,27 +1100,30 @@ impure fn parse_pat(parser p) -> @ast.pat {
1104
1100
}
1105
1101
case ( token. IDENT ( ?id) ) {
1106
1102
auto tag_path = parse_path ( p, GREEDY ) ;
1103
+ hi = tag_path. span ;
1107
1104
1108
1105
let vec[ @ast. pat] args;
1109
1106
alt ( p. peek ( ) ) {
1110
1107
case ( token. LPAREN ) {
1111
1108
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 ;
1114
1113
}
1115
1114
case ( _) { args = vec ( ) ; }
1116
1115
}
1117
1116
1118
1117
pat = ast. pat_tag ( tag_path, args, none[ ast. variant_def ] ,
1119
1118
ast. ann_none ) ;
1120
1119
}
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 ) ;
1124
1124
}
1125
1125
}
1126
1126
1127
- auto hi = p. get_span ( ) ;
1128
1127
ret @spanned ( lo, hi, pat) ;
1129
1128
}
1130
1129
0 commit comments