From b4a0f2209026a90bfd67072526f938e00c00af78 Mon Sep 17 00:00:00 2001 From: Mel Date: Mon, 29 Aug 2022 22:21:36 +0000 Subject: Put full function data onto call stack --- pkg/lang/vm/utils.go | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) (limited to 'pkg/lang/vm/utils.go') 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) { -- cgit 1.4.1