mod loader; mod state; #[cfg (test)] mod tests; fn main() { use state::{ Block, Chunk, Instruction as Inst, State, }; let chunk = Chunk { blocks: vec! [ Block { instructions: vec! [ Inst::VarArgPrep (0), Inst::Closure (0, 0), Inst::Move (1, 0), Inst::Call (1, 1, 2), Inst::GetTabUp (2, 0, 0), Inst::Move (3, 1), Inst::Call (3, 1, 0), Inst::Call (2, 0, 1), Inst::Return (2, 1, 1, false), ], constants: vec! [ "print".into (), ], upvalue_count: 1, }, Block { instructions: vec! [ Inst::LoadI (0, 5), Inst::Closure (1, 0), Inst::Return (1, 2, 0, true), // k? Inst::Return (1, 1, 0, true), // k? ], constants: vec! [], upvalue_count: 0, }, Block { instructions: vec! [ Inst::GetUpVal (0, 0), Inst::Return1 (0), Inst::Return0, ], constants: vec! [], upvalue_count: 1, }, ], }; let mut vm = State::default (); if std::env::var("LUA_DEBUG").is_ok() { vm.debug_print = true; } let upvalues = State::upvalues_from_args (std::env::args ()); println! ("Returned: {:?}", vm.execute_chunk (&chunk, &upvalues)); }