diff options
Diffstat (limited to 'vendor/github.com/d5/tengo/compiler/compiler_logical.go')
-rw-r--r-- | vendor/github.com/d5/tengo/compiler/compiler_logical.go | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/vendor/github.com/d5/tengo/compiler/compiler_logical.go b/vendor/github.com/d5/tengo/compiler/compiler_logical.go new file mode 100644 index 00000000..68c96759 --- /dev/null +++ b/vendor/github.com/d5/tengo/compiler/compiler_logical.go @@ -0,0 +1,30 @@ +package compiler + +import ( + "github.com/d5/tengo/compiler/ast" + "github.com/d5/tengo/compiler/token" +) + +func (c *Compiler) compileLogical(node *ast.BinaryExpr) error { + // left side term + if err := c.Compile(node.LHS); err != nil { + return err + } + + // jump position + var jumpPos int + if node.Token == token.LAnd { + jumpPos = c.emit(node, OpAndJump, 0) + } else { + jumpPos = c.emit(node, OpOrJump, 0) + } + + // right side term + if err := c.Compile(node.RHS); err != nil { + return err + } + + c.changeOperand(jumpPos, len(c.currentInstructions())) + + return nil +} |