about summary refs log tree commit diff
path: root/pkg/lang/vm/exec.go
diff options
context:
space:
mode:
authorMel <einebeere@gmail.com>2022-06-26 21:54:38 +0200
committerMel <einebeere@gmail.com>2022-06-26 21:54:38 +0200
commit18c7ab70ded45c76abb0b35c090b942a7bfcc3b4 (patch)
tree6505f6197bd276b4a4bfbac3707064492c5626c8 /pkg/lang/vm/exec.go
parent621f624f50a7bef16eeed02113b470e79e790cd9 (diff)
downloadjinx-18c7ab70ded45c76abb0b35c090b942a7bfcc3b4.tar.zst
jinx-18c7ab70ded45c76abb0b35c090b942a7bfcc3b4.zip
Change arguments order in VM to match expectation
Diffstat (limited to 'pkg/lang/vm/exec.go')
-rw-r--r--pkg/lang/vm/exec.go59
1 files changed, 31 insertions, 28 deletions
diff --git a/pkg/lang/vm/exec.go b/pkg/lang/vm/exec.go
index 4fbc516..93b8845 100644
--- a/pkg/lang/vm/exec.go
+++ b/pkg/lang/vm/exec.go
@@ -218,12 +218,12 @@ func (vm *VM) execGetMember(name string) error {
 }
 
 func (vm *VM) execSetMember(name string) error {
-	parent, err := vm.stack.Pop()
+	v, err := vm.stack.Pop()
 	if err != nil {
 		return err
 	}
 
-	v, err := vm.stack.Pop()
+	parent, err := vm.stack.Pop()
 	if err != nil {
 		return err
 	}
@@ -394,12 +394,12 @@ func (vm *VM) execAddToEnv(localIndex int) error {
 }
 
 func (vm *VM) execAnchorType() error {
-	o, err := vm.stack.Pop()
+	t, err := vm.stack.Pop()
 	if err != nil {
 		return err
 	}
 
-	t, err := vm.stack.Pop()
+	o, err := vm.stack.Pop()
 	if err != nil {
 		return err
 	}
@@ -433,11 +433,11 @@ func (vm *VM) execAnchorType() error {
 }
 
 func (vm *VM) execAdd() error {
-	x, err := vm.stack.Pop()
+	y, err := vm.stack.Pop()
 	if err != nil {
 		return err
 	}
-	y, err := vm.stack.Pop()
+	x, err := vm.stack.Pop()
 	if err != nil {
 		return err
 	}
@@ -517,11 +517,11 @@ func (vm *VM) execAdd() error {
 }
 
 func (vm *VM) execSub() error {
-	x, err := vm.popAndDrop()
+	y, err := vm.popAndDrop()
 	if err != nil {
 		return err
 	}
-	y, err := vm.popAndDrop()
+	x, err := vm.popAndDrop()
 	if err != nil {
 		return err
 	}
@@ -574,11 +574,11 @@ func (vm *VM) execSub() error {
 }
 
 func (vm *VM) execMod() error {
-	x, err := vm.popAndDrop()
+	y, err := vm.popAndDrop()
 	if err != nil {
 		return err
 	}
-	y, err := vm.popAndDrop()
+	x, err := vm.popAndDrop()
 	if err != nil {
 		return err
 	}
@@ -612,11 +612,11 @@ func (vm *VM) execMod() error {
 }
 
 func (vm *VM) execIndex() error {
-	v, err := vm.popAndDrop()
+	i, err := vm.popAndDrop()
 	if err != nil {
 		return err
 	}
-	i, err := vm.popAndDrop()
+	v, err := vm.popAndDrop()
 	if err != nil {
 		return err
 	}
@@ -663,11 +663,11 @@ func (vm *VM) execIndex() error {
 }
 
 func (vm *VM) execLte() error {
-	x, err := vm.popAndDrop()
+	y, err := vm.popAndDrop()
 	if err != nil {
 		return err
 	}
-	y, err := vm.popAndDrop()
+	x, err := vm.popAndDrop()
 	if err != nil {
 		return err
 	}
@@ -720,6 +720,16 @@ func (vm *VM) execLte() error {
 }
 
 func (vm *VM) execCall(argCount uint) error {
+	var err error
+
+	args := make([]value.Value, argCount)
+	for i := 0; i < int(argCount); i++ {
+		args[i], err = vm.stack.Pop()
+		if err != nil {
+			return err
+		}
+	}
+
 	f, err := vm.stack.Pop()
 	if err != nil {
 		return err
@@ -746,19 +756,7 @@ func (vm *VM) execCall(argCount uint) error {
 		return err
 	}
 
-	if err = vm.stack.ShiftTopCallBase(int(argCount)); err != nil {
-		return err
-	}
-
 	if fn.Native() != nil {
-		args := make([]value.Value, argCount)
-		for i := 0; i < int(argCount); i++ {
-			args[i], err = vm.stack.Pop()
-			if err != nil {
-				return err
-			}
-		}
-
 		val, err := fn.Native()(args)
 		if err != nil {
 			return err
@@ -774,6 +772,11 @@ func (vm *VM) execCall(argCount uint) error {
 
 		return nil
 	}
+
+	for _, arg := range args {
+		vm.stack.Push(arg)
+	}
+
 	vm.pc = fn.Pc()
 
 	return nil
@@ -851,11 +854,11 @@ func (vm *VM) execTempArrLen() error {
 }
 
 func (vm *VM) execTempArrPush() error {
-	a, err := vm.popAndDrop()
+	e, err := vm.popAndDrop()
 	if err != nil {
 		return err
 	}
-	e, err := vm.popAndDrop()
+	a, err := vm.popAndDrop()
 	if err != nil {
 		return err
 	}