parent
a9820677e9
commit
fb46ede3ca
13
src/state.rs
13
src/state.rs
|
@ -104,7 +104,7 @@ fn lw_string_format (l: &mut State, num_args: usize) -> usize {
|
||||||
assert_eq! (f_string, "%0.9f");
|
assert_eq! (f_string, "%0.9f");
|
||||||
let num = l.reg (1).as_float ().unwrap ();
|
let num = l.reg (1).as_float ().unwrap ();
|
||||||
|
|
||||||
let output = format! ("{}", num);
|
let output = format! ("{:0.9}", num);
|
||||||
|
|
||||||
*l.reg_mut (0) = Value::from (output);
|
*l.reg_mut (0) = Value::from (output);
|
||||||
1
|
1
|
||||||
|
@ -683,6 +683,8 @@ impl <'a> State <'a> {
|
||||||
for i in (offset)..(offset - 1 + b) {
|
for i in (offset)..(offset - 1 + b) {
|
||||||
self.registers [i] = self.registers [i + 1 + a].take ();
|
self.registers [i] = self.registers [i + 1 + a].take ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
self.top = popped_frame.register_offset - 1 + b - 1;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
// Return from the entire program
|
// Return from the entire program
|
||||||
|
@ -690,8 +692,9 @@ impl <'a> State <'a> {
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
Instruction::Return0 => {
|
Instruction::Return0 => {
|
||||||
self.stack.pop ();
|
let popped_frame = self.stack.pop ().unwrap ();
|
||||||
next_pc = self.stack.last ().unwrap ().program_counter;
|
next_pc = self.stack.last ().unwrap ().program_counter;
|
||||||
|
self.top = popped_frame.register_offset - 1 + 0;
|
||||||
},
|
},
|
||||||
Instruction::Return1 (a) => {
|
Instruction::Return1 (a) => {
|
||||||
let a = usize::try_from (*a).unwrap ();
|
let a = usize::try_from (*a).unwrap ();
|
||||||
|
@ -715,6 +718,8 @@ impl <'a> State <'a> {
|
||||||
// Shift output register down
|
// Shift output register down
|
||||||
let offset = popped_frame.register_offset;
|
let offset = popped_frame.register_offset;
|
||||||
self.registers [offset - 1] = self.registers [offset + a].take ();
|
self.registers [offset - 1] = self.registers [offset + a].take ();
|
||||||
|
|
||||||
|
self.top = popped_frame.register_offset - 1 + 1;
|
||||||
},
|
},
|
||||||
Instruction::SetField (a, b, c, k_flag) => {
|
Instruction::SetField (a, b, c, k_flag) => {
|
||||||
let value = if *k_flag {
|
let value = if *k_flag {
|
||||||
|
@ -812,8 +817,8 @@ impl <'a> State <'a> {
|
||||||
// Skip the PC increment
|
// Skip the PC increment
|
||||||
return Ok (None);
|
return Ok (None);
|
||||||
},
|
},
|
||||||
Instruction::Test (a, _k) => {
|
Instruction::Test (a, k) => {
|
||||||
if self.reg (*a).is_truthy() {
|
if self.reg (*a).is_truthy() != *k {
|
||||||
next_pc += 1;
|
next_pc += 1;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
|
@ -2,3 +2,6 @@ print ()
|
||||||
print ("asdf")
|
print ("asdf")
|
||||||
print (math.sqrt (16))
|
print (math.sqrt (16))
|
||||||
print (math.sqrt (16.0))
|
print (math.sqrt (16.0))
|
||||||
|
|
||||||
|
local N = tonumber (arg and arg [1]) or 1000
|
||||||
|
print (N)
|
||||||
|
|
Loading…
Reference in New Issue