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.rs83
1 files changed, 42 insertions, 41 deletions
diff --git a/crates/hir-ty/src/consteval.rs b/crates/hir-ty/src/consteval.rs
index e58a22332c..15dd530312 100644
--- a/crates/hir-ty/src/consteval.rs
+++ b/crates/hir-ty/src/consteval.rs
@@ -16,6 +16,7 @@ use rustc_abi::Size;
use rustc_apfloat::Float;
use rustc_ast_ir::Mutability;
use rustc_type_ir::inherent::{Const as _, GenericArgs as _, IntoKind, Ty as _};
+use salsa::Update;
use stdx::never;
use crate::{
@@ -35,13 +36,13 @@ use crate::{
use super::mir::interpret_mir;
-#[derive(Debug, Clone, PartialEq, Eq)]
-pub enum ConstEvalError {
- MirLowerError(MirLowerError),
- MirEvalError(MirEvalError),
+#[derive(Debug, Clone, PartialEq, Eq, Update)]
+pub enum ConstEvalError<'db> {
+ MirLowerError(MirLowerError<'db>),
+ MirEvalError(MirEvalError<'db>),
}
-impl ConstEvalError {
+impl ConstEvalError<'_> {
pub fn pretty_print(
&self,
f: &mut String,
@@ -60,8 +61,8 @@ impl ConstEvalError {
}
}
-impl From<MirLowerError> for ConstEvalError {
- fn from(value: MirLowerError) -> Self {
+impl<'db> From<MirLowerError<'db>> for ConstEvalError<'db> {
+ fn from(value: MirLowerError<'db>) -> Self {
match value {
MirLowerError::ConstEvalError(_, e) => *e,
_ => ConstEvalError::MirLowerError(value),
@@ -69,8 +70,8 @@ impl From<MirLowerError> for ConstEvalError {
}
}
-impl From<MirEvalError> for ConstEvalError {
- fn from(value: MirEvalError) -> Self {
+impl<'db> From<MirEvalError<'db>> for ConstEvalError<'db> {
+ fn from(value: MirEvalError<'db>) -> Self {
ConstEvalError::MirEvalError(value)
}
}
@@ -414,10 +415,10 @@ pub(crate) fn create_anon_const<'a, 'db>(
}
#[salsa::tracked(cycle_result = const_eval_discriminant_cycle_result)]
-pub(crate) fn const_eval_discriminant_variant(
- db: &dyn HirDatabase,
+pub(crate) fn const_eval_discriminant_variant<'db>(
+ db: &'db dyn HirDatabase,
variant_id: EnumVariantId,
-) -> Result<i128, ConstEvalError> {
+) -> Result<i128, ConstEvalError<'db>> {
let interner = DbInterner::new_no_crate(db);
let def = variant_id.into();
let body = Body::of(db, def);
@@ -450,11 +451,11 @@ pub(crate) fn const_eval_discriminant_variant(
Ok(c)
}
-fn const_eval_discriminant_cycle_result(
- _: &dyn HirDatabase,
+fn const_eval_discriminant_cycle_result<'db>(
+ _: &'db dyn HirDatabase,
_: salsa::Id,
_: EnumVariantId,
-) -> Result<i128, ConstEvalError> {
+) -> Result<i128, ConstEvalError<'db>> {
Err(ConstEvalError::MirLowerError(MirLowerError::Loop))
}
@@ -463,58 +464,58 @@ pub(crate) fn const_eval<'db>(
def: ConstId,
subst: GenericArgs<'db>,
trait_env: Option<ParamEnvAndCrate<'db>>,
-) -> Result<Allocation<'db>, ConstEvalError> {
+) -> Result<Allocation<'db>, ConstEvalError<'db>> {
return match const_eval_query(db, def, subst.store(), trait_env.map(|env| env.store())) {
Ok(konst) => Ok(konst.as_ref()),
Err(err) => Err(err.clone()),
};
#[salsa::tracked(returns(ref), cycle_result = const_eval_cycle_result)]
- pub(crate) fn const_eval_query(
- db: &dyn HirDatabase,
+ pub(crate) fn const_eval_query<'db>(
+ db: &'db dyn HirDatabase,
def: ConstId,
subst: StoredGenericArgs,
trait_env: Option<StoredParamEnvAndCrate>,
- ) -> Result<StoredAllocation, ConstEvalError> {
+ ) -> Result<StoredAllocation, ConstEvalError<'db>> {
let body = db.monomorphized_mir_body(
def.into(),
subst,
ParamEnvAndCrate { param_env: db.trait_environment(def.into()), krate: def.krate(db) }
.store(),
)?;
- let c = interpret_mir(db, body, false, trait_env.as_ref().map(|env| env.as_ref()))?.0?;
+ let c = interpret_mir(db, body, false, trait_env.as_ref().map(|env| env.as_ref(db)))?.0?;
Ok(c.store())
}
- pub(crate) fn const_eval_cycle_result(
- _: &dyn HirDatabase,
+ pub(crate) fn const_eval_cycle_result<'db>(
+ _: &'db dyn HirDatabase,
_: salsa::Id,
_: ConstId,
_: StoredGenericArgs,
_: Option<StoredParamEnvAndCrate>,
- ) -> Result<StoredAllocation, ConstEvalError> {
+ ) -> Result<StoredAllocation, ConstEvalError<'db>> {
Err(ConstEvalError::MirLowerError(MirLowerError::Loop))
}
}
pub(crate) fn anon_const_eval<'db>(
db: &'db dyn HirDatabase,
- def: AnonConstId,
+ def: AnonConstId<'db>,
subst: GenericArgs<'db>,
trait_env: Option<ParamEnvAndCrate<'db>>,
-) -> Result<Allocation<'db>, ConstEvalError> {
+) -> Result<Allocation<'db>, ConstEvalError<'db>> {
return match anon_const_eval_query(db, def, subst.store(), trait_env.map(|env| env.store())) {
Ok(konst) => Ok(konst.as_ref()),
Err(err) => Err(err.clone()),
};
#[salsa::tracked(returns(ref), cycle_result = anon_const_eval_cycle_result)]
- pub(crate) fn anon_const_eval_query(
- db: &dyn HirDatabase,
- def: AnonConstId,
+ pub(crate) fn anon_const_eval_query<'db>(
+ db: &'db dyn HirDatabase,
+ def: AnonConstId<'db>,
subst: StoredGenericArgs,
trait_env: Option<StoredParamEnvAndCrate>,
- ) -> Result<StoredAllocation, ConstEvalError> {
+ ) -> Result<StoredAllocation, ConstEvalError<'db>> {
let body = db.monomorphized_mir_body(
def.into(),
subst,
@@ -524,17 +525,17 @@ pub(crate) fn anon_const_eval<'db>(
}
.store(),
)?;
- let c = interpret_mir(db, body, false, trait_env.as_ref().map(|env| env.as_ref()))?.0?;
+ let c = interpret_mir(db, body, false, trait_env.as_ref().map(|env| env.as_ref(db)))?.0?;
Ok(c.store())
}
- pub(crate) fn anon_const_eval_cycle_result(
- _: &dyn HirDatabase,
+ pub(crate) fn anon_const_eval_cycle_result<'db>(
+ _: &'db dyn HirDatabase,
_: salsa::Id,
- _: AnonConstId,
+ _: AnonConstId<'db>,
_: StoredGenericArgs,
_: Option<StoredParamEnvAndCrate>,
- ) -> Result<StoredAllocation, ConstEvalError> {
+ ) -> Result<StoredAllocation, ConstEvalError<'db>> {
Err(ConstEvalError::MirLowerError(MirLowerError::Loop))
}
}
@@ -542,17 +543,17 @@ pub(crate) fn anon_const_eval<'db>(
pub(crate) fn const_eval_static<'db>(
db: &'db dyn HirDatabase,
def: StaticId,
-) -> Result<Allocation<'db>, ConstEvalError> {
+) -> Result<Allocation<'db>, ConstEvalError<'db>> {
return match const_eval_static_query(db, def) {
Ok(konst) => Ok(konst.as_ref()),
Err(err) => Err(err.clone()),
};
#[salsa::tracked(returns(ref), cycle_result = const_eval_static_cycle_result)]
- pub(crate) fn const_eval_static_query(
- db: &dyn HirDatabase,
+ pub(crate) fn const_eval_static_query<'db>(
+ db: &'db dyn HirDatabase,
def: StaticId,
- ) -> Result<StoredAllocation, ConstEvalError> {
+ ) -> Result<StoredAllocation, ConstEvalError<'db>> {
let interner = DbInterner::new_no_crate(db);
let body = db.monomorphized_mir_body(
def.into(),
@@ -564,11 +565,11 @@ pub(crate) fn const_eval_static<'db>(
Ok(c.store())
}
- pub(crate) fn const_eval_static_cycle_result(
- _: &dyn HirDatabase,
+ pub(crate) fn const_eval_static_cycle_result<'db>(
+ _: &'db dyn HirDatabase,
_: salsa::Id,
_: StaticId,
- ) -> Result<StoredAllocation, ConstEvalError> {
+ ) -> Result<StoredAllocation, ConstEvalError<'db>> {
Err(ConstEvalError::MirLowerError(MirLowerError::Loop))
}
}