From 96532f1fc24440948223f9b4a1efb528ff4a9211 Mon Sep 17 00:00:00 2001 From: Alexey Andreev Date: Thu, 5 May 2016 17:22:38 +0300 Subject: [PATCH] JS/Inlining: fix broken evaluation order after applying temporary variable elimination --- .../js/inline/clean/TemporaryVariableElimination.kt | 9 +++++---- .../temporary-variable/methodCall.optimized.js | 3 +-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/js/js.inliner/src/org/jetbrains/kotlin/js/inline/clean/TemporaryVariableElimination.kt b/js/js.inliner/src/org/jetbrains/kotlin/js/inline/clean/TemporaryVariableElimination.kt index 4a2668b1778..322572813dc 100644 --- a/js/js.inliner/src/org/jetbrains/kotlin/js/inline/clean/TemporaryVariableElimination.kt +++ b/js/js.inliner/src/org/jetbrains/kotlin/js/inline/clean/TemporaryVariableElimination.kt @@ -264,6 +264,7 @@ internal class TemporaryVariableElimination(private val root: JsStatement) { namesToSubstitute += name } else { + lastAssignedVars.clear() lastAssignedVars += Pair(name, x) sideEffectOccurred = false } @@ -385,6 +386,7 @@ internal class TemporaryVariableElimination(private val root: JsStatement) { namesToSubstitute += name } else { + lastAssignedVars.clear() lastAssignedVars += Pair(name, v) sideEffectOccurred = false } @@ -453,7 +455,7 @@ internal class TemporaryVariableElimination(private val root: JsStatement) { } val initExpression = v.initExpression if (initExpression != null) { - ctx.addPrevious(JsExpressionStatement(initExpression).apply { + ctx.addPrevious(JsExpressionStatement(initExpression).run { synthetic = true accept(this) }) @@ -485,11 +487,10 @@ internal class TemporaryVariableElimination(private val root: JsStatement) { val (name, value) = assignment if (name in variablesToRemove) { hasChanges = true - JsExpressionStatement(value).apply { + ctx.replaceMe(JsExpressionStatement(value).run { synthetic = true accept(this) - ctx.replaceMe(this) - } + }) return false } } diff --git a/js/js.translator/testData/js-optimizer/temporary-variable/methodCall.optimized.js b/js/js.translator/testData/js-optimizer/temporary-variable/methodCall.optimized.js index b3163f78c69..e7a5799cd79 100644 --- a/js/js.translator/testData/js-optimizer/temporary-variable/methodCall.optimized.js +++ b/js/js.translator/testData/js-optimizer/temporary-variable/methodCall.optimized.js @@ -20,9 +20,8 @@ function test2() { init(); var $tmp2 = foo(2); - var $tmp1 = foo(1); - return foo($tmp1 + $tmp2); + return foo(foo(1) + $tmp2); } function test3() {