diff options
Diffstat (limited to 'pkg/lang/vm/utils.go')
| -rw-r--r-- | pkg/lang/vm/utils.go | 14 |
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) { |
