JS/Inlining: in temporary variable elimination introduce better recognition of FQNs without side effects
This commit is contained in:
+10
-2
@@ -488,8 +488,16 @@ internal class TemporaryVariableElimination(private val root: JsStatement) {
|
|||||||
return (expr != null && isTrivial(expr)) || usages[name] ?: 0 == 1
|
return (expr != null && isTrivial(expr)) || usages[name] ?: 0 == 1
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun isTrivial(expr: JsExpression) = when (expr) {
|
private fun isTrivial(expr: JsExpression): Boolean = when (expr) {
|
||||||
is JsNameRef -> expr.qualifier == null && (expr.name?.let { definitions[it] ?: 0 <= 1 } ?: false)
|
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
|
is JsLiteral.JsValueLiteral -> true
|
||||||
else -> false
|
else -> false
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user