xmachine 0.2.1

A fast, cross platform virtual machine implemented in Rust without the Standard Library
Documentation
extern crate xmachine;
use xmachine::{Machine, Value};

#[cfg(test)]
mod object {
    use super::*;

    fn dict(xasm: &mut Machine) {
        xasm.push(Value::tree());
    }

    #[test]
    fn object() {
        let mut xasm = Machine::new();

        xasm.push(Value::function(dict, &xasm));
        xasm.copy();
        xasm.push(Value::string("new"));
        xasm.store();
        xasm.push(Value::function(
            |xasm: &mut Machine| {
                xasm.push(Value::string("new"));
                xasm.load();
                xasm.call();
                xasm.copy();
                xasm.push(Value::string("self"));
                xasm.store();
                xasm.push(Value::function(
                    |xasm: &mut Machine| {
                        xasm.push(Value::string("self"));
                        xasm.store();
                        xasm.push(Value::string("value"));
                        xasm.store();
                        xasm.push(Value::string("sign"));
                        xasm.store();
                        xasm.push(Value::string("value"));
                        xasm.load();
                        xasm.copy();
                        xasm.push(Value::string("self"));
                        xasm.load();
                        xasm.push(Value::string("value"));
                        xasm.index();
                        xasm.assign();
                        xasm.push(Value::string("sign"));
                        xasm.load();
                        xasm.copy();
                        xasm.push(Value::string("self"));
                        xasm.load();
                        xasm.push(Value::string("sign"));
                        xasm.index();
                        xasm.assign();
                        xasm.push(Value::string("self"));
                        xasm.load();
                    },
                    &xasm,
                ));
                xasm.copy();
                xasm.push(Value::string("self"));
                xasm.load();
                xasm.push(Value::string("constructor"));
                xasm.index();
                xasm.assign();
                xasm.push(Value::function(
                    |xasm: &mut Machine| {
                        xasm.push(Value::string("self"));
                        xasm.store();
                        xasm.push(Value::string("value"));
                        xasm.store();
                        xasm.push(Value::string("value"));
                        xasm.load();
                        xasm.copy();
                        xasm.push(Value::string("self"));
                        xasm.load();
                        xasm.push(Value::string("value"));
                        xasm.index();
                        xasm.assign();
                    },
                    &xasm,
                ));
                xasm.copy();
                xasm.push(Value::string("self"));
                xasm.load();
                xasm.push(Value::string("set_value"));
                xasm.index();
                xasm.assign();
                xasm.push(Value::string("self"));
                xasm.load();
            },
            &xasm,
        ));
        xasm.copy();
        xasm.push(Value::string("Number"));
        xasm.store();
        xasm.push(Value::number(0));
        xasm.push(Value::number(5));
        xasm.push(Value::string("Number"));
        xasm.load();
        xasm.call();
        xasm.push(Value::string("constructor"));
        xasm.method_call();
        xasm.push(Value::string("value"));
        xasm.index();

        assert_eq!(i32::from(xasm.get_arg()), 5);
    }
}