+void ExpressionValidator::visit(TernaryExpression &ternary)
+{
+ if(ternary.condition->type)
+ {
+ BasicTypeDeclaration *basic_cond = dynamic_cast<BasicTypeDeclaration *>(ternary.condition->type);
+ if(!basic_cond || basic_cond->kind!=BasicTypeDeclaration::BOOL)
+ error(ternary, "Ternary operator condition is not a boolean");
+ else if(!ternary.type && ternary.true_expr->type && ternary.false_expr->type)
+ error(ternary, format("Ternary operator has incompatible types '%s' and '%s'",
+ ternary.true_expr->type->name, ternary.false_expr->type->name));
+ }
+ TraversingVisitor::visit(ternary);
+}
+