diff options
| author | Mel <einebeere@gmail.com> | 2022-08-29 22:21:36 +0000 |
|---|---|---|
| committer | Mel <einebeere@gmail.com> | 2022-08-29 22:21:36 +0000 |
| commit | b4a0f2209026a90bfd67072526f938e00c00af78 (patch) | |
| tree | c830edfa2cab2b4a679b8501d36171a39b319a58 /pkg/lang/vm/utils.go | |
| parent | 1bc5eb0d13bb001b4ac7f456c6a61fedcd53f0c8 (diff) | |
| download | jinx-b4a0f2209026a90bfd67072526f938e00c00af78.tar.zst jinx-b4a0f2209026a90bfd67072526f938e00c00af78.zip | |
Put full function data onto call stack
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) { |
