extern crate mrubyedge;
use std::rc::Rc;
use mrubyedge::yamrb::*;
use mrubyedge::rite::insn::OpCode;
use mrubyedge::rite::insn::Fetched;
fn main() {
let irep1 = vm::IREP {
__id: 0,
nlocals: 4,
nregs: 7,
rlen: 0,
code: vec![
op::Op { code: OpCode::ENTER, operand: Fetched::W(0x80000), pos: 0, len: 4 },
op::Op { code: OpCode::MOVE, operand: Fetched::BB(4, 1), pos: 4, len: 3 },
op::Op { code: OpCode::MOVE, operand: Fetched::BB(5, 2), pos: 7, len: 3 },
op::Op { code: OpCode::ADD, operand: Fetched::B(4), pos: 10, len: 2 },
op::Op { code: OpCode::RETURN, operand: Fetched::B(4), pos: 12, len: 2 },
],
syms: Vec::new(),
pool: Vec::new(),
reps: Vec::new(),
catch_target_pos: Vec::new(),
};
let irep0 = vm::IREP {
__id: 1,
nlocals: 3,
nregs: 7,
rlen: 1,
code: vec![
op::Op { code: OpCode::TCLASS, operand: Fetched::B(3), pos: 0, len: 2 },
op::Op { code: OpCode::METHOD, operand: Fetched::BB(4, 0), pos: 2, len: 3 },
op::Op { code: OpCode::DEF, operand: Fetched::BB(3, 0), pos: 5, len: 3 },
op::Op { code: OpCode::LOADI, operand: Fetched::BB(1, 100), pos: 8, len: 3 },
op::Op { code: OpCode::LOADI, operand: Fetched::BB(2, 200), pos: 11, len: 3 },
op::Op { code: OpCode::MOVE, operand: Fetched::BB(4, 1), pos: 14, len: 3 },
op::Op { code: OpCode::MOVE, operand: Fetched::BB(5, 2), pos: 17, len: 3 },
op::Op { code: OpCode::SSEND, operand: Fetched::BBB(3, 0, 2), pos: 20, len: 4 },
op::Op { code: OpCode::RETURN, operand: Fetched::B(3), pos: 24, len: 2 },
op::Op { code: OpCode::STOP, operand: Fetched::Z, pos: 26, len: 1 },
],
syms: vec![value::RSym::new("do_add".to_string())],
pool: Vec::new(),
reps: vec![Rc::new(irep1)],
catch_target_pos: Vec::new(),
};
let mut vm = vm::VM::new_by_raw_irep(irep0);
let ret = vm.run().unwrap();
dbg!(ret);
}