summaryrefslogtreecommitdiffstats
path: root/searchlib
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2020-04-14 12:14:40 +0200
committerGitHub <noreply@github.com>2020-04-14 12:14:40 +0200
commit7d888ff72c7281f4cbb519a0e128222484c294db (patch)
tree6173d7584b83ef6cf0903a764ec328111e9395db /searchlib
parentd6a43ad477c7a8f0e16e7f3152d47ec9bed5bdee (diff)
parentedf3ba27bf4ba667c28f4aec0163be6716cd9662 (diff)
Merge pull request #12892 from vespa-engine/toregge/avoid-integer-ops-in-boolean-context
Avoid integer operatons in boolean context.
Diffstat (limited to 'searchlib')
-rw-r--r--searchlib/src/vespa/searchlib/expression/integerresultnode.h9
1 files changed, 8 insertions, 1 deletions
diff --git a/searchlib/src/vespa/searchlib/expression/integerresultnode.h b/searchlib/src/vespa/searchlib/expression/integerresultnode.h
index e428c0448bb..7f2ec823432 100644
--- a/searchlib/src/vespa/searchlib/expression/integerresultnode.h
+++ b/searchlib/src/vespa/searchlib/expression/integerresultnode.h
@@ -4,6 +4,7 @@
#include "numericresultnode.h"
#include <vespa/vespalib/util/sort.h>
#include <limits>
+#include <type_traits>
namespace search::expression {
@@ -29,7 +30,13 @@ public:
}
void add(const ResultNode & b) override { _value += b.getInteger(); }
void negate() override { _value = - _value; }
- void multiply(const ResultNode & b) override { _value *= b.getInteger(); }
+ void multiply(const ResultNode & b) override {
+ if constexpr (std::is_same_v<T, bool>) {
+ _value = (_value && (b.getInteger() != 0));
+ } else {
+ _value *= b.getInteger();
+ }
+ }
void divide(const ResultNode & b) override {
int64_t val = b.getInteger();
_value = (val == 0) ? 0 : (_value / val);