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