diff options
| author | Mel <einebeere@gmail.com> | 2022-05-28 01:22:17 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-05-28 01:22:17 +0000 |
| commit | 0a7700112f82e634a957685bee0cbaa3458f4945 (patch) | |
| tree | 847c397970d7d852bc988a7a01f4625eae443edb /pkg/lang/vm/vm.go | |
| parent | 83d1dc87f3336d70ccda476627c70c282b7b6e11 (diff) | |
| download | jinx-0a7700112f82e634a957685bee0cbaa3458f4945.tar.zst jinx-0a7700112f82e634a957685bee0cbaa3458f4945.zip | |
Harden VM Mem
Diffstat (limited to 'pkg/lang/vm/vm.go')
| -rw-r--r-- | pkg/lang/vm/vm.go | 31 |
1 files changed, 5 insertions, 26 deletions
diff --git a/pkg/lang/vm/vm.go b/pkg/lang/vm/vm.go index c933af4..9c17a3f 100644 --- a/pkg/lang/vm/vm.go +++ b/pkg/lang/vm/vm.go @@ -3,7 +3,6 @@ package vm import ( "jinx/pkg/lang/vm/code" "jinx/pkg/lang/vm/mem" - "jinx/pkg/lang/vm/value" ) type VM struct { @@ -28,8 +27,11 @@ func (vm *VM) GetResult() (string, error) { return "", err } - str := res.Data().String(&vm.memory) - return str, nil + if str, err := res.Data().String(&vm.memory); err == nil { + return str, nil + } else { + return "", err + } } func (vm *VM) Run() error { @@ -169,26 +171,3 @@ func (vm *VM) step(op code.Op) (stepDecision, error) { return stepDecisionContinue, err } - -func (vm *VM) popAndDrop() (value.Value, error) { - v, err := vm.stack.Pop() - if err != nil { - return value.Value{}, err - } - v.Drop(&vm.memory) - return v, nil -} - -func (vm *VM) popCallAndDrop() (int, error) { - envPtr := vm.stack.CurrentCallEnv() - vm.memory.Release(envPtr) - - for !vm.stack.ReachedBaseOfCall() { - _, err := vm.popAndDrop() - if err != nil { - return 0, err - } - } - - return vm.stack.PopCall() -} |
