rust_multistackvm 0.38.0

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

impl VM {
    #[time_graph::instrument]
    pub fn lambda_eval_in(&mut self, name: String, value: Value) -> Result<&mut VM, Error> {
        match value.dt {
            LAMBDA => {
                match value.cast_lambda() {
                    Ok(lambda_content) => {
                        for v in lambda_content {
                            match self.apply_in(name.clone(), v) {
                                Ok(_) => {}
                                Err(err) => {
                                    bail!("Lambda content evaluation returned error: {}", err);
                                }
                            }
                        }
                    }
                    Err(err) => {
                        bail!("Can not get the lambda body: {}", err);
                    }
                }
            }
            _ => {
                bail!("This is not a lambda");
            }
        }
        Ok(self)
    }
}