aboutsummaryrefslogtreecommitdiffstats
path: root/indexinglanguage
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@gmail.com>2022-09-20 11:00:48 +0200
committerHenning Baldersheim <balder@yahoo-inc.com>2022-09-21 16:27:49 +0200
commit083aa54d59aecc9f9d045d4bde6cdb6c6cbe4dec (patch)
tree8c90676eb3e6cb01cf87d9ee40db4c60f14aad2c /indexinglanguage
parentd9db475220d68a54ba2c9f820d3bae78f80abd96 (diff)
Short circuit boolean expressions
Short circuit boolean expressions by converting them to (nested) if expressions. This also fixes a bug in Java expression evaluation where evaluation of arithmetic operations with the same precedence would be from right to left rather than left to right.
Diffstat (limited to 'indexinglanguage')
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ArithmeticExpression.java20
1 files changed, 7 insertions, 13 deletions
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ArithmeticExpression.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ArithmeticExpression.java
index fa82c4d88ee..e4bc2dae965 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ArithmeticExpression.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ArithmeticExpression.java
@@ -166,19 +166,13 @@ public final class ArithmeticExpression extends CompositeExpression {
}
BigDecimal lhsVal = asBigDecimal((NumericFieldValue)lhs);
BigDecimal rhsVal = asBigDecimal((NumericFieldValue)rhs);
- switch (op) {
- case ADD:
- return createFieldValue(lhs, rhs, lhsVal.add(rhsVal));
- case SUB:
- return createFieldValue(lhs, rhs, lhsVal.subtract(rhsVal));
- case MUL:
- return createFieldValue(lhs, rhs, lhsVal.multiply(rhsVal));
- case DIV:
- return createFieldValue(lhs, rhs, lhsVal.divide(rhsVal, MathContext.DECIMAL64));
- case MOD:
- return createFieldValue(lhs, rhs, lhsVal.remainder(rhsVal));
- }
- throw new IllegalStateException("Unsupported operation: " + op);
+ return switch (op) {
+ case ADD -> createFieldValue(lhs, rhs, lhsVal.add(rhsVal));
+ case SUB -> createFieldValue(lhs, rhs, lhsVal.subtract(rhsVal));
+ case MUL -> createFieldValue(lhs, rhs, lhsVal.multiply(rhsVal));
+ case DIV -> createFieldValue(lhs, rhs, lhsVal.divide(rhsVal, MathContext.DECIMAL64));
+ case MOD -> createFieldValue(lhs, rhs, lhsVal.remainder(rhsVal));
+ };
}
private FieldValue createFieldValue(FieldValue lhs, FieldValue rhs, BigDecimal val) {