about summary refs log tree commit diff
path: root/pkg/lang/vm/utils.go
diff options
context:
space:
mode:
Diffstat (limited to 'pkg/lang/vm/utils.go')
-rw-r--r--pkg/lang/vm/utils.go14
1 files changed, 10 insertions, 4 deletions
diff --git a/pkg/lang/vm/utils.go b/pkg/lang/vm/utils.go
index eddcc11..166d404 100644
--- a/pkg/lang/vm/utils.go
+++ b/pkg/lang/vm/utils.go
@@ -19,9 +19,6 @@ func (vm *VM) popAndDrop() (value.Value, error) {
 }
 
 func (vm *VM) popCallAndDrop() (code.Pos, error) {
-	envPtr := vm.stack.CurrentCallEnv()
-	vm.memory.Release(envPtr)
-
 	for !vm.stack.ReachedBaseOfCall() {
 		_, err := vm.popAndDrop()
 		if err != nil {
@@ -29,7 +26,16 @@ func (vm *VM) popCallAndDrop() (code.Pos, error) {
 		}
 	}
 
-	return vm.stack.PopCall()
+	fn, returnPos, err := vm.stack.PopCall()
+	if err != nil {
+		return code.Pos{}, err
+	}
+
+	if err := value.NewFunction(code.Pos{}, 0).WithData(fn).Drop(vm.memory); err != nil {
+		return code.Pos{}, err
+	}
+
+	return returnPos, nil
 }
 
 func (vm *VM) getMemCell(ptr mem.Ptr, kind mem.CellKind, allowNil bool) (mem.CellData, error) {