// cargo run -- --script test_vectors/fizz_buzz.lua mod instruction; mod loader; mod state; mod value; #[cfg (test)] mod tests; fn main () { use state::State; let mut script = String::from ("test_vectors/hello.lua"); let mut args = std::env::args (); let exe_name = args.next ().unwrap (); while let Some (arg) = args.next () { match arg.as_str () { "--script" => script = args.next ().unwrap (), "--" => break, _ => panic! ("can't parse args"), } } let lua_file = { let source = std::fs::read (script).expect ("couldn't load Lua source code"); let bytecode = loader::compile_bytecode(source); let mut rdr = std::io::Cursor::new (bytecode); loader::parse_chunk (&mut rdr).unwrap () }; let mut vm = State::default (); if std::env::var("LUA_DEBUG").is_ok() { vm.debug_print = true; } let upvalues = State::upvalues_from_args ([exe_name].into_iter ().chain (args)); vm.breakpoints.push (state::Breakpoint { block_idx: 3, program_counter: 0, }); vm.execute_chunk (&lua_file, &upvalues); }