diff -r f99bc938522a -r 79265b56316e jitcraft/SemanticAnalysis.cpp --- a/jitcraft/SemanticAnalysis.cpp Wed Jul 18 21:46:29 2012 -0700 +++ b/jitcraft/SemanticAnalysis.cpp Wed Jul 18 22:02:11 2012 -0700 @@ -375,6 +375,27 @@ } void +SemanticAnalysis::visit(TernaryExpression *node) +{ + Local type(zone_, visitForLoad(node->condition())); + if (!type) + return; + + if (!canTest(node->condition(), type)) + return; + + Local left(zone_, visitForLoad(node->left())); + Local right(zone_, visitForLoad(node->right())); + if (!left || !right) + return; + + if (left != right) { + binaryTypeError(node, TOK_QMARK, left, right); + return; + } +} + +void SemanticAnalysis::visit(BinaryExpression *node) { Local left(zone_, visitForLoad(node->left()));