diff --git a/prism/src/parser/visitor/ToSimulator.java b/prism/src/parser/visitor/ToSimulator.java index 1bb7a9d1..7c197a7b 100644 --- a/prism/src/parser/visitor/ToSimulator.java +++ b/prism/src/parser/visitor/ToSimulator.java @@ -104,7 +104,9 @@ public class ToSimulator extends ASTTraverseModify long ret = -1; long ptr1 = getPtr(e.getOperand1()); long ptr2 = getPtr(e.getOperand2()); - boolean dbl = e.getType() == Expression.DOUBLE; + // See if one of the operands is a double (need to know for choosing a sim createXXX method below). + // Note: can't just look at type of e since that may be always Boolean for some ops + boolean dbl = (e.getOperand1().getType() == Expression.DOUBLE || e.getOperand2().getType() == Expression.DOUBLE); switch (e.getOperator()) { case ExpressionBinaryOp.IMPLIES: ret = SimulatorEngine.createOr(new long[] { SimulatorEngine.createNot(ptr1), ptr2 }); @@ -158,7 +160,7 @@ public class ToSimulator extends ASTTraverseModify { long ret = -1; long ptr = getPtr(e.getOperand()); - boolean dbl = e.getType() == Expression.DOUBLE; + boolean dbl = (e.getOperand().getType() == Expression.DOUBLE); switch (e.getOperator()) { case ExpressionUnaryOp.NOT: ret = SimulatorEngine.createNot(ptr); @@ -185,7 +187,7 @@ public class ToSimulator extends ASTTraverseModify for (i = 0; i < n; i++) { ptr[i] = getPtr(e.getOperand(i)); } - boolean dbl = e.getType() == Expression.DOUBLE; + boolean dbl = (e.getType() == Expression.DOUBLE); switch (e.getNameCode()) { case ExpressionFunc.MIN: ret = dbl ? SimulatorEngine.createRealMin(ptr) : SimulatorEngine.createNormalMin(ptr);