@@ -108,8 +108,7 @@ impl<'a> Parser<'a> {
108
108
maybe_whole ! ( self , NtPat , |x| x) ;
109
109
110
110
let lo = self . token . span ;
111
- let pat;
112
- match self . token . kind {
111
+ let pat = match self . token . kind {
113
112
token:: BinOp ( token:: And ) | token:: AndAnd => {
114
113
// Parse &pat / &mut pat
115
114
self . expect_and ( ) ?;
@@ -120,49 +119,48 @@ impl<'a> Parser<'a> {
120
119
return Err ( err) ;
121
120
}
122
121
let subpat = self . parse_pat_with_range_pat ( false , expected) ?;
123
- pat = PatKind :: Ref ( subpat, mutbl) ;
122
+ PatKind :: Ref ( subpat, mutbl)
124
123
}
125
124
token:: OpenDelim ( token:: Paren ) => {
126
125
// Parse a tuple or parenthesis pattern.
127
126
let ( fields, trailing_comma) = self . parse_paren_comma_seq ( |p| p. parse_pat ( None ) ) ?;
128
127
129
128
// Here, `(pat,)` is a tuple pattern.
130
129
// For backward compatibility, `(..)` is a tuple pattern as well.
131
- pat = if fields. len ( ) == 1 && !( trailing_comma || fields[ 0 ] . is_rest ( ) ) {
130
+ if fields. len ( ) == 1 && !( trailing_comma || fields[ 0 ] . is_rest ( ) ) {
132
131
PatKind :: Paren ( fields. into_iter ( ) . nth ( 0 ) . unwrap ( ) )
133
132
} else {
134
133
PatKind :: Tuple ( fields)
135
- } ;
134
+ }
136
135
}
137
136
token:: OpenDelim ( token:: Bracket ) => {
138
137
// Parse `[pat, pat,...]` as a slice pattern.
139
- let ( slice, _) = self . parse_delim_comma_seq ( token:: Bracket , |p| p. parse_pat ( None ) ) ?;
140
- pat = PatKind :: Slice ( slice) ;
138
+ PatKind :: Slice ( self . parse_delim_comma_seq ( token:: Bracket , |p| p. parse_pat ( None ) ) ?. 0 )
141
139
}
142
140
token:: DotDot => {
143
141
self . bump ( ) ;
144
- pat = if self . is_pat_range_end_start ( ) {
142
+ if self . is_pat_range_end_start ( ) {
145
143
// Parse `..42` for recovery.
146
144
self . parse_pat_range_to ( RangeEnd :: Excluded , ".." ) ?
147
145
} else {
148
146
// A rest pattern `..`.
149
147
PatKind :: Rest
150
- } ;
148
+ }
151
149
}
152
150
token:: DotDotEq => {
153
151
// Parse `..=42` for recovery.
154
152
self . bump ( ) ;
155
- pat = self . parse_pat_range_to ( RangeEnd :: Included ( RangeSyntax :: DotDotEq ) , "..=" ) ?;
153
+ self . parse_pat_range_to ( RangeEnd :: Included ( RangeSyntax :: DotDotEq ) , "..=" ) ?
156
154
}
157
155
token:: DotDotDot => {
158
156
// Parse `...42` for recovery.
159
157
self . bump ( ) ;
160
- pat = self . parse_pat_range_to ( RangeEnd :: Included ( RangeSyntax :: DotDotDot ) , "..." ) ?;
158
+ self . parse_pat_range_to ( RangeEnd :: Included ( RangeSyntax :: DotDotDot ) , "..." ) ?
161
159
}
162
160
// At this point, token != &, &&, (, [
163
161
_ => if self . eat_keyword ( kw:: Underscore ) {
164
162
// Parse _
165
- pat = PatKind :: Wild ;
163
+ PatKind :: Wild
166
164
} else if self . eat_keyword ( kw:: Mut ) {
167
165
// Parse mut ident @ pat / mut ref ident @ pat
168
166
let mutref_span = self . prev_span . to ( self . token . span ) ;
@@ -179,22 +177,20 @@ impl<'a> Parser<'a> {
179
177
} else {
180
178
BindingMode :: ByValue ( Mutability :: Mutable )
181
179
} ;
182
- pat = self . parse_pat_ident ( binding_mode) ?;
180
+ self . parse_pat_ident ( binding_mode) ?
183
181
} else if self . eat_keyword ( kw:: Ref ) {
184
182
// Parse ref ident @ pat / ref mut ident @ pat
185
183
let mutbl = self . parse_mutability ( ) ;
186
- pat = self . parse_pat_ident ( BindingMode :: ByRef ( mutbl) ) ?;
184
+ self . parse_pat_ident ( BindingMode :: ByRef ( mutbl) ) ?
187
185
} else if self . eat_keyword ( kw:: Box ) {
188
- // Parse box pat
189
- let subpat = self . parse_pat_with_range_pat ( false , None ) ?;
190
- pat = PatKind :: Box ( subpat) ;
186
+ // Parse `box pat`
187
+ PatKind :: Box ( self . parse_pat_with_range_pat ( false , None ) ?)
191
188
} else if self . token . is_ident ( ) && !self . token . is_reserved_ident ( ) &&
192
189
self . parse_as_ident ( ) {
193
- // Parse ident @ pat
190
+ // Parse ` ident @ pat`
194
191
// This can give false positives and parse nullary enums,
195
- // they are dealt with later in resolve
196
- let binding_mode = BindingMode :: ByValue ( Mutability :: Immutable ) ;
197
- pat = self . parse_pat_ident ( binding_mode) ?;
192
+ // they are dealt with later in resolve.
193
+ self . parse_pat_ident ( BindingMode :: ByValue ( Mutability :: Immutable ) ) ?
198
194
} else if self . token . is_path_start ( ) {
199
195
// Parse pattern starting with a path
200
196
let ( qself, path) = if self . eat_lt ( ) {
@@ -216,7 +212,7 @@ impl<'a> Parser<'a> {
216
212
delim,
217
213
prior_type_ascription : self . last_type_ascription ,
218
214
} ) ;
219
- pat = PatKind :: Mac ( mac) ;
215
+ PatKind :: Mac ( mac)
220
216
}
221
217
token:: DotDotDot | token:: DotDotEq | token:: DotDot => {
222
218
let ( end_kind, form) = match self . token . kind {
@@ -232,7 +228,7 @@ impl<'a> Parser<'a> {
232
228
let begin = self . mk_expr ( span, ExprKind :: Path ( qself, path) , ThinVec :: new ( ) ) ;
233
229
self . bump ( ) ;
234
230
let end = self . parse_pat_range_end_opt ( & begin, form) ?;
235
- pat = PatKind :: Range ( begin, end, respan ( op_span, end_kind) ) ;
231
+ PatKind :: Range ( begin, end, respan ( op_span, end_kind) )
236
232
}
237
233
token:: OpenDelim ( token:: Brace ) => {
238
234
if qself. is_some ( ) {
@@ -249,7 +245,7 @@ impl<'a> Parser<'a> {
249
245
( vec ! [ ] , true )
250
246
} ) ;
251
247
self . bump ( ) ;
252
- pat = PatKind :: Struct ( path, fields, etc) ;
248
+ PatKind :: Struct ( path, fields, etc)
253
249
}
254
250
token:: OpenDelim ( token:: Paren ) => {
255
251
if qself. is_some ( ) {
@@ -260,9 +256,9 @@ impl<'a> Parser<'a> {
260
256
}
261
257
// Parse tuple struct or enum pattern
262
258
let ( fields, _) = self . parse_paren_comma_seq ( |p| p. parse_pat ( None ) ) ?;
263
- pat = PatKind :: TupleStruct ( path, fields)
259
+ PatKind :: TupleStruct ( path, fields)
264
260
}
265
- _ => pat = PatKind :: Path ( qself, path) ,
261
+ _ => PatKind :: Path ( qself, path) ,
266
262
}
267
263
} else {
268
264
// Try to parse everything else as literal with optional minus
@@ -282,9 +278,9 @@ impl<'a> Parser<'a> {
282
278
on a range-operator token")
283
279
} ;
284
280
let end = self . parse_pat_range_end_opt ( & begin, form) ?;
285
- pat = PatKind :: Range ( begin, end, respan ( op_span, end_kind) )
281
+ PatKind :: Range ( begin, end, respan ( op_span, end_kind) )
286
282
} else {
287
- pat = PatKind :: Lit ( begin) ;
283
+ PatKind :: Lit ( begin)
288
284
}
289
285
}
290
286
Err ( mut err) => {
@@ -305,7 +301,7 @@ impl<'a> Parser<'a> {
305
301
}
306
302
}
307
303
}
308
- }
304
+ } ;
309
305
310
306
let pat = self . mk_pat ( lo. to ( self . prev_span ) , pat) ;
311
307
let pat = self . maybe_recover_from_bad_qpath ( pat, true ) ?;
0 commit comments