From 71ea487828286c7958dbc9b72946812b86394f5d Mon Sep 17 00:00:00 2001 From: Alexey Tsvetkov Date: Fri, 10 Apr 2015 18:14:24 +0300 Subject: [PATCH] JS: decomposition of "if" --- .../kotlin/js/inline/ExpressionDecomposer.kt | 7 +++++- .../inlineEvaluationOrder/cases/if.kt | 23 +++++++++++++++++++ 2 files changed, 29 insertions(+), 1 deletion(-) create mode 100644 js/js.translator/testData/inlineEvaluationOrder/cases/if.kt diff --git a/js/js.inliner/src/org/jetbrains/kotlin/js/inline/ExpressionDecomposer.kt b/js/js.inliner/src/org/jetbrains/kotlin/js/inline/ExpressionDecomposer.kt index 9a3f3058f46..1e65fb0bdc7 100644 --- a/js/js.inliner/src/org/jetbrains/kotlin/js/inline/ExpressionDecomposer.kt +++ b/js/js.inliner/src/org/jetbrains/kotlin/js/inline/ExpressionDecomposer.kt @@ -314,7 +314,12 @@ private open class JsExpressionVisitor() : JsVisitorWithContextImpl() { // where init and test do not contain inline calls. override fun visit(x: JsFor, ctx: JsContext<*>): Boolean = false - override fun visit(x: JsIf, ctx: JsContext<*>): Boolean = false + override fun visit(x: JsIf, ctx: JsContext<*>): Boolean { + val test = x.getIfExpression() + x.setIfExpression(accept(test)) + return false + } + override fun visit(x: JsWhile, ctx: JsContext<*>): Boolean = false override fun visit(x: JsDoWhile, ctx: JsContext<*>): Boolean = false diff --git a/js/js.translator/testData/inlineEvaluationOrder/cases/if.kt b/js/js.translator/testData/inlineEvaluationOrder/cases/if.kt new file mode 100644 index 00000000000..0e01032e52e --- /dev/null +++ b/js/js.translator/testData/inlineEvaluationOrder/cases/if.kt @@ -0,0 +1,23 @@ +package foo + +fun test(x: Boolean, y: Boolean): Boolean { + if (fizz(x) && buzz(y)) { + return true + } + + return false +} + + +fun box(): String { + assertEquals(false, test(false, true)) + assertEquals("fizz(false);", pullLog()) + + assertEquals(false, test(true, false)) + assertEquals("fizz(true);buzz(false);", pullLog()) + + assertEquals(true, test(true, true)) + assertEquals("fizz(true);buzz(true);", pullLog()) + + return "OK" +} \ No newline at end of file