@@ -58,12 +58,6 @@ const PAT_RECOVERY_SET: TokenSet =
58
58
fn atom_pat ( p : & mut Parser , recovery_set : TokenSet ) -> Option < CompletedMarker > {
59
59
let la0 = p. nth ( 0 ) ;
60
60
let la1 = p. nth ( 1 ) ;
61
- if la0 == IDENT && la1 == T ! [ ..] {
62
- let m = p. start ( ) ;
63
- p. bump ( ) ;
64
- p. bump ( ) ;
65
- return Some ( m. complete ( p, SUBSLICE_PAT ) ) ;
66
- }
67
61
if la0 == T ! [ ref]
68
62
|| la0 == T ! [ mut ]
69
63
|| la0 == T ! [ box]
@@ -151,7 +145,21 @@ fn path_pat(p: &mut Parser) -> CompletedMarker {
151
145
fn tuple_pat_fields ( p : & mut Parser ) {
152
146
assert ! ( p. at( T ![ '(' ] ) ) ;
153
147
p. bump ( ) ;
154
- pat_list ( p, T ! [ ')' ] ) ;
148
+ while !p. at ( EOF ) && !p. at ( T ! [ ')' ] ) {
149
+ match p. current ( ) {
150
+ T ! [ ..] => p. bump ( ) ,
151
+ _ => {
152
+ if !p. at_ts ( PATTERN_FIRST ) {
153
+ p. error ( "expected a pattern" ) ;
154
+ break ;
155
+ }
156
+ pattern ( p)
157
+ }
158
+ }
159
+ if !p. at ( T ! [ ')' ] ) {
160
+ p. expect ( T ! [ , ] ) ;
161
+ }
162
+ }
155
163
p. expect ( T ! [ ')' ] ) ;
156
164
}
157
165
@@ -237,15 +245,15 @@ fn slice_pat(p: &mut Parser) -> CompletedMarker {
237
245
assert ! ( p. at( T ![ '[' ] ) ) ;
238
246
let m = p. start ( ) ;
239
247
p. bump ( ) ;
240
- pat_list ( p, T ! [ ']' ] ) ;
241
- p. expect ( T ! [ ']' ] ) ;
242
- m. complete ( p, SLICE_PAT )
243
- }
244
-
245
- fn pat_list ( p : & mut Parser , ket : SyntaxKind ) {
246
- while !p. at ( EOF ) && !p. at ( ket) {
248
+ while !p. at ( EOF ) && !p. at ( T ! [ ']' ] ) {
247
249
match p. current ( ) {
248
250
T ! [ ..] => p. bump ( ) ,
251
+ IDENT if p. nth ( 1 ) == T ! [ ..] => {
252
+ let m_sub = p. start ( ) ;
253
+ p. bump ( ) ;
254
+ p. bump ( ) ;
255
+ m_sub. complete ( p, SUBSLICE_PAT ) ;
256
+ }
249
257
_ => {
250
258
if !p. at_ts ( PATTERN_FIRST ) {
251
259
p. error ( "expected a pattern" ) ;
@@ -254,10 +262,12 @@ fn pat_list(p: &mut Parser, ket: SyntaxKind) {
254
262
pattern ( p)
255
263
}
256
264
}
257
- if !p. at ( ket ) {
265
+ if !p. at ( T ! [ ']' ] ) {
258
266
p. expect ( T ! [ , ] ) ;
259
267
}
260
268
}
269
+ p. expect ( T ! [ ']' ] ) ;
270
+ m. complete ( p, SLICE_PAT )
261
271
}
262
272
263
273
// test bind_pat
0 commit comments