about summary refs log tree commit diff
path: root/pkg/lang/vm/vm.go
diff options
context:
space:
mode:
authorMel <einebeere@gmail.com>2022-05-28 01:22:17 +0000
committerGitHub <noreply@github.com>2022-05-28 01:22:17 +0000
commit0a7700112f82e634a957685bee0cbaa3458f4945 (patch)
tree847c397970d7d852bc988a7a01f4625eae443edb /pkg/lang/vm/vm.go
parent83d1dc87f3336d70ccda476627c70c282b7b6e11 (diff)
downloadjinx-0a7700112f82e634a957685bee0cbaa3458f4945.tar.zst
jinx-0a7700112f82e634a957685bee0cbaa3458f4945.zip
Harden VM Mem
Diffstat (limited to 'pkg/lang/vm/vm.go')
-rw-r--r--pkg/lang/vm/vm.go31
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()
-}