From 776c7447b1ae068f8504457cf5a7f9e0f4812640 Mon Sep 17 00:00:00 2001 From: Alexey Andreev Date: Wed, 4 May 2016 17:59:20 +0300 Subject: [PATCH] JS/Inlining: in temporary variable elimination introduce better recognition of FQNs without side effects --- .../js/inline/clean/TemporaryVariableElimination.kt | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 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 fa428dd841f..3697c69783b 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 @@ -488,8 +488,16 @@ internal class TemporaryVariableElimination(private val root: JsStatement) { return (expr != null && isTrivial(expr)) || usages[name] ?: 0 == 1 } - private fun isTrivial(expr: JsExpression) = when (expr) { - is JsNameRef -> expr.qualifier == null && (expr.name?.let { definitions[it] ?: 0 <= 1 } ?: false) + private fun isTrivial(expr: JsExpression): Boolean = when (expr) { + is JsNameRef -> { + val qualifier = expr.qualifier + if (qualifier == null) { + !expr.sideEffects || (expr.name?.let { definitions[it] ?: 0 <= 1 } ?: false) + } + else { + !expr.sideEffects && isTrivial(qualifier) + } + } is JsLiteral.JsValueLiteral -> true else -> false }