rust_multistackvm 0.38.0

Stack-based virtual machine on top of rust_multistack crate
Documentation
use crate::multistackvm::{VM, StackOps};
use rust_dynamic::value::Value;
use easy_error::{Error, bail};


#[time_graph::instrument]
pub fn execute_object(vm: &mut VM, value: Value, _op: StackOps, _err_prefix: String) -> Result<&mut VM, Error> {
    if vm.stack.current_stack_len() < 1 {
        bail!("Stack is too shallow for inline EXECUTE.OBJECT");
    }
    let name_value = match vm.stack.pull() {
        Some(name_value) => name_value,
        None => bail!("EXECUTE.OBJECT NO DATA #1"),
    };
    let name_str = match name_value.cast_string() {
        Ok(name_str) => name_str,
        Err(err) => bail!("EXECUTE.OBJECT casting name returns: {}", err),
    };
    vm.stack.push(value);
    vm.m(name_str)
}