summaryrefslogtreecommitdiffstats
path: root/vendor/github.com/d5/tengo/compiler/compiler_logical.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/d5/tengo/compiler/compiler_logical.go')
-rw-r--r--vendor/github.com/d5/tengo/compiler/compiler_logical.go30
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
+}