feat: introduce EvalResult type

This commit is contained in:
rvcas
2023-03-08 01:10:15 -05:00
committed by KtorZ
parent 4f1d14f2a0
commit bd7b8792bf
6 changed files with 63 additions and 79 deletions

View File

@@ -279,13 +279,13 @@ impl Diagnostic for Error {
None => None,
Some(hint) => {
let budget = ExBudget { mem: i64::MAX, cpu: i64::MAX, };
let left = pretty::boxed("left", &match hint.left.eval(budget) {
(Ok(term), _, _) => format!("{term}"),
(Err(err), _, _) => format!("{err}"),
let left = pretty::boxed("left", &match hint.left.eval(budget).result() {
Ok(term) => format!("{term}"),
Err(err) => format!("{err}"),
});
let right = pretty::boxed("right", &match hint.right.eval(budget) {
(Ok(term), _, _) => format!("{term}"),
(Err(err), _, _) => format!("{err}"),
let right = pretty::boxed("right", &match hint.right.eval(budget).result() {
Ok(term) => format!("{term}"),
Err(err) => format!("{err}"),
});
let msg = match hint.bin_op {
BinOp::And => Some(format!("{left}\n\nand\n\n{right}\n\nshould both be true.")),

View File

@@ -37,7 +37,7 @@ use std::{
};
use telemetry::EventListener;
use uplc::{
ast::{Constant, DeBruijn, Term},
ast::{DeBruijn, Term},
machine::cost_model::ExBudget,
};
@@ -726,22 +726,16 @@ where
scripts
.into_par_iter()
.map(|script| match script.program.eval(initial_budget) {
(Ok(result), remaining_budget, logs) => EvalInfo {
success: result != Term::Error
&& result != Term::Constant(Constant::Bool(false).into()),
.map(|script| {
let mut eval_result = script.program.eval(initial_budget);
EvalInfo {
success: !eval_result.failed(),
script,
spent_budget: initial_budget - remaining_budget,
output: Some(result),
logs,
},
(Err(..), remaining_budget, logs) => EvalInfo {
success: false,
script,
spent_budget: initial_budget - remaining_budget,
output: None,
logs,
},
spent_budget: eval_result.cost(),
logs: eval_result.logs(),
output: eval_result.result().ok(),
}
})
.collect()
}