diff --git a/js/js.translator/src/org/jetbrains/k2js/translate/operation/BinaryOperationTranslator.java b/js/js.translator/src/org/jetbrains/k2js/translate/operation/BinaryOperationTranslator.java index f8c3c998c2d..85c47ac78b5 100644 --- a/js/js.translator/src/org/jetbrains/k2js/translate/operation/BinaryOperationTranslator.java +++ b/js/js.translator/src/org/jetbrains/k2js/translate/operation/BinaryOperationTranslator.java @@ -166,8 +166,14 @@ public final class BinaryOperationTranslator extends AbstractTranslator { return new JsBinaryOperation(operator, leftExpression, rightExpression); } - assert rightExpression instanceof JsNameRef : "expected JsNameRef, but " + expression.getText(); - JsNameRef result = (JsNameRef) rightExpression; // Reuse tmp variable + JsNameRef result; + if (rightExpression instanceof JsNameRef) { + result = (JsNameRef) rightExpression; // Reuse tmp variable + } else { + TemporaryVariable resultVar = context().declareTemporary(rightExpression); + result = resultVar.reference(); + rightBlock.getStatements().add(resultVar.assignmentExpression().makeStmt()); + } JsIf ifStatement; if (token.equals(JetTokens.ANDAND)) { diff --git a/js/js.translator/testData/expression/evaluationOrder/cases/orOrWithSideEffect.kt b/js/js.translator/testData/expression/evaluationOrder/cases/orOrWithSideEffect.kt index 340ffd2081a..f2194e0c3d1 100644 --- a/js/js.translator/testData/expression/evaluationOrder/cases/orOrWithSideEffect.kt +++ b/js/js.translator/testData/expression/evaluationOrder/cases/orOrWithSideEffect.kt @@ -8,6 +8,8 @@ fun bar(s: String, value: Boolean): Boolean { } fun box(): String { + val a = if (true || if(bar("A", false)) {2} else {3} == 0) { } + assertEquals("", global) // Simple || Simple global = ""