diff options
author | Jon Bratseth <bratseth@gmail.com> | 2022-09-20 11:00:48 +0200 |
---|---|---|
committer | Henning Baldersheim <balder@yahoo-inc.com> | 2022-09-21 16:27:49 +0200 |
commit | 083aa54d59aecc9f9d045d4bde6cdb6c6cbe4dec (patch) | |
tree | 8c90676eb3e6cb01cf87d9ee40db4c60f14aad2c /indexinglanguage | |
parent | d9db475220d68a54ba2c9f820d3bae78f80abd96 (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.java | 20 |
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) { |