From f07163125b2f0cd0c67486c77d0444a0d8b7c8d2 Mon Sep 17 00:00:00 2001 From: Sergej Jaskiewicz Date: Thu, 1 Sep 2022 19:29:17 +0200 Subject: [PATCH] [JS Legacy] For Unit Elvis don't forget to generate code for the RHS ^KT-53780 Fixed --- .../operation/BinaryOperationTranslator.java | 1 + .../box/expression/evaluationOrder/elvisComplex.kt | 12 ++++++++++++ 2 files changed, 13 insertions(+) diff --git a/js/js.translator/src/org/jetbrains/kotlin/js/translate/operation/BinaryOperationTranslator.java b/js/js.translator/src/org/jetbrains/kotlin/js/translate/operation/BinaryOperationTranslator.java index 5ec5b3a15f4..fdbfd8ed9a6 100644 --- a/js/js.translator/src/org/jetbrains/kotlin/js/translate/operation/BinaryOperationTranslator.java +++ b/js/js.translator/src/org/jetbrains/kotlin/js/translate/operation/BinaryOperationTranslator.java @@ -151,6 +151,7 @@ public final class BinaryOperationTranslator extends AbstractTranslator { else { result = new JsNullLiteral(); JsExpression testExpression = TranslationUtils.isNullCheck(leftExpression); + rightBlock.getStatements().add(rightExpression.makeStmt()); ifStatement = JsAstUtils.newJsIf(testExpression, rightBlock); } ifStatement.setSource(expression); diff --git a/js/js.translator/testData/box/expression/evaluationOrder/elvisComplex.kt b/js/js.translator/testData/box/expression/evaluationOrder/elvisComplex.kt index 970c2e751d1..5daa88695b7 100644 --- a/js/js.translator/testData/box/expression/evaluationOrder/elvisComplex.kt +++ b/js/js.translator/testData/box/expression/evaluationOrder/elvisComplex.kt @@ -10,6 +10,15 @@ val global_b = A(2) fun nullFun(value: Boolean): Any? = if (value) null else global_a +fun padding(right: Int, left: Int) { + ++sideEffect +} + +fun setSideEffect(newValue: Int): Int { + sideEffect = newValue + return sideEffect +} + fun box(): String { nullFun(false) ?: global_b @@ -19,5 +28,8 @@ fun box(): String { assertEquals(global_b, nullFun(true) ?: try { ++sideEffect; global_b } finally {}, "true, global_b") assertEquals(1, sideEffect, "true, global_b side effect") + nullFun(true) ?: padding(left = setSideEffect(10), right = setSideEffect(42)) + assertEquals(43, sideEffect) + return "OK" }