pub(crate) mod executor;
pub(crate) mod num_helpers;
pub(crate) mod simd;
pub(crate) mod stack;
pub(crate) mod values;
#[cfg(not(feature = "std"))]
mod no_std_floats;
use crate::{Result, Store, interpreter::stack::CallFrame};
pub(crate) use simd::*;
pub(crate) use values::*;
#[derive(Clone)]
#[cfg_attr(feature = "debug", derive(Debug))]
pub(crate) enum ExecState {
Completed,
Suspended(CallFrame),
}
#[derive(Default)]
#[cfg_attr(feature = "debug", derive(Debug))]
pub(crate) struct InterpreterRuntime;
impl InterpreterRuntime {
pub(crate) fn exec(store: &mut Store, cf: CallFrame, call_stack_base: u32) -> Result<()> {
executor::Executor::new(store, cf, call_stack_base).run_to_completion()
}
pub(crate) fn exec_with_fuel(store: &mut Store, cf: CallFrame, fuel: u32) -> Result<ExecState> {
executor::Executor::new(store, cf, 0).run_with_fuel(fuel)
}
#[cfg(feature = "std")]
pub(crate) fn exec_with_time_budget(
store: &mut Store,
cf: CallFrame,
time_budget: core::time::Duration,
) -> Result<ExecState> {
executor::Executor::new(store, cf, 0).run_with_time_budget(time_budget)
}
}