@@ -26,7 +26,7 @@ use Constructor::*;
26
26
27
27
// Re-export r-a-specific versions of all these types.
28
28
pub ( crate ) type DeconstructedPat < ' p > =
29
- rustc_pattern_analysis:: pat:: DeconstructedPat < ' p , MatchCheckCtx < ' p > > ;
29
+ rustc_pattern_analysis:: pat:: DeconstructedPat < MatchCheckCtx < ' p > > ;
30
30
pub ( crate ) type MatchArm < ' p > = rustc_pattern_analysis:: MatchArm < ' p , MatchCheckCtx < ' p > > ;
31
31
pub ( crate ) type WitnessPat < ' p > = rustc_pattern_analysis:: pat:: WitnessPat < MatchCheckCtx < ' p > > ;
32
32
@@ -131,15 +131,15 @@ impl<'p> MatchCheckCtx<'p> {
131
131
}
132
132
133
133
pub ( crate ) fn lower_pat ( & self , pat : & Pat ) -> DeconstructedPat < ' p > {
134
- let singleton = |pat| std :: slice :: from_ref ( self . pattern_arena . alloc ( pat) ) ;
134
+ let singleton = |pat| vec ! [ pat] ;
135
135
let ctor;
136
- let fields: & [ _ ] ;
136
+ let fields: Vec < _ > ;
137
137
138
138
match pat. kind . as_ref ( ) {
139
139
PatKind :: Binding { subpattern : Some ( subpat) , .. } => return self . lower_pat ( subpat) ,
140
140
PatKind :: Binding { subpattern : None , .. } | PatKind :: Wild => {
141
141
ctor = Wildcard ;
142
- fields = & [ ] ;
142
+ fields = Vec :: new ( ) ;
143
143
}
144
144
PatKind :: Deref { subpattern } => {
145
145
ctor = match pat. ty . kind ( Interner ) {
@@ -157,7 +157,7 @@ impl<'p> MatchCheckCtx<'p> {
157
157
match pat. ty . kind ( Interner ) {
158
158
TyKind :: Tuple ( _, substs) => {
159
159
ctor = Struct ;
160
- let mut wilds: SmallVec < [ _ ; 2 ] > = substs
160
+ let mut wilds: Vec < _ > = substs
161
161
. iter ( Interner )
162
162
. map ( |arg| arg. assert_ty_ref ( Interner ) . clone ( ) )
163
163
. map ( DeconstructedPat :: wildcard)
@@ -166,7 +166,7 @@ impl<'p> MatchCheckCtx<'p> {
166
166
let idx: u32 = pat. field . into_raw ( ) . into ( ) ;
167
167
wilds[ idx as usize ] = self . lower_pat ( & pat. pattern ) ;
168
168
}
169
- fields = self . pattern_arena . alloc_extend ( wilds)
169
+ fields = wilds
170
170
}
171
171
TyKind :: Adt ( adt, substs) if is_box ( self . db , adt. 0 ) => {
172
172
// The only legal patterns of type `Box` (outside `std`) are `_` and box
@@ -216,33 +216,29 @@ impl<'p> MatchCheckCtx<'p> {
216
216
field_id_to_id[ field_idx as usize ] = Some ( i) ;
217
217
ty
218
218
} ) ;
219
- let mut wilds: SmallVec < [ _ ; 2 ] > =
220
- tys. map ( DeconstructedPat :: wildcard) . collect ( ) ;
219
+ let mut wilds: Vec < _ > = tys. map ( DeconstructedPat :: wildcard) . collect ( ) ;
221
220
for pat in subpatterns {
222
221
let field_idx: u32 = pat. field . into_raw ( ) . into ( ) ;
223
222
if let Some ( i) = field_id_to_id[ field_idx as usize ] {
224
223
wilds[ i] = self . lower_pat ( & pat. pattern ) ;
225
224
}
226
225
}
227
- fields = self . pattern_arena . alloc_extend ( wilds) ;
226
+ fields = wilds;
228
227
}
229
228
_ => {
230
229
never ! ( "pattern has unexpected type: pat: {:?}, ty: {:?}" , pat, & pat. ty) ;
231
230
ctor = Wildcard ;
232
- fields = & [ ] ;
231
+ fields = Vec :: new ( ) ;
233
232
}
234
233
}
235
234
}
236
235
& PatKind :: LiteralBool { value } => {
237
236
ctor = Bool ( value) ;
238
- fields = & [ ] ;
237
+ fields = Vec :: new ( ) ;
239
238
}
240
239
PatKind :: Or { pats } => {
241
240
ctor = Or ;
242
- // Collect here because `Arena::alloc_extend` panics on reentrancy.
243
- let subpats: SmallVec < [ _ ; 2 ] > =
244
- pats. iter ( ) . map ( |pat| self . lower_pat ( pat) ) . collect ( ) ;
245
- fields = self . pattern_arena . alloc_extend ( subpats) ;
241
+ fields = pats. iter ( ) . map ( |pat| self . lower_pat ( pat) ) . collect ( ) ;
246
242
}
247
243
}
248
244
let data = PatData { db : self . db } ;
@@ -307,7 +303,7 @@ impl<'p> MatchCheckCtx<'p> {
307
303
}
308
304
309
305
impl < ' p > TypeCx for MatchCheckCtx < ' p > {
310
- type Error = Void ;
306
+ type Error = ( ) ;
311
307
type Ty = Ty ;
312
308
type VariantIdx = EnumVariantId ;
313
309
type StrLit = Void ;
@@ -463,7 +459,7 @@ impl<'p> TypeCx for MatchCheckCtx<'p> {
463
459
464
460
fn write_variant_name (
465
461
f : & mut fmt:: Formatter < ' _ > ,
466
- pat : & rustc_pattern_analysis:: pat:: DeconstructedPat < ' _ , Self > ,
462
+ pat : & rustc_pattern_analysis:: pat:: DeconstructedPat < Self > ,
467
463
) -> fmt:: Result {
468
464
let variant =
469
465
pat. ty ( ) . as_adt ( ) . and_then ( |( adt, _) | Self :: variant_id_for_adt ( pat. ctor ( ) , adt) ) ;
@@ -485,8 +481,8 @@ impl<'p> TypeCx for MatchCheckCtx<'p> {
485
481
Ok ( ( ) )
486
482
}
487
483
488
- fn bug ( & self , fmt : fmt:: Arguments < ' _ > ) -> ! {
489
- panic ! ( "{}" , fmt)
484
+ fn bug ( & self , fmt : fmt:: Arguments < ' _ > ) -> ( ) {
485
+ never ! ( "{}" , fmt)
490
486
}
491
487
}
492
488
0 commit comments