JS: don't resolve unused temporaries

This commit is contained in:
Alexey Andreev
2016-11-24 14:06:28 +03:00
parent 1db4765801
commit d9e0e9f0b3
2 changed files with 22 additions and 5 deletions
@@ -39,12 +39,14 @@ import com.google.dart.compiler.backend.js.ast.metadata.suspendObjectRef
import org.jetbrains.kotlin.js.inline.util.collectReferencedTemporaryNames
fun JsNode.resolveTemporaryNames() {
val allNames = collectReferencedTemporaryNames(this)
val scopeTree = ScopeCollector().let {
it.accept(this)
it.scopeTree
}
val renamings = scopeTree.resolveNames()
val renamings = scopeTree.resolveNames(allNames)
accept(object : RecursiveJsVisitor() {
override fun visitElement(node: JsNode) {
super.visitElement(node)
@@ -65,10 +67,10 @@ fun JsNode.resolveTemporaryNames() {
})
}
private fun Map<JsScope, Set<JsScope>>.resolveNames(): Map<JsName, JsName> {
private fun Map<JsScope, Set<JsScope>>.resolveNames(knownNames: Set<JsName>): Map<JsName, JsName> {
val replacements = mutableMapOf<JsName, JsName>()
fun traverse(scope: JsScope) {
for (temporaryName in scope.temporaryNames.sortedBy { it.ordinal }) {
for (temporaryName in scope.temporaryNames.filter { it in knownNames }.sortedBy { it.ordinal }) {
replacements[temporaryName] = scope.declareFreshName(temporaryName.ident).apply { copyMetadataFrom(temporaryName) }
}
this[scope]!!.forEach(::traverse)
@@ -25,8 +25,23 @@ import org.jetbrains.kotlin.js.translate.utils.JsAstUtils
fun collectFunctionReferencesInside(scope: JsNode): List<JsName> =
collectReferencedNames(scope).filter { it.staticRef is JsFunction }
fun collectReferencedTemporaryNames(scope: JsNode): Set<JsName> {
val references = mutableSetOf<JsName>()
object : RecursiveJsVisitor() {
override fun visitElement(node: JsNode) {
if (node is HasName) {
node.name?.let { references += it }
}
super.visitElement(node)
}
}.accept(scope)
return references
}
private fun collectReferencedNames(scope: JsNode): Set<JsName> {
val references = IdentitySet<JsName>()
val references = mutableSetOf<JsName>()
object : RecursiveJsVisitor() {
override fun visitBreak(x: JsBreak) { }
@@ -53,7 +68,7 @@ private fun collectReferencedNames(scope: JsNode): Set<JsName> {
}
fun collectUsedNames(scope: JsNode): Set<JsName> {
val references = IdentitySet<JsName>()
val references = mutableSetOf<JsName>()
object : RecursiveJsVisitor() {
override fun visitBreak(x: JsBreak) { }