diff options
| author | Mel <einebeere@gmail.com> | 2022-08-29 20:30:10 +0000 |
|---|---|---|
| committer | Mel <einebeere@gmail.com> | 2022-08-29 20:40:44 +0000 |
| commit | 1bc5eb0d13bb001b4ac7f456c6a61fedcd53f0c8 (patch) | |
| tree | 336f8eb7e3e49cf647eec3abc4be18412bc0f684 /pkg/lang/vm/exec.go | |
| parent | 1f5a49151fc2f72932eedf8162b63af670556910 (diff) | |
| download | jinx-1bc5eb0d13bb001b4ac7f456c6a61fedcd53f0c8.tar.zst jinx-1bc5eb0d13bb001b4ac7f456c6a61fedcd53f0c8.zip | |
Stop ignoring val.Drop and val.Clone memory errors
Diffstat (limited to 'pkg/lang/vm/exec.go')
| -rw-r--r-- | pkg/lang/vm/exec.go | 91 |
1 files changed, 73 insertions, 18 deletions
diff --git a/pkg/lang/vm/exec.go b/pkg/lang/vm/exec.go index a64751a..8cdcdcc 100644 --- a/pkg/lang/vm/exec.go +++ b/pkg/lang/vm/exec.go @@ -120,7 +120,11 @@ func (vm *VM) execGetGlobal(name string) error { return ErrNoSuchGlobal{GlobalName: name} } - v = v.Clone(vm.memory) + v, err = v.Clone(vm.memory) + if err != nil { + return err + } + vm.stack.Push(v) return nil } @@ -150,7 +154,10 @@ func (vm *VM) execGetLocal(offset int) error { return err } - v := local.Clone(vm.memory) + v, err := local.Clone(vm.memory) + if err != nil { + return err + } vm.stack.Push(v) return nil @@ -167,7 +174,9 @@ func (vm *VM) execSetLocal(offset int) error { return err } - local.Drop(vm.memory) + if err := local.Drop(vm.memory); err != nil { + return err + } stackIndex := vm.stack.LocalToStackIndex(offset) return vm.stack.Set(stackIndex, new) @@ -211,10 +220,17 @@ func (vm *VM) execGetMember(name string) error { objCell := cell.(value.ObjectCell) member, ok := objCell.Get()[name] if ok { - member = member.Clone(vm.memory) + member, err = member.Clone(vm.memory) + if err != nil { + return err + } vm.stack.Push(member) - parent.Drop(vm.memory) + + if err := parent.Drop(vm.memory); err != nil { + return err + } + return nil } } @@ -250,7 +266,11 @@ func (vm *VM) execGetMember(name string) error { // method = method.Clone(vm.memory) will only be necessary when we support methods with environments. vm.stack.Push(method) - parent.Drop(vm.memory) + + if err := parent.Drop(vm.memory); err != nil { + return err + } + return nil } } @@ -303,7 +323,9 @@ func (vm *VM) execGetMember(name string) error { val := value.NewFunction(code.Pos{}, 0).WithData(member) vm.stack.Push(val) - parent.Drop(vm.memory) + if err := parent.Drop(vm.memory); err != nil { + return err + } return nil } @@ -342,7 +364,9 @@ func (vm *VM) execSetMember(name string) error { return err } - parent.Drop(vm.memory) + if err := parent.Drop(vm.memory); err != nil { + return err + } // v was moved, no need to drop it. return nil @@ -365,7 +389,11 @@ func (vm *VM) execGetEnv(envIndex int) error { if outletCell != nil { // Outlet is not null, so value escaped. outlet := outletCell.(value.OutletCell).Get() - val := outlet.Clone(vm.memory) + val, err := outlet.Clone(vm.memory) + if err != nil { + return err + } + vm.stack.Push(val) return nil } @@ -377,7 +405,11 @@ func (vm *VM) execGetEnv(envIndex int) error { return err } - val = val.Clone(vm.memory) + val, err = val.Clone(vm.memory) + if err != nil { + return err + } + vm.stack.Push(val) return nil @@ -404,7 +436,10 @@ func (vm *VM) execSetEnv(envIndex int) error { if outletCell != nil { // Outlet is not null, so value escaped. outlet := outletCell.(value.OutletCell).Get() - outlet.Drop(vm.memory) + if err := outlet.Drop(vm.memory); err != nil { + return err + } + vm.memory.Set(outletPtr, value.OutletCell(new)) return nil } @@ -415,7 +450,9 @@ func (vm *VM) execSetEnv(envIndex int) error { return err } - old.Drop(vm.memory) + if err := old.Drop(vm.memory); err != nil { + return err + } return vm.stack.Set(stackIndex, new) } @@ -583,8 +620,13 @@ func (vm *VM) execGenericBinaryOperation(op code.Op, fns typesToBinaryOperation) return err } - x.Drop(vm.memory) - y.Drop(vm.memory) + if err := x.Drop(vm.memory); err != nil { + return err + } + + if err := y.Drop(vm.memory); err != nil { + return err + } vm.stack.Push(res) return nil @@ -735,8 +777,13 @@ func (vm *VM) execEq() error { } result := func(res bool) error { - x.Drop(vm.memory) - y.Drop(vm.memory) + if err := x.Drop(vm.memory); err != nil { + return err + } + + if err := y.Drop(vm.memory); err != nil { + return err + } vm.stack.Push(value.NewBool(res)) return nil @@ -812,7 +859,12 @@ func (vm *VM) execIndex() error { if err != nil { return err } - val = val.Clone(vm.memory) + + val, err = val.Clone(vm.memory) + if err != nil { + return err + } + vm.stack.Push(val) default: return ErrInvalidOperandTypes{ @@ -1027,7 +1079,10 @@ func (vm *VM) execTempArrLen() error { } res := value.NewInt(int64(len)) vm.stack.Push(res) - a.Drop(vm.memory) + + if err := a.Drop(vm.memory); err != nil { + return err + } default: return ErrInvalidOperandTypes{ Op: code.OpTempArrLen, |
