diff options
Diffstat (limited to 'src/vm.rs')
| -rw-r--r-- | src/vm.rs | 10 |
1 files changed, 10 insertions, 0 deletions
@@ -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); |
