Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/hir-ty/src/mir/eval.rs')
-rw-r--r--crates/hir-ty/src/mir/eval.rs26
1 files changed, 4 insertions, 22 deletions
diff --git a/crates/hir-ty/src/mir/eval.rs b/crates/hir-ty/src/mir/eval.rs
index 431d09c565..ceb170f6cf 100644
--- a/crates/hir-ty/src/mir/eval.rs
+++ b/crates/hir-ty/src/mir/eval.rs
@@ -751,19 +751,9 @@ impl Evaluator<'_> {
Variants::Single { .. } => &layout,
Variants::Multiple { variants, .. } => {
&variants[match f.parent {
- hir_def::VariantId::EnumVariantId(it) => RustcEnumVariantIdx({
- let lookup = it.lookup(self.db.upcast());
- let rustc_enum_variant_idx =
- lookup.id.value.index().into_raw().into_u32()
- - lookup.id.item_tree(self.db.upcast())
- [lookup.parent.lookup(self.db.upcast()).id.value]
- .variants
- .start
- .index()
- .into_raw()
- .into_u32();
- rustc_enum_variant_idx as usize
- }),
+ hir_def::VariantId::EnumVariantId(it) => {
+ RustcEnumVariantIdx(it.lookup(self.db.upcast()).index as usize)
+ }
_ => {
return Err(MirEvalError::TypeError(
"Multivariant layout only happens for enums",
@@ -1604,15 +1594,7 @@ impl Evaluator<'_> {
};
let mut discriminant = self.const_eval_discriminant(enum_variant_id)?;
let lookup = enum_variant_id.lookup(self.db.upcast());
- let rustc_enum_variant_idx = lookup.id.value.index().into_raw().into_u32()
- - lookup.id.item_tree(self.db.upcast())
- [lookup.parent.lookup(self.db.upcast()).id.value]
- .variants
- .start
- .index()
- .into_raw()
- .into_u32();
- let rustc_enum_variant_idx = RustcEnumVariantIdx(rustc_enum_variant_idx as usize);
+ let rustc_enum_variant_idx = RustcEnumVariantIdx(lookup.index as usize);
let variant_layout = variants[rustc_enum_variant_idx].clone();
let have_tag = match tag_encoding {
TagEncoding::Direct => true,