From 9ea57aa461bff4a9afe1ad5f45d40783bd51acc8 Mon Sep 17 00:00:00 2001 From: Kasey White Date: Sat, 9 Jul 2022 15:41:31 -0400 Subject: [PATCH] Add some runtime types --- crates/uplc/src/machine.rs | 1 + crates/uplc/src/machine/runtime.rs | 44 ++++++++++++++++++++++++++++++ 2 files changed, 45 insertions(+) create mode 100644 crates/uplc/src/machine/runtime.rs diff --git a/crates/uplc/src/machine.rs b/crates/uplc/src/machine.rs index f6a10c44..92fd6d11 100644 --- a/crates/uplc/src/machine.rs +++ b/crates/uplc/src/machine.rs @@ -5,6 +5,7 @@ use crate::{ pub mod cost_model; mod error; +mod runtime; use cost_model::{ExBudget, MachineCosts, StepKind}; pub use error::Error; diff --git a/crates/uplc/src/machine/runtime.rs b/crates/uplc/src/machine/runtime.rs new file mode 100644 index 00000000..e69c6063 --- /dev/null +++ b/crates/uplc/src/machine/runtime.rs @@ -0,0 +1,44 @@ +use super::cost_model::{CostingFun, ExBudget}; + +enum RuntimeScheme { + RuntimeSchemeResult, + RuntimeSchemeArrow(usize), + RuntimeSchemeAll(usize), +} + +#[derive(std::cmp::PartialEq)] +enum EvalMode { + Immediate, + Deferred, +} + +struct BuiltinRuntimeOptions { + runtime_scheme: Vec, + immediate_eval: T, + deferred_eval: T, + budget: fn(CostingFun) -> fn(Vec) -> ExBudget, +} + +struct BuiltinRuntime { + runtime_scheme: Vec, + runtime_denotation: T, + budget: fn(Vec) -> ExBudget, +} + +impl BuiltinRuntime { + fn from_builtin_runtime_options( + eval_mode: EvalMode, + cost: CostingFun, + runtime_options: BuiltinRuntimeOptions, + ) -> BuiltinRuntime { + BuiltinRuntime { + runtime_scheme: runtime_options.runtime_scheme, + runtime_denotation: if eval_mode == EvalMode::Immediate { + runtime_options.immediate_eval + } else { + runtime_options.deferred_eval + }, + budget: (runtime_options.budget)(cost), + } + } +}