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() {