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/compiler | |
| parent | 621f624f50a7bef16eeed02113b470e79e790cd9 (diff) | |
| download | jinx-18c7ab70ded45c76abb0b35c090b942a7bfcc3b4.tar.zst jinx-18c7ab70ded45c76abb0b35c090b942a7bfcc3b4.zip | |
Change arguments order in VM to match expectation
Diffstat (limited to 'pkg/lang/compiler')
| -rw-r--r-- | pkg/lang/compiler/compiler.go | 18 | ||||
| -rw-r--r-- | pkg/lang/compiler/compiler_test.go | 36 |
2 files changed, 27 insertions, 27 deletions
diff --git a/pkg/lang/compiler/compiler.go b/pkg/lang/compiler/compiler.go index d2b332d..4d7f4a1 100644 --- a/pkg/lang/compiler/compiler.go +++ b/pkg/lang/compiler/compiler.go @@ -103,11 +103,11 @@ func (comp *Compiler) compileBinaryExpr(expr ast.ExprBinary) error { return comp.compileAssignExpr(expr) } - if err := comp.compileExpr(expr.Right); err != nil { + if err := comp.compileExpr(expr.Left); err != nil { return err } - if err := comp.compileExpr(expr.Left); err != nil { + if err := comp.compileExpr(expr.Right); err != nil { return err } @@ -189,16 +189,16 @@ func (comp *Compiler) compileUnaryExpr(expr ast.ExprUnary) error { } func (comp *Compiler) compileCallExpr(expr ast.ExprCall) error { - for i := len(expr.Args) - 1; i >= 0; i-- { + if err := comp.compileExpr(expr.Callee); err != nil { + return err + } + + for i := 0; i < len(expr.Args); i++ { if err := comp.compileExpr(expr.Args[i]); err != nil { return err } } - if err := comp.compileExpr(expr.Callee); err != nil { - return err - } - comp.builder.AppendOp(code.OpCall) comp.builder.AppendInt(int64(len(expr.Args))) @@ -206,11 +206,11 @@ func (comp *Compiler) compileCallExpr(expr ast.ExprCall) error { } func (comp *Compiler) compileSubscriptionExpr(expr ast.ExprSubscription) error { - if err := comp.compileExpr(expr.Key); err != nil { + if err := comp.compileExpr(expr.Obj); err != nil { return err } - if err := comp.compileExpr(expr.Obj); err != nil { + if err := comp.compileExpr(expr.Key); err != nil { return err } diff --git a/pkg/lang/compiler/compiler_test.go b/pkg/lang/compiler/compiler_test.go index 5347830..cf0fee2 100644 --- a/pkg/lang/compiler/compiler_test.go +++ b/pkg/lang/compiler/compiler_test.go @@ -19,8 +19,8 @@ func TestSimpleAddExpr(t *testing.T) { ` expected := ` - push_int 2 push_int 1 + push_int 2 add ` @@ -37,12 +37,12 @@ func TestOperationOrder(t *testing.T) { ` expected := ` - push_int 4 - push_int 3 - push_int 2 push_int 1 + push_int 2 add + push_int 3 sub + push_int 4 add ` @@ -57,25 +57,25 @@ func TestNestedExpr(t *testing.T) { ` expected := ` - push_int 321 - push_int 456 - index + push_int 1 + push_int 2 + add + + push_int 3 + sub - push_string "c" - push_string "b" - push_string "a" push_int 123 + push_string "a" + push_string "b" + push_string "c" call 3 - add - - push_int 3 + push_int 456 + push_int 321 + index - push_int 2 - push_int 1 add sub - sub ` mustCompileTo(t, src, expected) @@ -95,13 +95,13 @@ func TestVars(t *testing.T) { push_int 25 - push_int 7 get_local 0 + push_int 7 add set_local 0 - get_local 1 get_local 0 + get_local 1 add ` |
