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 {
nlocals: 3,
nregs: 8,
rlen: 0,
code: vec![
op::Op { code: OpCode::ENTER, operand: Fetched::W(0x40000), pos: 0, len: 4 },
op::Op { code: OpCode::MOVE, operand: Fetched::BB(3, 1), pos: 4, len: 3 },
op::Op { code: OpCode::LOADI_1, operand: Fetched::B(4), pos: 7, len: 2 },
op::Op { code: OpCode::LT, operand: Fetched::B(3), pos: 9, len: 2 },
op::Op { code: OpCode::JMPNOT, operand: Fetched::BS(3, 22-11-4), pos: 11, len: 4 },
op::Op { code: OpCode::LOADI_0, operand: Fetched::B(3), pos: 15, len: 2 },
op::Op { code: OpCode::RETURN, operand: Fetched::B(3), pos: 17, len: 2 },
op::Op { code: OpCode::JMP, operand: Fetched::S(64-19-3), pos: 19, len: 3 },
op::Op { code: OpCode::MOVE, operand: Fetched::BB(3, 1), pos: 22, len: 3 },
op::Op { code: OpCode::LOADI_3, operand: Fetched::B(4), pos: 25, len: 2 },
op::Op { code: OpCode::LT, operand: Fetched::B(3), pos: 27, len: 2 },
op::Op { code: OpCode::JMPNOT, operand: Fetched::BS(3, 40-29-4), pos: 29, len: 4 },
op::Op { code: OpCode::LOADI_1, operand: Fetched::B(3), pos: 33, len: 2 },
op::Op { code: OpCode::RETURN, operand: Fetched::B(3), pos: 35, len: 2 },
op::Op { code: OpCode::JMP, operand: Fetched::S(64-37-3), pos: 37, len: 3},
op::Op { code: OpCode::MOVE, operand: Fetched::BB(4, 1), pos: 40, len: 3 },
op::Op { code: OpCode::SUBI, operand: Fetched::BB(4, 1), pos: 43, len: 3 },
op::Op { code: OpCode::SSEND, operand: Fetched::BBB(3, 0, 1), pos: 46, len: 4 },
op::Op { code: OpCode::MOVE, operand: Fetched::BB(5, 1), pos: 50, len: 3 },
op::Op { code: OpCode::SUBI, operand: Fetched::BB(5, 2), pos: 53, len: 3 },
op::Op { code: OpCode::SSEND, operand: Fetched::BBB(4, 0, 1), pos: 56, len: 4 },
op::Op { code: OpCode::ADD, operand: Fetched::B(3), pos: 60, len: 2 },
op::Op { code: OpCode::RETURN, operand: Fetched::B(3), pos: 62, len: 2 },
op::Op { code: OpCode::RETURN, operand: Fetched::B(3), pos: 64, len: 2 },
],
syms: vec![value::RSym::new("fib".to_string())],
pool: Vec::new(),
reps: Vec::new(),
};
let irep0 = vm::IREP {
nlocals: 1,
nregs: 3,
rlen: 1,
code: vec![
op::Op { code: OpCode::TCLASS, operand: Fetched::B(1), pos: 0, len: 2 },
op::Op { code: OpCode::METHOD, operand: Fetched::BB(2, 0), pos: 2, len: 3 },
op::Op { code: OpCode::DEF, operand: Fetched::BB(1, 0), pos: 5, len: 3 },
op::Op { code: OpCode::LOADI, operand: Fetched::BB(2, 25), pos: 8, len: 3 },
op::Op { code: OpCode::SSEND, operand: Fetched::BBB(1, 0, 1), pos: 11, len: 4 },
op::Op { code: OpCode::RETURN, operand: Fetched::B(1), pos: 15, len: 2 },
op::Op { code: OpCode::STOP, operand: Fetched::Z, pos: 17, len: 1 },
],
syms: vec![value::RSym::new("fib".to_string())],
pool: Vec::new(),
reps: vec![Rc::new(irep1)],
};
let mut vm = vm::VM::new_by_raw_irep(irep0);
let ret = vm.run().unwrap();
dbg!(ret);
}