JS/Inlining: in temporary variable elimination introduce better recognition of FQNs without side effects

This commit is contained in:
Alexey Andreev
2016-05-04 17:59:20 +03:00
parent c08e2e8ca0
commit 776c7447b1
@@ -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
}