JS Backend: #KT-5320 Fixed (generated code for ternary operator)

This commit is contained in:
Michael Nedzelsky
2014-07-22 13:08:31 +04:00
parent 740fe70b22
commit 9456833a35
3 changed files with 25 additions and 3 deletions
@@ -365,7 +365,7 @@ public class JsToStringGenerationVisitor extends JsVisitor {
// another // another
// ternary expression, but if the test expression is a ternary, it should // ternary expression, but if the test expression is a ternary, it should
// get parentheses around it. // get parentheses around it.
printPair(x, x.getTestExpression()); printPair(x, x.getTestExpression(), true);
spaceOpt(); spaceOpt();
p.print('?'); p.print('?');
spaceOpt(); spaceOpt();
@@ -376,8 +376,8 @@ public class JsToStringGenerationVisitor extends JsVisitor {
printPair(x, x.getElseExpression()); printPair(x, x.getElseExpression());
} }
private void printPair(JsExpression parent, JsExpression expression) { private void printPair(JsExpression parent, JsExpression expression, boolean wrongAssoc) {
boolean isNeedParen = parenCalc(parent, expression, false); boolean isNeedParen = parenCalc(parent, expression, wrongAssoc);
if (isNeedParen) { if (isNeedParen) {
leftParen(); leftParen();
} }
@@ -387,6 +387,10 @@ public class JsToStringGenerationVisitor extends JsVisitor {
} }
} }
private void printPair(JsExpression parent, JsExpression expression) {
printPair(parent, expression, false);
}
@Override @Override
public void visitDebugger(JsDebugger x) { public void visitDebugger(JsDebugger x) {
p.print(CHARS_DEBUGGER); p.print(CHARS_DEBUGGER);
@@ -194,4 +194,8 @@ public final class MiscTest extends AbstractExpressionTest {
public void testKt5058() throws Exception { public void testKt5058() throws Exception {
checkFooBoxIsTrue("KT-5058.kt"); checkFooBoxIsTrue("KT-5058.kt");
} }
public void testRightAssocForGeneratedConditionalOperator() throws Exception {
checkFooBoxIsOk();
}
} }
@@ -0,0 +1,14 @@
// http://youtrack.jetbrains.com/issue/KT-5320
// KT-5320 Invalid JS code generated for typecast inside ternary operator
package foo
fun test(x: Any?): Int = if (x as Boolean) 1 else 2;
fun box(): String {
assertEquals(1, test(true), "true")
assertEquals(2, test(false), "false")
assertEquals("OK", if (if (0 < 1) false else true) "Not OK" else "OK")
return "OK"
}