@@ -425,7 +425,7 @@ fn parse_ty_postfix(ast::ty_ orig_t, &parser p) -> @ast::ty {
425
425
if ( mut == ast:: imm && p. peek ( ) != token:: RBRACKET ) {
426
426
// This is explicit type parameter instantiation.
427
427
auto seq = parse_seq_to_end ( token:: RBRACKET ,
428
- some ( token:: COMMA ) , parse_ty, p) ;
428
+ some ( token:: COMMA ) , parse_ty, p) ;
429
429
430
430
alt ( orig_t) {
431
431
case ( ast:: ty_path ( ?pth, ?ann) ) {
@@ -597,7 +597,14 @@ fn parse_arg(&parser p) -> ast::arg {
597
597
}
598
598
599
599
fn parse_seq_to_end[ T ] ( token:: token ket, option:: t[ token:: token] sep,
600
- fn ( & parser) ->T f, & parser p) -> T [ ] {
600
+ fn ( & parser) ->T f, & parser p) -> T [ ] {
601
+ auto val = parse_seq_to_before_end ( ket, sep, f, p) ;
602
+ p. bump ( ) ;
603
+ ret val;
604
+ }
605
+
606
+ fn parse_seq_to_before_end[ T ] ( token:: token ket, option:: t[ token:: token] sep,
607
+ fn ( & parser) ->T f, & parser p) -> T [ ] {
601
608
let bool first = true ;
602
609
let T [ ] v = ~[ ] ;
603
610
while ( p. peek ( ) != ket) {
@@ -609,7 +616,6 @@ fn parse_seq_to_end[T](token::token ket, option::t[token::token] sep,
609
616
}
610
617
v += ~[ f ( p) ] ;
611
618
}
612
- expect ( p, ket) ;
613
619
ret v;
614
620
}
615
621
@@ -619,8 +625,9 @@ fn parse_seq[T](token::token bra, token::token ket,
619
625
fn ( & parser) ->T f, & parser p) -> spanned[ T [ ] ] {
620
626
auto lo = p. get_lo_pos ( ) ;
621
627
expect ( p, bra) ;
622
- auto result = parse_seq_to_end [ T ] ( ket, sep, f, p) ;
628
+ auto result = parse_seq_to_before_end [ T ] ( ket, sep, f, p) ;
623
629
auto hi = p. get_hi_pos ( ) ;
630
+ p. bump ( ) ;
624
631
ret spanned( lo, hi, result) ;
625
632
}
626
633
@@ -702,7 +709,7 @@ fn parse_path_and_ty_param_substs(&parser p) -> ast::path {
702
709
if ( p. peek ( ) == token:: LBRACKET ) {
703
710
auto seq = parse_seq ( token:: LBRACKET , token:: RBRACKET ,
704
711
some ( token:: COMMA ) , parse_ty, p) ;
705
- auto hi = p . get_hi_pos ( ) ;
712
+ auto hi = seq . span . hi ;
706
713
path = spanned ( lo, hi, rec ( global=path. node . global ,
707
714
idents=path. node . idents ,
708
715
types=seq. node ) ) ;
@@ -785,17 +792,15 @@ fn parse_bottom_expr(&parser p) -> @ast::expr {
785
792
auto e = parse_expr ( p) ;
786
793
ret rec( mut=m, expr=e) ;
787
794
}
788
- auto es =
789
- parse_seq ( token:: LPAREN , token:: RPAREN , some ( token:: COMMA ) ,
790
- parse_elt, p) ;
795
+ auto es = parse_seq ( token:: LPAREN , token:: RPAREN , some ( token:: COMMA ) ,
796
+ parse_elt, p) ;
791
797
hi = es. span . hi ;
792
798
ex = ast:: expr_tup ( es. node ) ;
793
799
} else if ( p. peek ( ) == token:: LBRACKET ) {
794
800
p. bump ( ) ;
795
801
auto mut = parse_mutability ( p) ;
796
- auto es =
797
- parse_seq_to_end ( token:: RBRACKET , some ( token:: COMMA ) ,
798
- parse_expr, p) ;
802
+ auto es = parse_seq_to_end ( token:: RBRACKET , some ( token:: COMMA ) ,
803
+ parse_expr, p) ;
799
804
ex = ast:: expr_vec ( es, mut, ast:: sk_rc) ;
800
805
} else if ( p. peek ( ) == token:: POUND_LT ) {
801
806
p. bump ( ) ;
@@ -814,12 +819,10 @@ fn parse_bottom_expr(&parser p) -> @ast::expr {
814
819
p. bump ( ) ;
815
820
alt ( p. peek ( ) ) {
816
821
case ( token:: LBRACKET ) { // unique array (temporary)
817
-
818
822
p. bump ( ) ;
819
823
auto mut = parse_mutability ( p) ;
820
- auto es =
821
- parse_seq_to_end ( token:: RBRACKET , some ( token:: COMMA ) ,
822
- parse_expr, p) ;
824
+ auto es = parse_seq_to_end
825
+ ( token:: RBRACKET , some ( token:: COMMA ) , parse_expr, p) ;
823
826
ex = ast:: expr_vec ( es, mut, ast:: sk_unique) ;
824
827
}
825
828
case ( token:: LIT_STR ( ?s) ) {
@@ -894,9 +897,8 @@ fn parse_bottom_expr(&parser p) -> @ast::expr {
894
897
case ( _) { ret some ( parse_expr ( p) ) ; }
895
898
}
896
899
}
897
- auto es =
898
- parse_seq ( token:: LPAREN , token:: RPAREN , some ( token:: COMMA ) ,
899
- parse_expr_opt, p) ;
900
+ auto es = parse_seq ( token:: LPAREN , token:: RPAREN , some ( token:: COMMA ) ,
901
+ parse_expr_opt, p) ;
900
902
hi = es. span . hi ;
901
903
ex = ast:: expr_bind ( e, es. node ) ;
902
904
} else if ( p. peek ( ) == token:: POUND ) {
@@ -995,9 +997,8 @@ fn parse_bottom_expr(&parser p) -> @ast::expr {
995
997
// The rest is a call expression.
996
998
997
999
let @ast:: expr f = parse_self_method ( p) ;
998
- auto es =
999
- parse_seq ( token:: LPAREN , token:: RPAREN , some ( token:: COMMA ) ,
1000
- parse_expr, p) ;
1000
+ auto es = parse_seq ( token:: LPAREN , token:: RPAREN , some ( token:: COMMA ) ,
1001
+ parse_expr, p) ;
1001
1002
hi = es. span . hi ;
1002
1003
ex = ast:: expr_call ( f, es. node ) ;
1003
1004
} else if ( p. peek ( ) == token:: MOD_SEP ||
@@ -1026,8 +1027,8 @@ fn parse_syntax_ext_naked(&parser p, uint lo) -> @ast::expr {
1026
1027
if ( ivec:: len ( pth. node . idents ) == 0 u) {
1027
1028
p. fatal ( "expected a syntax expander name" ) ;
1028
1029
}
1029
- auto es = parse_seq ( token:: LPAREN , token:: RPAREN ,
1030
- some ( token :: COMMA ) , parse_expr, p) ;
1030
+ auto es = parse_seq ( token:: LPAREN , token:: RPAREN , some ( token :: COMMA ) ,
1031
+ parse_expr, p) ;
1031
1032
auto hi = es. span . hi ;
1032
1033
ret mk_mac_expr ( p, lo, hi, ast:: mac_invoc ( pth, es. node , none) ) ;
1033
1034
}
@@ -1053,9 +1054,8 @@ fn parse_dot_or_call_expr_with(&parser p, @ast::expr e) -> @ast::expr {
1053
1054
} else {
1054
1055
// Call expr.
1055
1056
1056
- auto es =
1057
- parse_seq ( token:: LPAREN , token:: RPAREN ,
1058
- some ( token:: COMMA ) , parse_expr, p) ;
1057
+ auto es = parse_seq ( token:: LPAREN , token:: RPAREN ,
1058
+ some ( token:: COMMA ) , parse_expr, p) ;
1059
1059
hi = es. span . hi ;
1060
1060
e = mk_expr ( p, lo, hi, ast:: expr_call ( e, es. node ) ) ;
1061
1061
}
@@ -1370,9 +1370,8 @@ fn parse_spawn_expr(&parser p) -> @ast::expr {
1370
1370
// FIXME: why no full expr?
1371
1371
1372
1372
auto fn_expr = parse_bottom_expr ( p) ;
1373
- auto es =
1374
- parse_seq ( token:: LPAREN , token:: RPAREN , some ( token:: COMMA ) ,
1375
- parse_expr, p) ;
1373
+ auto es = parse_seq ( token:: LPAREN , token:: RPAREN , some ( token:: COMMA ) ,
1374
+ parse_expr, p) ;
1376
1375
auto hi = es. span . hi ;
1377
1376
ret mk_expr( p, lo, hi, ast:: expr_spawn
1378
1377
( ast:: dom_implicit, option:: none, fn_expr, es. node ) ) ;
@@ -1507,8 +1506,7 @@ fn parse_pat(&parser p) -> @ast::pat {
1507
1506
alt ( p. peek ( ) ) {
1508
1507
case ( token:: LPAREN ) {
1509
1508
auto f = parse_pat;
1510
- auto a =
1511
- parse_seq ( token:: LPAREN , token:: RPAREN ,
1509
+ auto a = parse_seq ( token:: LPAREN , token:: RPAREN ,
1512
1510
some ( token:: COMMA ) , f, p) ;
1513
1511
args = a. node ;
1514
1512
hi = a. span . hi ;
@@ -1763,9 +1761,8 @@ fn parse_ty_param(&parser p) -> ast::ty_param { ret parse_ident(p); }
1763
1761
fn parse_ty_params ( & parser p) -> ast:: ty_param [ ] {
1764
1762
let ast:: ty_param[ ] ty_params = ~[ ] ;
1765
1763
if ( p. peek ( ) == token:: LBRACKET ) {
1766
- ty_params =
1767
- parse_seq ( token:: LBRACKET , token:: RBRACKET ,
1768
- some ( token:: COMMA ) , parse_ty_param, p) . node ;
1764
+ ty_params = parse_seq ( token:: LBRACKET , token:: RBRACKET ,
1765
+ some ( token:: COMMA ) , parse_ty_param, p) . node ;
1769
1766
}
1770
1767
ret ty_params;
1771
1768
}
@@ -2116,6 +2113,7 @@ fn parse_item_tag(&parser p, &ast::attribute[] attrs) -> @ast::item {
2116
2113
auto vlo = p. get_lo_pos ( ) ;
2117
2114
p. bump ( ) ;
2118
2115
let ast:: variant_arg[ ] args = ~[ ] ;
2116
+ auto vhi = p. get_hi_pos ( ) ;
2119
2117
alt ( p. peek ( ) ) {
2120
2118
case ( token:: LPAREN ) {
2121
2119
auto arg_tys =
@@ -2124,10 +2122,10 @@ fn parse_item_tag(&parser p, &ast::attribute[] attrs) -> @ast::item {
2124
2122
for ( @ast:: ty ty in arg_tys. node) {
2125
2123
args += ~[ rec ( ty=ty, id=p. get_id ( ) ) ] ;
2126
2124
}
2125
+ vhi = arg_tys. span . hi ;
2127
2126
}
2128
2127
case ( _) { /* empty */ }
2129
2128
}
2130
- auto vhi = p. get_hi_pos ( ) ;
2131
2129
expect ( p, token:: SEMI ) ;
2132
2130
p. get_id ( ) ;
2133
2131
auto vr =
0 commit comments