@@ -20,14 +20,9 @@ const PAT_TOP_FIRST: TokenSet = PATTERN_FIRST.union(TokenSet::new(&[T![|]]));
20
20
const RANGE_PAT_END_FIRST : TokenSet =
21
21
expressions:: LITERAL_FIRST . union ( paths:: PATH_FIRST ) . union ( TokenSet :: new ( & [ T ! [ -] , T ! [ const ] ] ) ) ;
22
22
23
- pub ( crate ) fn pattern ( p : & mut Parser < ' _ > ) {
24
- let m = p. start ( ) ;
25
- pattern_r ( p, m, false , PAT_RECOVERY_SET ) ;
26
- }
27
-
28
23
/// Parses a pattern list separated by pipes `|`.
29
- pub ( super ) fn pattern_top ( p : & mut Parser < ' _ > ) {
30
- pattern_top_r ( p, PAT_RECOVERY_SET ) ;
24
+ pub ( crate ) fn pattern ( p : & mut Parser < ' _ > ) {
25
+ pattern_r ( p, PAT_RECOVERY_SET ) ;
31
26
}
32
27
33
28
pub ( crate ) fn pattern_single ( p : & mut Parser < ' _ > ) {
@@ -37,9 +32,7 @@ pub(crate) fn pattern_single(p: &mut Parser<'_>) {
37
32
/// Parses a pattern list separated by pipes `|`
38
33
/// using the given `recovery_set`.
39
34
pub ( super ) fn pattern_top_r ( p : & mut Parser < ' _ > , recovery_set : TokenSet ) {
40
- let m = p. start ( ) ;
41
- let has_leading_pipe = p. eat ( T ! [ |] ) ;
42
- pattern_r ( p, m, has_leading_pipe, recovery_set) ;
35
+ pattern_r ( p, recovery_set) ;
43
36
}
44
37
45
38
// test or_pattern
@@ -53,7 +46,10 @@ pub(super) fn pattern_top_r(p: &mut Parser<'_>, recovery_set: TokenSet) {
53
46
// }
54
47
/// Parses a pattern list separated by pipes `|`, with no leading `|`,using the
55
48
/// given `recovery_set`.
56
- fn pattern_r ( p : & mut Parser < ' _ > , m : Marker , has_leading_pipe : bool , recovery_set : TokenSet ) {
49
+ fn pattern_r ( p : & mut Parser < ' _ > , recovery_set : TokenSet ) {
50
+ let m = p. start ( ) ;
51
+ let has_leading_pipe = p. eat ( T ! [ |] ) ;
52
+
57
53
pattern_single_r ( p, recovery_set) ;
58
54
59
55
if !p. at ( T ! [ |] ) && !has_leading_pipe {
@@ -319,6 +315,8 @@ fn record_pat_field(p: &mut Parser<'_>) {
319
315
IDENT | INT_NUMBER if p. nth ( 1 ) == T ! [ : ] => {
320
316
name_ref_or_index ( p) ;
321
317
p. bump ( T ! [ : ] ) ;
318
+ // test record_field_pat_leading_or
319
+ // fn foo() { let R { a: | 1 | 2 } = 0; }
322
320
pattern ( p) ;
323
321
}
324
322
// test_err record_pat_field_eq_recovery
@@ -438,7 +436,7 @@ fn tuple_pat(p: &mut Parser<'_>) -> CompletedMarker {
438
436
}
439
437
has_rest |= p. at ( T ! [ ..] ) ;
440
438
441
- pattern_top ( p) ;
439
+ pattern ( p) ;
442
440
if !p. at ( T ! [ ')' ] ) {
443
441
has_comma = true ;
444
442
p. expect ( T ! [ , ] ) ;
@@ -465,7 +463,7 @@ fn slice_pat(p: &mut Parser<'_>) -> CompletedMarker {
465
463
466
464
fn pat_list ( p : & mut Parser < ' _ > , ket : SyntaxKind ) {
467
465
while !p. at ( EOF ) && !p. at ( ket) {
468
- pattern_top ( p) ;
466
+ pattern ( p) ;
469
467
if !p. eat ( T ! [ , ] ) {
470
468
if p. at_ts ( PAT_TOP_FIRST ) {
471
469
p. error ( format ! ( "expected {:?}, got {:?}" , T ![ , ] , p. current( ) ) ) ;
0 commit comments