diff --git a/internal/planner/planner.go b/internal/planner/planner.go index de39dc357d..fcd420ff51 100644 --- a/internal/planner/planner.go +++ b/internal/planner/planner.go @@ -678,7 +678,7 @@ func (p *Planner) planExprCall(e *ast.Expr, iter planiter) error { if len(operands) == arity { // rule: f(x) = x { ... } - // call: f(x) == 1 or f(x) # result not captured + // call: f(x) # result not captured return p.planCallArgs(operands, 0, args, func(args []ir.Local) error { p.ltarget = p.newLocal() p.appendStmt(&ir.CallStmt{ @@ -686,6 +686,19 @@ func (p *Planner) planExprCall(e *ast.Expr, iter planiter) error { Args: args, Result: p.ltarget, }) + + falsy := p.newLocal() + + p.appendStmt(&ir.MakeBooleanStmt{ + Value: false, + Target: falsy, + }) + + p.appendStmt(&ir.NotEqualStmt{ + A: p.ltarget, + B: falsy, + }) + return iter() }) } else if len(operands) == arity+1 { diff --git a/test/wasm/assets/008_functions.yaml b/test/wasm/assets/008_functions.yaml index 3d63232f36..cffd63746a 100644 --- a/test/wasm/assets/008_functions.yaml +++ b/test/wasm/assets/008_functions.yaml @@ -103,4 +103,20 @@ cases: package x f(x) = 1 f(x) = 2 - want_error: var assignment conflict \ No newline at end of file + want_error: var assignment conflict + - note: 'false result' + query: data.test.p = x + modules: + - | + package test + f(x) = false + p = true { f(1) } + want_defined: false + - note: 'negated false result' + query: data.test.p = x + modules: + - | + package test + f(x) = false + p = true { not f(1) } + want_defined: true \ No newline at end of file