rust_multistackvm 0.38.0

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


pub fn stdlib_autoadd_enable_inline(vm: &mut VM) -> Result<&mut VM, Error> {
    if vm.autoadd {
        bail!("You can not nest autocollection");
    }
    if vm.stack.current_stack_len() < 1 {
        bail!("Stack is too shallow for autocollection");
    }
    vm.autoadd = true;
    Ok(vm)
}

pub fn stdlib_autoadd_disable_inline(vm: &mut VM) -> Result<&mut VM, Error> {
    if ! vm.autoadd {
        bail!("You can not nest autocollection");
    }
    if vm.stack.current_stack_len() < 1 {
        bail!("Stack is too shallow for autocollection");
    }
    vm.autoadd = false;
    Ok(vm)
}

pub fn init_stdlib(vm: &mut VM) {
    let _ = vm.register_command(":".to_string(), stdlib_autoadd_enable_inline);
    let _ = vm.register_command(";".to_string(), stdlib_autoadd_disable_inline);
}