lunar_wave/src/main.rs

48 lines
1.0 KiB
Rust

// 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);
}