From a7fcbb614d106d5417883acdcd11f2af63fe3202 Mon Sep 17 00:00:00 2001 From: Alexey Andreev Date: Fri, 18 Mar 2016 17:54:01 +0300 Subject: [PATCH] Some cleanup in JS optimizer --- .../kotlin/js/inline/FunctionInlineMutator.kt | 1 - .../inline/clean/TemporaryAssignmentElimination.kt | 3 +-- .../js/inline/clean/TemporaryVariableElimination.kt | 13 ++++++++++++- 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/js/js.inliner/src/org/jetbrains/kotlin/js/inline/FunctionInlineMutator.kt b/js/js.inliner/src/org/jetbrains/kotlin/js/inline/FunctionInlineMutator.kt index 41d1512c711..65a8cf8c78a 100644 --- a/js/js.inliner/src/org/jetbrains/kotlin/js/inline/FunctionInlineMutator.kt +++ b/js/js.inliner/src/org/jetbrains/kotlin/js/inline/FunctionInlineMutator.kt @@ -23,7 +23,6 @@ import org.jetbrains.kotlin.js.inline.context.InliningContext import org.jetbrains.kotlin.js.inline.context.NamingContext import org.jetbrains.kotlin.js.inline.util.* import org.jetbrains.kotlin.js.inline.util.rewriters.ReturnReplacingVisitor -import org.jetbrains.kotlin.js.translate.utils.JsAstUtils.newVar class FunctionInlineMutator private constructor( 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 2a9dcf5ff3e..a071ca60935 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 @@ -157,8 +157,7 @@ internal class TemporaryAssignmentElimination(private val root: JsBlock) { val assignment = JsAstUtils.decomposeAssignmentToVariable(x.expression) if (assignment != null) { - val (name, value) = assignment - val usage = getUsage(name) + val usage = getUsage(assignment.first) if (usage is Usage.Declaration) { usage.count++ } 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 eba525df34d..2ee87fe5a65 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 @@ -190,7 +190,7 @@ internal class TemporaryVariableElimination(private val root: JsStatement) { val name = x.name if (x.qualifier == null && name != null && shouldConsiderTemporary(name)) { hasChanges = true - val newExpr = definedValues[name]!! + val newExpr = definedValues[name] ?: JsLiteral.UNDEFINED ctx.replaceMe(accept(newExpr)) usages[name] = usages[name]!! - 1 return false @@ -201,6 +201,17 @@ internal class TemporaryVariableElimination(private val root: JsStatement) { override fun visit(x: JsBreak, ctx: JsContext<*>) = false override fun visit(x: JsContinue, ctx: JsContext<*>) = false + + override fun visit(x: JsReturn, ctx: JsContext<*>): Boolean { + val returnValue = x.expression + if (returnValue is JsNameRef) { + val name = returnValue.name + if (returnValue.qualifier == null && name != null && name in temporary && definitions[name] ?: 0 == 0) { + x.expression = null + } + } + return super.visit(x, ctx) + } }.accept(root) }