From b5f9287bfac94f71b323dd940b9194628c622993 Mon Sep 17 00:00:00 2001 From: Alexey Andreev Date: Fri, 15 Jul 2016 17:05:37 +0300 Subject: [PATCH] JS: add tests for support of 'for' statement in TemporaryAssignmentElimination --- .../clean/TemporaryAssignmentElimination.kt | 2 -- .../TemporaryAssignmentEliminationTest.kt | 4 +++ ...xpressionPreventsOptimization.optimized.js | 27 +++++++++++++++++++ ...ExpressionPreventsOptimization.original.js | 27 +++++++++++++++++++ .../forInitVariables.optimized.js | 26 ++++++++++++++++++ .../forInitVariables.original.js | 26 ++++++++++++++++++ 6 files changed, 110 insertions(+), 2 deletions(-) create mode 100644 js/js.translator/testData/js-optimizer/temporary-assignment/forInitExpressionPreventsOptimization.optimized.js create mode 100644 js/js.translator/testData/js-optimizer/temporary-assignment/forInitExpressionPreventsOptimization.original.js create mode 100644 js/js.translator/testData/js-optimizer/temporary-assignment/forInitVariables.optimized.js create mode 100644 js/js.translator/testData/js-optimizer/temporary-assignment/forInitVariables.original.js diff --git a/js/js.inliner/src/org/jetbrains/kotlin/js/inline/clean/TemporaryAssignmentElimination.kt b/js/js.inliner/src/org/jetbrains/kotlin/js/inline/clean/TemporaryAssignmentElimination.kt index b2b9957a023..920a95141f5 100644 --- a/js/js.inliner/src/org/jetbrains/kotlin/js/inline/clean/TemporaryAssignmentElimination.kt +++ b/js/js.inliner/src/org/jetbrains/kotlin/js/inline/clean/TemporaryAssignmentElimination.kt @@ -128,8 +128,6 @@ internal class TemporaryAssignmentElimination(private val root: JsBlock) { x.condition?.let { accept(it) } x.body?.let { accept(it) } x.incrementExpression?.let { accept(it) } - - super.visitFor(x) } }.accept(root) diff --git a/js/js.tests/test/org/jetbrains/kotlin/js/test/optimizer/TemporaryAssignmentEliminationTest.kt b/js/js.tests/test/org/jetbrains/kotlin/js/test/optimizer/TemporaryAssignmentEliminationTest.kt index 6cd97262a0b..2ad278763d4 100644 --- a/js/js.tests/test/org/jetbrains/kotlin/js/test/optimizer/TemporaryAssignmentEliminationTest.kt +++ b/js/js.tests/test/org/jetbrains/kotlin/js/test/optimizer/TemporaryAssignmentEliminationTest.kt @@ -34,4 +34,8 @@ class TemporaryAssignmentEliminationTest : BasicOptimizerTest("temporary-assignm @Test fun tryCatch() = box() @Test fun ifWithoutElse() = box() + + @Test fun forInitVariables() = box() + + @Test fun forInitExpressionPreventsOptimization() = box() } \ No newline at end of file diff --git a/js/js.translator/testData/js-optimizer/temporary-assignment/forInitExpressionPreventsOptimization.optimized.js b/js/js.translator/testData/js-optimizer/temporary-assignment/forInitExpressionPreventsOptimization.optimized.js new file mode 100644 index 00000000000..2b28fd5027c --- /dev/null +++ b/js/js.translator/testData/js-optimizer/temporary-assignment/forInitExpressionPreventsOptimization.optimized.js @@ -0,0 +1,27 @@ +function test(x) { + var $tmp; + if (x > 9) { + $tmp = 9; + } + else { + $tmp = x; + } + var y = $tmp; + + var result = x; + for (var i = $tmp; i < 10; ++i) { + result += i; + } + + return result + y; +} + +function box() { + var result = test(11); + if (result != 29) return "fail1: " + result; + + result = test(8); + if (result != 33) return "fail2: " + result; + + return "OK"; +} \ No newline at end of file diff --git a/js/js.translator/testData/js-optimizer/temporary-assignment/forInitExpressionPreventsOptimization.original.js b/js/js.translator/testData/js-optimizer/temporary-assignment/forInitExpressionPreventsOptimization.original.js new file mode 100644 index 00000000000..2b28fd5027c --- /dev/null +++ b/js/js.translator/testData/js-optimizer/temporary-assignment/forInitExpressionPreventsOptimization.original.js @@ -0,0 +1,27 @@ +function test(x) { + var $tmp; + if (x > 9) { + $tmp = 9; + } + else { + $tmp = x; + } + var y = $tmp; + + var result = x; + for (var i = $tmp; i < 10; ++i) { + result += i; + } + + return result + y; +} + +function box() { + var result = test(11); + if (result != 29) return "fail1: " + result; + + result = test(8); + if (result != 33) return "fail2: " + result; + + return "OK"; +} \ No newline at end of file diff --git a/js/js.translator/testData/js-optimizer/temporary-assignment/forInitVariables.optimized.js b/js/js.translator/testData/js-optimizer/temporary-assignment/forInitVariables.optimized.js new file mode 100644 index 00000000000..a383ac97ee3 --- /dev/null +++ b/js/js.translator/testData/js-optimizer/temporary-assignment/forInitVariables.optimized.js @@ -0,0 +1,26 @@ +function test(x) { + var $tmp; + if (x > 9) { + $tmp = 9; + } + else { + $tmp = x; + } + + var result = x; + for (var i = $tmp; i < 10; ++i) { + result += i; + } + + return result; +} + +function box() { + var result = test(11); + if (result != 20) return "fail1: " + result; + + result = test(8); + if (result != 25) return "fail2: " + result; + + return "OK"; +} \ No newline at end of file diff --git a/js/js.translator/testData/js-optimizer/temporary-assignment/forInitVariables.original.js b/js/js.translator/testData/js-optimizer/temporary-assignment/forInitVariables.original.js new file mode 100644 index 00000000000..a383ac97ee3 --- /dev/null +++ b/js/js.translator/testData/js-optimizer/temporary-assignment/forInitVariables.original.js @@ -0,0 +1,26 @@ +function test(x) { + var $tmp; + if (x > 9) { + $tmp = 9; + } + else { + $tmp = x; + } + + var result = x; + for (var i = $tmp; i < 10; ++i) { + result += i; + } + + return result; +} + +function box() { + var result = test(11); + if (result != 20) return "fail1: " + result; + + result = test(8); + if (result != 25) return "fail2: " + result; + + return "OK"; +} \ No newline at end of file