From 18e7483580c000ee512f4a1f266b39c8f206ba65 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Edvard=20Th=C3=B6rnros?= Date: Thu, 21 Jan 2021 20:09:00 +0100 Subject: Pop upvalues --- src/vm.rs | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'src/vm.rs') 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); -- cgit v1.2.1