Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/hir-ty/src/consteval.rs')
-rw-r--r--crates/hir-ty/src/consteval.rs30
1 files changed, 8 insertions, 22 deletions
diff --git a/crates/hir-ty/src/consteval.rs b/crates/hir-ty/src/consteval.rs
index 48c23aff78..7fd0faa7d3 100644
--- a/crates/hir-ty/src/consteval.rs
+++ b/crates/hir-ty/src/consteval.rs
@@ -3,10 +3,9 @@
use base_db::Crate;
use chalk_ir::{BoundVar, DebruijnIndex, cast::Cast};
use hir_def::{
- ConstBlockLoc, EnumVariantId, GeneralConstId, HasModule as _, StaticId,
- expr_store::{Body, HygieneId},
+ EnumVariantId, GeneralConstId, HasModule as _, StaticId,
+ expr_store::{Body, HygieneId, path::Path},
hir::{Expr, ExprId},
- path::Path,
resolver::{Resolver, ValueNs},
type_ref::LiteralConstRef,
};
@@ -23,7 +22,6 @@ use crate::{
generics::Generics,
infer::InferenceContext,
lower::ParamLoweringMode,
- mir::monomorphize_mir_body_bad,
to_placeholder_idx,
};
@@ -102,7 +100,7 @@ pub(crate) fn path_to_const<'g>(
resolver: &Resolver,
path: &Path,
mode: ParamLoweringMode,
- args: impl FnOnce() -> Option<&'g Generics>,
+ args: impl FnOnce() -> &'g Generics,
debruijn: DebruijnIndex,
expected_ty: Ty,
) -> Option<Const> {
@@ -115,7 +113,7 @@ pub(crate) fn path_to_const<'g>(
}
ParamLoweringMode::Variable => {
let args = args();
- match args.and_then(|args| args.type_or_const_param_idx(p.into())) {
+ match args.type_or_const_param_idx(p.into()) {
Some(it) => ConstValue::BoundVar(BoundVar::new(debruijn, it)),
None => {
never!(
@@ -165,15 +163,15 @@ pub fn intern_const_ref(
ty: Ty,
krate: Crate,
) -> Const {
- let layout = db.layout_of_ty(ty.clone(), TraitEnvironment::empty(krate));
+ let layout = || db.layout_of_ty(ty.clone(), TraitEnvironment::empty(krate));
let bytes = match value {
LiteralConstRef::Int(i) => {
// FIXME: We should handle failure of layout better.
- let size = layout.map(|it| it.size.bytes_usize()).unwrap_or(16);
+ let size = layout().map(|it| it.size.bytes_usize()).unwrap_or(16);
ConstScalar::Bytes(i.to_le_bytes()[0..size].into(), MemoryMap::default())
}
LiteralConstRef::UInt(i) => {
- let size = layout.map(|it| it.size.bytes_usize()).unwrap_or(16);
+ let size = layout().map(|it| it.size.bytes_usize()).unwrap_or(16);
ConstScalar::Bytes(i.to_le_bytes()[0..size].into(), MemoryMap::default())
}
LiteralConstRef::Bool(b) => ConstScalar::Bytes(Box::new([*b as u8]), MemoryMap::default()),
@@ -268,18 +266,6 @@ pub(crate) fn const_eval_query(
let krate = s.module(db.upcast()).krate();
db.monomorphized_mir_body(s.into(), subst, TraitEnvironment::empty(krate))?
}
- GeneralConstId::ConstBlockId(c) => {
- let ConstBlockLoc { parent, root } = db.lookup_intern_anonymous_const(c);
- let body = db.body(parent);
- let infer = db.infer(parent);
- Arc::new(monomorphize_mir_body_bad(
- db,
- lower_to_mir(db, parent, &body, &infer, root)?,
- subst,
- db.trait_environment_for_body(parent),
- )?)
- }
- GeneralConstId::InTypeConstId(c) => db.mir_body(c.into())?,
};
let c = interpret_mir(db, body, false, trait_env)?.0?;
Ok(c)
@@ -318,7 +304,7 @@ pub(crate) fn const_eval_discriminant_variant(
return Ok(value);
}
- let repr = db.enum_data(loc.parent).repr;
+ let repr = db.enum_signature(loc.parent).repr;
let is_signed = repr.and_then(|repr| repr.int).is_none_or(|int| int.is_signed());
let mir_body = db.monomorphized_mir_body(