diff options
| author | Mel <einebeere@gmail.com> | 2022-06-26 21:54:38 +0200 |
|---|---|---|
| committer | Mel <einebeere@gmail.com> | 2022-06-26 21:54:38 +0200 |
| commit | 18c7ab70ded45c76abb0b35c090b942a7bfcc3b4 (patch) | |
| tree | 6505f6197bd276b4a4bfbac3707064492c5626c8 /pkg/lang/vm/exec.go | |
| parent | 621f624f50a7bef16eeed02113b470e79e790cd9 (diff) | |
| download | jinx-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.go | 59 |
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 } |
