Skip to content

Commit 4909d4f

Browse files
committed
Auto merge of rust-lang#13777 - dzvon:fix-13776, r=jonas-schievink
fix: add a check for `if` token in patterns parser Closes rust-lang#13776
2 parents 95671d5 + 258e532 commit 4909d4f

File tree

3 files changed

+59
-1
lines changed

3 files changed

+59
-1
lines changed

crates/parser/src/grammar/patterns.rs

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,11 +126,21 @@ fn pattern_single_r(p: &mut Parser<'_>, recovery_set: TokenSet) {
126126
// ^
127127
// `[0..]`
128128
// ^
129-
if matches!(p.current(), T![=] | T![,] | T![:] | T![')'] | T!['}'] | T![']']) {
129+
// `0 .. if`
130+
// ^
131+
if matches!(
132+
p.current(),
133+
T![=] | T![,] | T![:] | T![')'] | T!['}'] | T![']'] | T![if]
134+
) {
130135
// test half_open_range_pat
131136
// fn f() {
132137
// let 0 .. = 1u32;
133138
// let 0..: _ = 1u32;
139+
//
140+
// match 42 {
141+
// 0 .. if true => (),
142+
// _ => (),
143+
// }
134144
// }
135145
} else {
136146
atom_pat(p, recovery_set);

crates/parser/test_data/parser/inline/ok/0166_half_open_range_pat.rast

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,49 @@ SOURCE_FILE
4646
LITERAL
4747
INT_NUMBER "1u32"
4848
SEMICOLON ";"
49+
WHITESPACE "\n\n "
50+
MATCH_EXPR
51+
MATCH_KW "match"
52+
WHITESPACE " "
53+
LITERAL
54+
INT_NUMBER "42"
55+
WHITESPACE " "
56+
MATCH_ARM_LIST
57+
L_CURLY "{"
58+
WHITESPACE "\n "
59+
MATCH_ARM
60+
RANGE_PAT
61+
LITERAL_PAT
62+
LITERAL
63+
INT_NUMBER "0"
64+
WHITESPACE " "
65+
DOT2 ".."
66+
WHITESPACE " "
67+
MATCH_GUARD
68+
IF_KW "if"
69+
WHITESPACE " "
70+
LITERAL
71+
TRUE_KW "true"
72+
WHITESPACE " "
73+
FAT_ARROW "=>"
74+
WHITESPACE " "
75+
TUPLE_EXPR
76+
L_PAREN "("
77+
R_PAREN ")"
78+
COMMA ","
79+
WHITESPACE "\n "
80+
MATCH_ARM
81+
WILDCARD_PAT
82+
UNDERSCORE "_"
83+
WHITESPACE " "
84+
FAT_ARROW "=>"
85+
WHITESPACE " "
86+
TUPLE_EXPR
87+
L_PAREN "("
88+
R_PAREN ")"
89+
COMMA ","
90+
WHITESPACE "\n "
91+
R_CURLY "}"
4992
WHITESPACE "\n"
5093
R_CURLY "}"
5194
WHITESPACE "\n"
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,9 @@
11
fn f() {
22
let 0 .. = 1u32;
33
let 0..: _ = 1u32;
4+
5+
match 42 {
6+
0 .. if true => (),
7+
_ => (),
8+
}
49
}

0 commit comments

Comments
 (0)