@@ -9,7 +9,8 @@ import ast::*;
9
9
import lexer:: reader;
10
10
import prec :: { as_prec, token_to_binop} ;
11
11
import attr:: parser_attr;
12
- import common :: { seq_sep, seq_sep_opt, seq_sep_none, token_to_str} ;
12
+ import common :: { seq_sep_trailing_disallowed, seq_sep_trailing_allowed,
13
+ seq_sep_none, token_to_str} ;
13
14
import common:: * ; //{parser_common};
14
15
import dvec :: { dvec, extensions} ;
15
16
@@ -167,9 +168,9 @@ class parser {
167
168
}
168
169
169
170
fn parse_ty_fn_decl ( purity : ast:: purity ) -> fn_decl {
170
- let inputs =
171
- self . parse_unspanned_seq ( token:: LPAREN , token:: RPAREN ,
172
- seq_sep ( token:: COMMA ) ) { |p|
171
+ let inputs = self . parse_unspanned_seq (
172
+ token:: LPAREN , token:: RPAREN ,
173
+ seq_sep_trailing_disallowed ( token:: COMMA ) ) { |p|
173
174
let mode = p. parse_arg_mode ( ) ;
174
175
let name = if is_plain_ident ( p. token )
175
176
&& p. look_ahead ( 1 u) == token:: COLON {
@@ -260,21 +261,21 @@ class parser {
260
261
fn parse_ty_constr ( fn_args : [ arg ] ) -> @constr {
261
262
let lo = self . span . lo ;
262
263
let path = self . parse_path_without_tps ( ) ;
263
- let args =
264
- self . parse_unspanned_seq ( token:: LPAREN , token:: RPAREN ,
265
- seq_sep ( token:: COMMA ) ,
266
- { |p| p. parse_constr_arg ( fn_args) } ) ;
264
+ let args = self . parse_unspanned_seq (
265
+ token:: LPAREN , token:: RPAREN ,
266
+ seq_sep_trailing_disallowed ( token:: COMMA ) ,
267
+ { |p| p. parse_constr_arg ( fn_args) } ) ;
267
268
ret @spanned ( lo, self . span . hi ,
268
269
{ path: path, args: args, id: self . get_id ( ) } ) ;
269
270
}
270
271
271
272
fn parse_constr_in_type ( ) -> @ty_constr {
272
273
let lo = self . span . lo ;
273
274
let path = self . parse_path_without_tps ( ) ;
274
- let args: [ @ty_constr_arg ] =
275
- self . parse_unspanned_seq ( token:: LPAREN , token:: RPAREN ,
276
- seq_sep ( token:: COMMA ) ,
277
- { |p| p. parse_type_constr_arg ( ) } ) ;
275
+ let args: [ @ty_constr_arg ] = self . parse_unspanned_seq (
276
+ token:: LPAREN , token:: RPAREN ,
277
+ seq_sep_trailing_disallowed ( token:: COMMA ) ,
278
+ { |p| p. parse_type_constr_arg ( ) } ) ;
278
279
let hi = self . span . lo ;
279
280
let tc: ty_constr_ = { path: path, args: args, id: self . get_id ( ) } ;
280
281
ret @spanned ( lo, hi, tc) ;
@@ -389,9 +390,10 @@ class parser {
389
390
self . bump ( ) ;
390
391
ty_ptr ( self . parse_mt ( ) )
391
392
} else if self . token == token:: LBRACE {
392
- let elems = self . parse_unspanned_seq ( token:: LBRACE , token:: RBRACE ,
393
- seq_sep_opt ( token:: COMMA ) ,
394
- { |p| p. parse_ty_field ( ) } ) ;
393
+ let elems = self . parse_unspanned_seq (
394
+ token:: LBRACE , token:: RBRACE ,
395
+ seq_sep_trailing_allowed ( token:: COMMA ) ,
396
+ { |p| p. parse_ty_field ( ) } ) ;
395
397
if vec:: len ( elems) == 0 u {
396
398
self . unexpected_last ( token:: RBRACE ) ;
397
399
}
@@ -802,9 +804,9 @@ class parser {
802
804
} else if self . token == token:: LBRACKET {
803
805
self . bump ( ) ;
804
806
let mutbl = self . parse_mutability ( ) ;
805
- let es =
806
- self . parse_seq_to_end ( token:: RBRACKET , seq_sep ( token:: COMMA ) ,
807
- { |p| p. parse_expr ( ) } ) ;
807
+ let es = self . parse_seq_to_end (
808
+ token:: RBRACKET , seq_sep_trailing_disallowed ( token:: COMMA ) ,
809
+ { |p| p. parse_expr ( ) } ) ;
808
810
hi = self . span . hi ;
809
811
ex = expr_vec ( es, mutbl) ;
810
812
} else if self . token == token:: POUND
@@ -833,9 +835,10 @@ class parser {
833
835
ex = ex_ext. node ;
834
836
} else if self . eat_keyword ( "bind" ) {
835
837
let e = self . parse_expr_res ( RESTRICT_NO_CALL_EXPRS ) ;
836
- let es = self . parse_unspanned_seq ( token:: LPAREN , token:: RPAREN ,
837
- seq_sep ( token:: COMMA ) ,
838
- { |p| p. parse_expr_or_hole ( ) } ) ;
838
+ let es = self . parse_unspanned_seq (
839
+ token:: LPAREN , token:: RPAREN ,
840
+ seq_sep_trailing_disallowed ( token:: COMMA ) ,
841
+ { |p| p. parse_expr_or_hole ( ) } ) ;
839
842
hi = self . span . hi ;
840
843
ex = expr_bind ( e, es) ;
841
844
} else if self . eat_keyword ( "fail" ) {
@@ -937,7 +940,7 @@ class parser {
937
940
}
938
941
let pth = self . parse_path_without_tps ( ) ;
939
942
//temporary for a backwards-compatible cycle:
940
- let sep = seq_sep ( token:: COMMA ) ;
943
+ let sep = seq_sep_trailing_disallowed ( token:: COMMA ) ;
941
944
let mut e = none;
942
945
if ( self . token == token:: LPAREN || self . token == token:: LBRACKET ) {
943
946
let lo = self . span . lo ;
@@ -1009,10 +1012,10 @@ class parser {
1009
1012
alt copy self . token {
1010
1013
// expr(...)
1011
1014
token:: LPAREN if self . permits_call ( ) {
1012
- let es_opt =
1013
- self . parse_unspanned_seq ( token:: LPAREN , token:: RPAREN ,
1014
- seq_sep ( token:: COMMA ) ,
1015
- { |p| p. parse_expr_or_hole ( ) } ) ;
1015
+ let es_opt = self . parse_unspanned_seq (
1016
+ token:: LPAREN , token:: RPAREN ,
1017
+ seq_sep_trailing_disallowed ( token:: COMMA ) ,
1018
+ { |p| p. parse_expr_or_hole ( ) } ) ;
1016
1019
hi = self . span . hi ;
1017
1020
1018
1021
let nd =
@@ -1479,11 +1482,10 @@ class parser {
1479
1482
self . expect ( token:: RPAREN ) ;
1480
1483
}
1481
1484
_ {
1482
- args =
1483
- self . parse_unspanned_seq ( token:: LPAREN ,
1484
- token:: RPAREN ,
1485
- seq_sep ( token:: COMMA ) ,
1486
- { |p| p. parse_pat ( ) } ) ;
1485
+ args = self . parse_unspanned_seq (
1486
+ token:: LPAREN , token:: RPAREN ,
1487
+ seq_sep_trailing_disallowed ( token:: COMMA ) ,
1488
+ { |p| p. parse_pat ( ) } ) ;
1487
1489
hi = self . span . hi ;
1488
1490
}
1489
1491
}
@@ -1783,8 +1785,9 @@ class parser {
1783
1785
-> ( fn_decl , capture_clause ) {
1784
1786
1785
1787
let args_or_capture_items: [ arg_or_capture_item ] =
1786
- self . parse_unspanned_seq ( token:: LPAREN , token:: RPAREN ,
1787
- seq_sep ( token:: COMMA ) , parse_arg_fn) ;
1788
+ self . parse_unspanned_seq (
1789
+ token:: LPAREN , token:: RPAREN ,
1790
+ seq_sep_trailing_disallowed ( token:: COMMA ) , parse_arg_fn) ;
1788
1791
1789
1792
let inputs = either:: lefts ( args_or_capture_items) ;
1790
1793
let capture_clause = @either:: rights ( args_or_capture_items) ;
@@ -1810,10 +1813,10 @@ class parser {
1810
1813
if self . eat ( token:: OROR ) {
1811
1814
[ ]
1812
1815
} else {
1813
- self . parse_unspanned_seq ( token :: BINOP ( token :: OR ) ,
1814
- token:: BINOP ( token:: OR ) ,
1815
- seq_sep ( token:: COMMA ) ,
1816
- { |p| p. parse_fn_block_arg ( ) } )
1816
+ self . parse_unspanned_seq (
1817
+ token :: BINOP ( token :: OR ) , token:: BINOP ( token:: OR ) ,
1818
+ seq_sep_trailing_disallowed ( token:: COMMA ) ,
1819
+ { |p| p. parse_fn_block_arg ( ) } )
1817
1820
}
1818
1821
} ;
1819
1822
let output = if self . eat ( token:: RARROW ) {
@@ -1984,8 +1987,9 @@ class parser {
1984
1987
}
1985
1988
1986
1989
fn parse_iface_ref_list ( ) -> [ @iface_ref ] {
1987
- self . parse_seq_to_before_end ( token:: LBRACE , seq_sep ( token:: COMMA ) ,
1988
- { |p| p. parse_iface_ref ( ) } )
1990
+ self . parse_seq_to_before_end (
1991
+ token:: LBRACE , seq_sep_trailing_disallowed ( token:: COMMA ) ,
1992
+ { |p| p. parse_iface_ref ( ) } )
1989
1993
}
1990
1994
1991
1995
fn parse_item_class ( ) -> item_info {
@@ -2265,11 +2269,10 @@ class parser {
2265
2269
let mut args = [ ] , disr_expr = none;
2266
2270
if self . token == token:: LPAREN {
2267
2271
all_nullary = false ;
2268
- let arg_tys =
2269
- self . parse_unspanned_seq ( token:: LPAREN ,
2270
- token:: RPAREN ,
2271
- seq_sep ( token:: COMMA ) ,
2272
- { |p| p. parse_ty ( false ) } ) ;
2272
+ let arg_tys = self . parse_unspanned_seq (
2273
+ token:: LPAREN , token:: RPAREN ,
2274
+ seq_sep_trailing_disallowed ( token:: COMMA ) ,
2275
+ { |p| p. parse_ty ( false ) } ) ;
2273
2276
for arg_tys. each { |ty|
2274
2277
args += [ { ty : ty, id : self . get_id( ) } ] ;
2275
2278
}
@@ -2409,11 +2412,10 @@ class parser {
2409
2412
2410
2413
// foo::bar::{a,b,c}
2411
2414
token:: LBRACE {
2412
- let idents =
2413
- self . parse_unspanned_seq ( token:: LBRACE , token:: RBRACE ,
2414
- seq_sep ( token:: COMMA ) ,
2415
- { |p|
2416
- p. parse_path_list_ident ( ) } ) ;
2415
+ let idents = self . parse_unspanned_seq (
2416
+ token:: LBRACE , token:: RBRACE ,
2417
+ seq_sep_trailing_disallowed ( token:: COMMA ) ,
2418
+ { |p| p. parse_path_list_ident ( ) } ) ;
2417
2419
let path = @{ span: mk_sp ( lo, self . span . hi ) ,
2418
2420
global: false , idents: path,
2419
2421
rp: none, types: [ ] } ;
0 commit comments