summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--groot-core/src/main/java/com/geedgenetworks/core/expressions/codegen/EvalCodeGenerator.java8
-rw-r--r--groot-core/src/test/java/com/geedgenetworks/core/udf/test/eval/codegen/CalcCodeConvertorTest.java9
2 files changed, 13 insertions, 4 deletions
diff --git a/groot-core/src/main/java/com/geedgenetworks/core/expressions/codegen/EvalCodeGenerator.java b/groot-core/src/main/java/com/geedgenetworks/core/expressions/codegen/EvalCodeGenerator.java
index 2109bb3..bb6b826 100644
--- a/groot-core/src/main/java/com/geedgenetworks/core/expressions/codegen/EvalCodeGenerator.java
+++ b/groot-core/src/main/java/com/geedgenetworks/core/expressions/codegen/EvalCodeGenerator.java
@@ -98,16 +98,16 @@ public class EvalCodeGenerator implements ExpressionVisitor<String> {
code += String.format("%s / %s", leftTerm, rightTerm);
break;
case LEFT_SHIFT:
- code += String.format("%s.intValue() << %s.intValue()", leftTerm, rightTerm);
+ code += String.format("((java.lang.Integer)%s).intValue() << ((java.lang.Integer)%s).intValue()", leftTerm, rightTerm);
break;
case RIGHT_SHIFT:
- code += String.format("%s.intValue() >> %s.intValue()", leftTerm, rightTerm);
+ code += String.format("((java.lang.Integer)%s).intValue() >> ((java.lang.Integer)%s).intValue()", leftTerm, rightTerm);
break;
case BITWISE_AND:
- code += String.format("%s.intValue() & %s.intValue()", leftTerm, rightTerm);
+ code += String.format("((java.lang.Integer)%s).intValue() & ((java.lang.Integer)%s).intValue()", leftTerm, rightTerm);
break;
case BITWISE_OR:
- code += String.format("%s.intValue() | %s.intValue()", leftTerm, rightTerm);
+ code += String.format("((java.lang.Integer)%s).intValue() | ((java.lang.Integer)%s).intValue()", leftTerm, rightTerm);
break;
}
ctx.addEvalCodeStatements(code + ";");
diff --git a/groot-core/src/test/java/com/geedgenetworks/core/udf/test/eval/codegen/CalcCodeConvertorTest.java b/groot-core/src/test/java/com/geedgenetworks/core/udf/test/eval/codegen/CalcCodeConvertorTest.java
index 4826ca0..8572db2 100644
--- a/groot-core/src/test/java/com/geedgenetworks/core/udf/test/eval/codegen/CalcCodeConvertorTest.java
+++ b/groot-core/src/test/java/com/geedgenetworks/core/udf/test/eval/codegen/CalcCodeConvertorTest.java
@@ -104,6 +104,15 @@ class CalcCodeConvertorTest {
2, CalcCodeConvertor.convert("5 / 2").eval(map));
assertEquals(
2, CalcCodeConvertor.convert("5 % 3").eval(map));
+
+
+ final Map<String, Object> map1 = new HashMap<>();
+ map1.put("flags", 8);
+
+ assertEquals("B",
+ CalcCodeConvertor.convert(" flags & 8 == 9 ? 'A' : 'B'").eval(map1));
+ assertEquals("A",
+ CalcCodeConvertor.convert(" 5 | flags == 13 ? 'A' : 'B'").eval(map1));
}
@Test