From be196789d2c7255be1b270af55bf4dc29c8c7e6b Mon Sep 17 00:00:00 2001 From: Alexey Andreev Date: Mon, 21 Nov 2016 18:45:50 +0300 Subject: [PATCH] JS: fix bug in temporary variable elimination --- .../js/inline/clean/TemporaryVariableElimination.kt | 3 +++ .../test/optimizer/TemporaryVariableEliminationTest.kt | 2 ++ .../temporary-variable/assignmentToNonLocal.optimized.js | 9 +++++++++ .../temporary-variable/assignmentToNonLocal.original.js | 9 +++++++++ 4 files changed, 23 insertions(+) create mode 100644 js/js.translator/testData/js-optimizer/temporary-variable/assignmentToNonLocal.optimized.js create mode 100644 js/js.translator/testData/js-optimizer/temporary-variable/assignmentToNonLocal.original.js 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 bca0b7921bb..4a9f5b9e5d3 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 @@ -130,6 +130,9 @@ internal class TemporaryVariableElimination(private val function: JsFunction) { temporary += name } } + else { + super.visitExpressionStatement(x) + } return } super.visitExpressionStatement(x) diff --git a/js/js.tests/test/org/jetbrains/kotlin/js/test/optimizer/TemporaryVariableEliminationTest.kt b/js/js.tests/test/org/jetbrains/kotlin/js/test/optimizer/TemporaryVariableEliminationTest.kt index 00fd61afdaf..cc4b1315d4b 100644 --- a/js/js.tests/test/org/jetbrains/kotlin/js/test/optimizer/TemporaryVariableEliminationTest.kt +++ b/js/js.tests/test/org/jetbrains/kotlin/js/test/optimizer/TemporaryVariableEliminationTest.kt @@ -40,4 +40,6 @@ class TemporaryVariableEliminationTest : BasicOptimizerTest("temporary-variable" @Test fun innerExpressionProcessed() = box() @Test fun transitiveNotConsideredTrivial() = box() + + @Test fun assignmentToNonLocal() = box() } \ No newline at end of file diff --git a/js/js.translator/testData/js-optimizer/temporary-variable/assignmentToNonLocal.optimized.js b/js/js.translator/testData/js-optimizer/temporary-variable/assignmentToNonLocal.optimized.js new file mode 100644 index 00000000000..6129dc7799a --- /dev/null +++ b/js/js.translator/testData/js-optimizer/temporary-variable/assignmentToNonLocal.optimized.js @@ -0,0 +1,9 @@ +var result = ""; + +function box() { + var $tmp; + $tmp = result; + result += "fail"; + result = $tmp + "OK"; + return result; +} \ No newline at end of file diff --git a/js/js.translator/testData/js-optimizer/temporary-variable/assignmentToNonLocal.original.js b/js/js.translator/testData/js-optimizer/temporary-variable/assignmentToNonLocal.original.js new file mode 100644 index 00000000000..6129dc7799a --- /dev/null +++ b/js/js.translator/testData/js-optimizer/temporary-variable/assignmentToNonLocal.original.js @@ -0,0 +1,9 @@ +var result = ""; + +function box() { + var $tmp; + $tmp = result; + result += "fail"; + result = $tmp + "OK"; + return result; +} \ No newline at end of file