diff --git a/prism/src/parser/visitor/TypeCheck.java b/prism/src/parser/visitor/TypeCheck.java index 778a9cbb..187ee59e 100644 --- a/prism/src/parser/visitor/TypeCheck.java +++ b/prism/src/parser/visitor/TypeCheck.java @@ -371,12 +371,19 @@ public class TypeCheck extends ASTTraverse } break; case ExpressionFunc.MULTI: - // All operands must be booleans or doubles + // All operands must be booleans or doubles, and doubles must come first. + boolean seenBoolean = false; for (i = 0; i < n; i++) { if (!(types[i] instanceof TypeBool || types[i] instanceof TypeDouble)) { throw new PrismLangException("Type error: non-Boolean/Double argument to function \"" + e.getName() + "\"", e.getOperand(i)); } + if (seenBoolean && types[i] instanceof TypeDouble) { + throw new PrismLangException("Type error: in the function \"" + e.getName() + "\", any Double arguments must come before any Boolean arguments."); + } + if (types[i] instanceof TypeBool) { + seenBoolean = true; + } } break; default: