@@ -1817,15 +1817,7 @@ impl<'a> Parser<'a> {
1817
1817
AngleBracketedArgs { args, constraints, span } . into ( )
1818
1818
} else {
1819
1819
// `(T, U) -> R`
1820
- self . bump ( ) ; // `(`
1821
- let ( inputs, recovered) = self . parse_seq_to_before_tokens (
1822
- & [ & token:: CloseDelim ( token:: Paren ) ] ,
1823
- SeqSep :: trailing_allowed ( token:: Comma ) ,
1824
- TokenExpectType :: Expect ,
1825
- |p| p. parse_ty ( ) ) ?;
1826
- if !recovered {
1827
- self . bump ( ) ; // `)`
1828
- }
1820
+ let ( inputs, _) = self . parse_paren_comma_seq ( |p| p. parse_ty ( ) ) ?;
1829
1821
let span = lo. to ( self . prev_span ) ;
1830
1822
let output = if self . eat ( & token:: RArrow ) {
1831
1823
Some ( self . parse_ty_common ( false , false , false ) ?)
@@ -2529,12 +2521,7 @@ impl<'a> Parser<'a> {
2529
2521
Ok ( match self . token . kind {
2530
2522
token:: OpenDelim ( token:: Paren ) => {
2531
2523
// Method call `expr.f()`
2532
- let mut args = self . parse_unspanned_seq (
2533
- & token:: OpenDelim ( token:: Paren ) ,
2534
- & token:: CloseDelim ( token:: Paren ) ,
2535
- SeqSep :: trailing_allowed ( token:: Comma ) ,
2536
- |p| Ok ( p. parse_expr ( ) ?)
2537
- ) ?;
2524
+ let mut args = self . parse_paren_expr_seq ( ) ?;
2538
2525
args. insert ( 0 , self_arg) ;
2539
2526
2540
2527
let span = lo. to ( self . prev_span ) ;
@@ -2619,12 +2606,7 @@ impl<'a> Parser<'a> {
2619
2606
match self . token . kind {
2620
2607
// expr(...)
2621
2608
token:: OpenDelim ( token:: Paren ) => {
2622
- let seq = self . parse_unspanned_seq (
2623
- & token:: OpenDelim ( token:: Paren ) ,
2624
- & token:: CloseDelim ( token:: Paren ) ,
2625
- SeqSep :: trailing_allowed ( token:: Comma ) ,
2626
- |p| Ok ( p. parse_expr ( ) ?)
2627
- ) . map ( |es| {
2609
+ let seq = self . parse_paren_expr_seq ( ) . map ( |es| {
2628
2610
let nd = self . mk_call ( e, es) ;
2629
2611
let hi = self . prev_span ;
2630
2612
self . mk_expr ( lo. to ( hi) , nd, ThinVec :: new ( ) )
@@ -5376,59 +5358,48 @@ impl<'a> Parser<'a> {
5376
5358
5377
5359
fn parse_fn_args ( & mut self , named_args : bool , allow_c_variadic : bool )
5378
5360
-> PResult < ' a , ( Vec < Arg > , bool ) > {
5379
- self . expect ( & token:: OpenDelim ( token:: Paren ) ) ?;
5380
-
5381
5361
let sp = self . token . span ;
5382
5362
let mut c_variadic = false ;
5383
- let ( args, recovered) : ( Vec < Option < Arg > > , bool ) =
5384
- self . parse_seq_to_before_end (
5385
- & token:: CloseDelim ( token:: Paren ) ,
5386
- SeqSep :: trailing_allowed ( token:: Comma ) ,
5387
- |p| {
5388
- let do_not_enforce_named_arguments_for_c_variadic =
5389
- |token : & token:: Token | -> bool {
5390
- if token == & token:: DotDotDot {
5391
- false
5392
- } else {
5393
- named_args
5394
- }
5395
- } ;
5396
- match p. parse_arg_general (
5397
- false ,
5398
- allow_c_variadic,
5399
- do_not_enforce_named_arguments_for_c_variadic
5400
- ) {
5401
- Ok ( arg) => {
5402
- if let TyKind :: CVarArgs = arg. ty . node {
5403
- c_variadic = true ;
5404
- if p. token != token:: CloseDelim ( token:: Paren ) {
5405
- let span = p. token . span ;
5406
- p. span_err ( span,
5407
- "`...` must be the last argument of a C-variadic function" ) ;
5408
- Ok ( None )
5409
- } else {
5410
- Ok ( Some ( arg) )
5411
- }
5412
- } else {
5413
- Ok ( Some ( arg) )
5414
- }
5415
- } ,
5416
- Err ( mut e) => {
5417
- e. emit ( ) ;
5418
- let lo = p. prev_span ;
5419
- // Skip every token until next possible arg or end.
5420
- p. eat_to_tokens ( & [ & token:: Comma , & token:: CloseDelim ( token:: Paren ) ] ) ;
5421
- // Create a placeholder argument for proper arg count (issue #34264).
5422
- let span = lo. to ( p. prev_span ) ;
5423
- Ok ( Some ( dummy_arg ( Ident :: new ( kw:: Invalid , span) ) ) )
5363
+ let ( args, _) : ( Vec < Option < Arg > > , _ ) = self . parse_paren_comma_seq ( |p| {
5364
+ let do_not_enforce_named_arguments_for_c_variadic =
5365
+ |token : & token:: Token | -> bool {
5366
+ if token == & token:: DotDotDot {
5367
+ false
5368
+ } else {
5369
+ named_args
5370
+ }
5371
+ } ;
5372
+ match p. parse_arg_general (
5373
+ false ,
5374
+ allow_c_variadic,
5375
+ do_not_enforce_named_arguments_for_c_variadic
5376
+ ) {
5377
+ Ok ( arg) => {
5378
+ if let TyKind :: CVarArgs = arg. ty . node {
5379
+ c_variadic = true ;
5380
+ if p. token != token:: CloseDelim ( token:: Paren ) {
5381
+ let span = p. token . span ;
5382
+ p. span_err ( span,
5383
+ "`...` must be the last argument of a C-variadic function" ) ;
5384
+ Ok ( None )
5385
+ } else {
5386
+ Ok ( Some ( arg) )
5424
5387
}
5388
+ } else {
5389
+ Ok ( Some ( arg) )
5425
5390
}
5391
+ } ,
5392
+ Err ( mut e) => {
5393
+ e. emit ( ) ;
5394
+ let lo = p. prev_span ;
5395
+ // Skip every token until next possible arg or end.
5396
+ p. eat_to_tokens ( & [ & token:: Comma , & token:: CloseDelim ( token:: Paren ) ] ) ;
5397
+ // Create a placeholder argument for proper arg count (issue #34264).
5398
+ let span = lo. to ( p. prev_span ) ;
5399
+ Ok ( Some ( dummy_arg ( Ident :: new ( kw:: Invalid , span) ) ) )
5426
5400
}
5427
- ) ?;
5428
-
5429
- if !recovered {
5430
- self . eat ( & token:: CloseDelim ( token:: Paren ) ) ;
5431
- }
5401
+ }
5402
+ } ) ?;
5432
5403
5433
5404
let args: Vec < _ > = args. into_iter ( ) . filter_map ( |x| x) . collect ( ) ;
5434
5405
@@ -5590,7 +5561,7 @@ impl<'a> Parser<'a> {
5590
5561
( vec ! [ self_arg] , false )
5591
5562
} else if self . eat ( & token:: Comma ) {
5592
5563
let mut fn_inputs = vec ! [ self_arg] ;
5593
- let ( mut input, recovered) = self . parse_seq_to_before_end (
5564
+ let ( mut input, _ , recovered) = self . parse_seq_to_before_end (
5594
5565
& token:: CloseDelim ( token:: Paren ) , sep, parse_arg_fn) ?;
5595
5566
fn_inputs. append ( & mut input) ;
5596
5567
( fn_inputs, recovered)
@@ -5601,7 +5572,9 @@ impl<'a> Parser<'a> {
5601
5572
}
5602
5573
}
5603
5574
} else {
5604
- self . parse_seq_to_before_end ( & token:: CloseDelim ( token:: Paren ) , sep, parse_arg_fn) ?
5575
+ let ( input, _, recovered) =
5576
+ self . parse_seq_to_before_end ( & token:: CloseDelim ( token:: Paren ) , sep, parse_arg_fn) ?;
5577
+ ( input, recovered)
5605
5578
} ;
5606
5579
5607
5580
if !recovered {
@@ -6202,26 +6175,20 @@ impl<'a> Parser<'a> {
6202
6175
fn parse_tuple_struct_body ( & mut self ) -> PResult < ' a , Vec < StructField > > {
6203
6176
// This is the case where we find `struct Foo<T>(T) where T: Copy;`
6204
6177
// Unit like structs are handled in parse_item_struct function
6205
- let fields = self . parse_unspanned_seq (
6206
- & token:: OpenDelim ( token:: Paren ) ,
6207
- & token:: CloseDelim ( token:: Paren ) ,
6208
- SeqSep :: trailing_allowed ( token:: Comma ) ,
6209
- |p| {
6210
- let attrs = p. parse_outer_attributes ( ) ?;
6211
- let lo = p. token . span ;
6212
- let vis = p. parse_visibility ( true ) ?;
6213
- let ty = p. parse_ty ( ) ?;
6214
- Ok ( StructField {
6215
- span : lo. to ( ty. span ) ,
6216
- vis,
6217
- ident : None ,
6218
- id : ast:: DUMMY_NODE_ID ,
6219
- ty,
6220
- attrs,
6221
- } )
6222
- } ) ?;
6223
-
6224
- Ok ( fields)
6178
+ self . parse_paren_comma_seq ( |p| {
6179
+ let attrs = p. parse_outer_attributes ( ) ?;
6180
+ let lo = p. token . span ;
6181
+ let vis = p. parse_visibility ( true ) ?;
6182
+ let ty = p. parse_ty ( ) ?;
6183
+ Ok ( StructField {
6184
+ span : lo. to ( ty. span ) ,
6185
+ vis,
6186
+ ident : None ,
6187
+ id : ast:: DUMMY_NODE_ID ,
6188
+ ty,
6189
+ attrs,
6190
+ } )
6191
+ } ) . map ( |( r, _) | r)
6225
6192
}
6226
6193
6227
6194
/// Parses a structure field declaration.
@@ -7803,11 +7770,8 @@ impl<'a> Parser<'a> {
7803
7770
/// USE_TREE_LIST = Ø | (USE_TREE `,`)* USE_TREE [`,`]
7804
7771
/// ```
7805
7772
fn parse_use_tree_list ( & mut self ) -> PResult < ' a , Vec < ( UseTree , ast:: NodeId ) > > {
7806
- self . parse_unspanned_seq ( & token:: OpenDelim ( token:: Brace ) ,
7807
- & token:: CloseDelim ( token:: Brace ) ,
7808
- SeqSep :: trailing_allowed ( token:: Comma ) , |this| {
7809
- Ok ( ( this. parse_use_tree ( ) ?, ast:: DUMMY_NODE_ID ) )
7810
- } )
7773
+ self . parse_delim_comma_seq ( token:: Brace , |p| Ok ( ( p. parse_use_tree ( ) ?, ast:: DUMMY_NODE_ID ) ) )
7774
+ . map ( |( r, _) | r)
7811
7775
}
7812
7776
7813
7777
fn parse_rename ( & mut self ) -> PResult < ' a , Option < Ident > > {
0 commit comments