From f90df7aa3560f5b3a66bd868ea35d056be63c6dc Mon Sep 17 00:00:00 2001 From: Zalim Bashorov Date: Mon, 1 Jun 2015 19:01:00 +0300 Subject: [PATCH] JS backend: fix compiler crash on empty then if block #EA-68941 fixed --- .../kotlin/js/test/semantics/IfExpressionTest.java | 4 ++++ .../kotlin/js/translate/expression/ExpressionVisitor.java | 8 ++++---- .../testData/expression/if/cases/withEmptyBlocks.kt | 8 ++++++++ 3 files changed, 16 insertions(+), 4 deletions(-) create mode 100644 js/js.translator/testData/expression/if/cases/withEmptyBlocks.kt diff --git a/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/IfExpressionTest.java b/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/IfExpressionTest.java index 410ae66019a..7ab3d566226 100644 --- a/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/IfExpressionTest.java +++ b/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/IfExpressionTest.java @@ -41,4 +41,8 @@ public class IfExpressionTest extends AbstractExpressionTest { public void testNestedIf() throws Exception { checkFooBoxIsOk(); } + + public void testWithEmptyBlocks() throws Exception { + checkFooBoxIsOk(); + } } diff --git a/js/js.translator/src/org/jetbrains/kotlin/js/translate/expression/ExpressionVisitor.java b/js/js.translator/src/org/jetbrains/kotlin/js/translate/expression/ExpressionVisitor.java index a27e5513f2b..951c2deb0d0 100644 --- a/js/js.translator/src/org/jetbrains/kotlin/js/translate/expression/ExpressionVisitor.java +++ b/js/js.translator/src/org/jetbrains/kotlin/js/translate/expression/ExpressionVisitor.java @@ -215,12 +215,12 @@ public final class ExpressionVisitor extends TranslatorVisitor { boolean isKotlinExpression = BindingContextUtilPackage.isUsedAsExpression(expression, context.bindingContext()); JetExpression thenExpression = expression.getThen(); - assert thenExpression != null : "then expression should not be null: " + expression.getText(); JetExpression elseExpression = expression.getElse(); - JsStatement thenStatement = Translation.translateAsStatementAndMergeInBlockIfNeeded(thenExpression, context); - JsStatement elseStatement = (elseExpression != null) ? Translation.translateAsStatementAndMergeInBlockIfNeeded(elseExpression, - context) : null; + JsStatement thenStatement = + thenExpression != null ? Translation.translateAsStatementAndMergeInBlockIfNeeded(thenExpression, context) : null; + JsStatement elseStatement = + elseExpression != null ? Translation.translateAsStatementAndMergeInBlockIfNeeded(elseExpression, context) : null; if (isKotlinExpression) { JsExpression jsThenExpression = JsAstUtils.extractExpressionFromStatement(thenStatement); diff --git a/js/js.translator/testData/expression/if/cases/withEmptyBlocks.kt b/js/js.translator/testData/expression/if/cases/withEmptyBlocks.kt new file mode 100644 index 00000000000..9a83af489ec --- /dev/null +++ b/js/js.translator/testData/expression/if/cases/withEmptyBlocks.kt @@ -0,0 +1,8 @@ +package foo + +fun box(): String { + var r = "" + if (r != "") else r += "O" + if (r == "O") r += "K" else; + return r +}