2023-09-25 01:40:28 +00:00
|
|
|
mod loader;
|
2023-09-24 22:40:45 +00:00
|
|
|
mod state;
|
2023-09-24 21:34:28 +00:00
|
|
|
|
2023-09-24 22:40:45 +00:00
|
|
|
#[cfg (test)]
|
|
|
|
mod tests;
|
2023-09-24 21:34:28 +00:00
|
|
|
|
2023-09-24 21:16:10 +00:00
|
|
|
fn main() {
|
2023-09-25 03:14:08 +00:00
|
|
|
use state::State;
|
2023-09-24 22:40:45 +00:00
|
|
|
|
2023-09-25 03:14:08 +00:00
|
|
|
let lua_file = {
|
|
|
|
let data = std::fs::read ("test_vectors/closure.luac").unwrap ();
|
|
|
|
let mut rdr = std::io::Cursor::new (data);
|
|
|
|
loader::parse_chunk (&mut rdr).unwrap ()
|
2023-09-24 21:16:10 +00:00
|
|
|
};
|
2023-09-25 05:23:53 +00:00
|
|
|
assert_eq! (lua_file.blocks.len (), 3);
|
2023-09-24 21:16:10 +00:00
|
|
|
|
2023-09-24 22:40:45 +00:00
|
|
|
let mut vm = State::default ();
|
2023-09-25 00:47:17 +00:00
|
|
|
if std::env::var("LUA_DEBUG").is_ok() {
|
|
|
|
vm.debug_print = true;
|
|
|
|
}
|
|
|
|
|
2023-09-24 22:40:45 +00:00
|
|
|
let upvalues = State::upvalues_from_args (std::env::args ());
|
2023-09-25 05:23:53 +00:00
|
|
|
|
|
|
|
vm.breakpoints.push (state::Breakpoint {
|
|
|
|
block_idx: 2,
|
|
|
|
program_counter: 3,
|
|
|
|
});
|
|
|
|
vm.breakpoints.push (state::Breakpoint {
|
|
|
|
block_idx: 0,
|
|
|
|
program_counter: 10,
|
|
|
|
});
|
|
|
|
|
2023-09-25 03:14:08 +00:00
|
|
|
println! ("Returned: {:?}", vm.execute_chunk (&lua_file, &upvalues));
|
2023-09-24 21:57:12 +00:00
|
|
|
}
|