aboutsummaryrefslogtreecommitdiffstats
path: root/src/vm.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/vm.rs')
-rw-r--r--src/vm.rs10
1 files changed, 10 insertions, 0 deletions
diff --git a/src/vm.rs b/src/vm.rs
index 3a3e752..177c547 100644
--- a/src/vm.rs
+++ b/src/vm.rs
@@ -590,6 +590,12 @@ impl VM {
return Ok(OpResult::Done);
} else {
self.stack[last.stack_offset] = self.stack.pop().unwrap();
+ for slot in last.stack_offset+1..self.stack.len() {
+ if self.upvalues.contains_key(&slot) {
+ let value = self.stack[slot].clone();
+ self.drop_upvalue(slot, value);
+ }
+ }
self.stack.truncate(last.stack_offset + 1);
}
}
@@ -653,6 +659,10 @@ impl VM {
self.stack.push(value.clone());
}
+ Op::PopUpvalue => {
+ self.stack.pop().unwrap();
+ }
+
Op::ReadUpvalue(slot) => {
let value = self.frame().block.borrow().ups[slot].2.as_value();
self.stack.push(value);