Skip to content

Commit c2d2124

Browse files
committed
Tweak variant_id_for_adt
1 parent 66cec4d commit c2d2124

File tree

1 file changed

+12
-15
lines changed

1 file changed

+12
-15
lines changed

crates/hir-ty/src/diagnostics/match_check/pat_analysis.rs

Lines changed: 12 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -75,18 +75,15 @@ impl<'p> MatchCheckCtx<'p> {
7575
}
7676
}
7777

78-
fn variant_id_for_adt(&self, ctor: &Constructor<Self>, adt: hir_def::AdtId) -> VariantId {
78+
fn variant_id_for_adt(ctor: &Constructor<Self>, adt: hir_def::AdtId) -> Option<VariantId> {
7979
match ctor {
80-
&Variant(id) => id.into(),
81-
Struct | UnionField => {
82-
assert!(!matches!(adt, hir_def::AdtId::EnumId(_)));
83-
match adt {
84-
hir_def::AdtId::EnumId(_) => unreachable!(),
85-
hir_def::AdtId::StructId(id) => id.into(),
86-
hir_def::AdtId::UnionId(id) => id.into(),
87-
}
88-
}
89-
_ => panic!("bad constructor {self:?} for adt {adt:?}"),
80+
&Variant(id) => Some(id.into()),
81+
Struct | UnionField => match adt {
82+
hir_def::AdtId::EnumId(_) => None,
83+
hir_def::AdtId::StructId(id) => Some(id.into()),
84+
hir_def::AdtId::UnionId(id) => Some(id.into()),
85+
},
86+
_ => panic!("bad constructor {ctor:?} for adt {adt:?}"),
9087
}
9188
}
9289

@@ -200,7 +197,7 @@ impl<'p> MatchCheckCtx<'p> {
200197
Wildcard
201198
}
202199
};
203-
let variant = self.variant_id_for_adt(&ctor, adt.0);
200+
let variant = Self::variant_id_for_adt(&ctor, adt.0).unwrap();
204201
let fields_len = variant.variant_data(self.db.upcast()).fields().len();
205202
// For each field in the variant, we store the relevant index into `self.fields` if any.
206203
let mut field_id_to_id: Vec<Option<usize>> = vec![None; fields_len];
@@ -266,7 +263,7 @@ impl<'p> MatchCheckCtx<'p> {
266263
PatKind::Deref { subpattern: subpatterns.next().unwrap() }
267264
}
268265
TyKind::Adt(adt, substs) => {
269-
let variant = self.variant_id_for_adt(pat.ctor(), adt.0);
266+
let variant = Self::variant_id_for_adt(pat.ctor(), adt.0).unwrap();
270267
let subpatterns = self
271268
.list_variant_nonhidden_fields(pat.ty(), variant)
272269
.zip(subpatterns)
@@ -327,7 +324,7 @@ impl<'p> TypeCx for MatchCheckCtx<'p> {
327324
// patterns. If we're here we can assume this is a box pattern.
328325
1
329326
} else {
330-
let variant = self.variant_id_for_adt(ctor, adt);
327+
let variant = Self::variant_id_for_adt(ctor, adt).unwrap();
331328
self.list_variant_nonhidden_fields(ty, variant).count()
332329
}
333330
}
@@ -370,7 +367,7 @@ impl<'p> TypeCx for MatchCheckCtx<'p> {
370367
let subst_ty = substs.at(Interner, 0).assert_ty_ref(Interner).clone();
371368
alloc(self, once(subst_ty))
372369
} else {
373-
let variant = self.variant_id_for_adt(ctor, adt);
370+
let variant = Self::variant_id_for_adt(ctor, adt).unwrap();
374371
let tys = self.list_variant_nonhidden_fields(ty, variant).map(|(_, ty)| ty);
375372
alloc(self, tys)
376373
}

0 commit comments

Comments
 (0)