🐛 bug: fix up printing to mostly match PUC Lua
The numbers are still off, since I didn't separate floats and ints yetmain
parent
7b1fb49775
commit
bc15781457
|
@ -58,7 +58,11 @@ pub fn parse_inst (buf: [u8; 4]) -> Option <Inst>
|
|||
Some (match opcode {
|
||||
0x00 => Inst::Move (a, b),
|
||||
0x01 => Inst::LoadI (a, sbx),
|
||||
0x02 => Inst::LoadF (a, sbx),
|
||||
0x03 => Inst::LoadK (a, bx),
|
||||
0x05 => Inst::LoadFalse (a),
|
||||
0x07 => Inst::LoadTrue (a),
|
||||
0x08 => Inst::LoadNil (a),
|
||||
0x09 => Inst::GetUpVal (a, b),
|
||||
0x0b => Inst::GetTabUp (a, b, c),
|
||||
0x0d => Inst::GetI (a, b, c),
|
||||
|
|
|
@ -26,5 +26,5 @@ fn main () {
|
|||
program_counter: 0,
|
||||
});
|
||||
|
||||
println! ("Returned: {:?}", vm.execute_chunk (&lua_file, &upvalues));
|
||||
vm.execute_chunk (&lua_file, &upvalues);
|
||||
}
|
||||
|
|
24
src/state.rs
24
src/state.rs
|
@ -21,6 +21,9 @@ pub enum Instruction {
|
|||
// Jump
|
||||
Jmp (i32),
|
||||
|
||||
// Load F (Float?)
|
||||
LoadF (u8, i32),
|
||||
|
||||
LoadFalse (u8),
|
||||
|
||||
// Load Integer?
|
||||
|
@ -29,6 +32,8 @@ pub enum Instruction {
|
|||
// Load Constant
|
||||
LoadK (u8, i32),
|
||||
|
||||
LoadNil (u8),
|
||||
|
||||
LoadTrue (u8),
|
||||
|
||||
// MetaMethod, Binary
|
||||
|
@ -304,7 +309,16 @@ impl State {
|
|||
// assert_eq! (*b, 2);
|
||||
assert_eq! (*c, 1);
|
||||
|
||||
println! ("{:?}", r.get (a + 1).unwrap ());
|
||||
let value = r.get (a + 1).unwrap ();
|
||||
let s = match value {
|
||||
Value::Nil => println! ("nil"),
|
||||
Value::Boolean (false) => println! ("false"),
|
||||
Value::Boolean (true) => println! ("true"),
|
||||
Value::Float (x) => println! ("{}", x),
|
||||
Value::String (s) => println! ("{}", s),
|
||||
_ => unimplemented! (),
|
||||
};
|
||||
|
||||
r [a] = r [a + 1].take ();
|
||||
},
|
||||
_ => {
|
||||
|
@ -389,6 +403,10 @@ impl State {
|
|||
self.register_window_mut ()[a] = upvalues [b].clone ();
|
||||
},
|
||||
Instruction::Jmp (s_j) => next_pc += s_j,
|
||||
Instruction::LoadF (a, sbx) => {
|
||||
let a = usize::try_from (*a).unwrap ();
|
||||
self.register_window_mut ()[a] = Value::Float (*sbx as f64);
|
||||
}
|
||||
Instruction::LoadFalse (a) => {
|
||||
let a = usize::try_from (*a).unwrap ();
|
||||
self.register_window_mut ()[a] = Value::Boolean (false);
|
||||
|
@ -404,6 +422,10 @@ impl State {
|
|||
|
||||
self.register_window_mut ()[a] = k [bx].clone ();
|
||||
},
|
||||
Instruction::LoadNil (a) => {
|
||||
let a = usize::try_from (*a).unwrap ();
|
||||
self.register_window_mut ()[a] = Value::Nil;
|
||||
},
|
||||
Instruction::LoadTrue (a) => {
|
||||
let a = usize::try_from (*a).unwrap ();
|
||||
self.register_window_mut ()[a] = Value::Boolean (true);
|
||||
|
|
|
@ -1 +1,6 @@
|
|||
print (nil)
|
||||
print (false)
|
||||
print (true)
|
||||
print (1993)
|
||||
print (1993.0)
|
||||
print "Hello."
|
||||
|
|
Loading…
Reference in New Issue