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.rs23
1 files changed, 19 insertions, 4 deletions
diff --git a/crates/hir-ty/src/consteval.rs b/crates/hir-ty/src/consteval.rs
index a56056b077..142766c039 100644
--- a/crates/hir-ty/src/consteval.rs
+++ b/crates/hir-ty/src/consteval.rs
@@ -56,6 +56,21 @@ pub enum ConstEvalError {
MirEvalError(MirEvalError),
}
+impl ConstEvalError {
+ pub fn pretty_print(
+ &self,
+ f: &mut String,
+ db: &dyn HirDatabase,
+ span_formatter: impl Fn(span::FileId, span::TextRange) -> String,
+ edition: span::Edition,
+ ) -> std::result::Result<(), std::fmt::Error> {
+ match self {
+ ConstEvalError::MirLowerError(e) => e.pretty_print(f, db, span_formatter, edition),
+ ConstEvalError::MirEvalError(e) => e.pretty_print(f, db, span_formatter, edition),
+ }
+ }
+}
+
impl From<MirLowerError> for ConstEvalError {
fn from(value: MirLowerError) -> Self {
match value {
@@ -253,7 +268,7 @@ pub(crate) fn const_eval_query(
}
GeneralConstId::InTypeConstId(c) => db.mir_body(c.into())?,
};
- let c = interpret_mir(db, body, false, trait_env).0?;
+ let c = interpret_mir(db, body, false, trait_env)?.0?;
Ok(c)
}
@@ -266,7 +281,7 @@ pub(crate) fn const_eval_static_query(
Substitution::empty(Interner),
db.trait_environment_for_body(def.into()),
)?;
- let c = interpret_mir(db, body, false, None).0?;
+ let c = interpret_mir(db, body, false, None)?.0?;
Ok(c)
}
@@ -298,7 +313,7 @@ pub(crate) fn const_eval_discriminant_variant(
Substitution::empty(Interner),
db.trait_environment_for_body(def),
)?;
- let c = interpret_mir(db, mir_body, false, None).0?;
+ let c = interpret_mir(db, mir_body, false, None)?.0?;
let c = if is_signed {
try_const_isize(db, &c).unwrap()
} else {
@@ -339,7 +354,7 @@ pub(crate) fn eval_to_const(
}
}
if let Ok(mir_body) = lower_to_mir(ctx.db, ctx.owner, ctx.body, &infer, expr) {
- if let Ok(result) = interpret_mir(db, Arc::new(mir_body), true, None).0 {
+ if let Ok((Ok(result), _)) = interpret_mir(db, Arc::new(mir_body), true, None) {
return result;
}
}