From 9b5c8bbac916b5c791d7a84ae71d2a4d26879de9 Mon Sep 17 00:00:00 2001 From: Anton Bannykh Date: Fri, 5 Apr 2019 23:23:54 +0300 Subject: [PATCH] JS: switch off inlined local declaration deduplication (KT-30877 fixed) (cherry picked from commit 681e8dd9682afdea822af8e0ad76c9242831e639) --- .../kotlin/js/inline/InliningScope.kt | 16 ----------- .../kotlin/js/translate/general/Merger.kt | 28 ++++++++----------- 2 files changed, 12 insertions(+), 32 deletions(-) diff --git a/js/js.inliner/src/org/jetbrains/kotlin/js/inline/InliningScope.kt b/js/js.inliner/src/org/jetbrains/kotlin/js/inline/InliningScope.kt index 5d8f64c475c..20e96ac89a0 100644 --- a/js/js.inliner/src/org/jetbrains/kotlin/js/inline/InliningScope.kt +++ b/js/js.inliner/src/org/jetbrains/kotlin/js/inline/InliningScope.kt @@ -29,8 +29,6 @@ sealed class InliningScope { protected abstract fun addImport(tag: String, vars: JsVars) - protected open fun addLocalDeclarationBinding(inlineFunctionTag: String, name: JsName, index: Int) {} - protected open fun preprocess(statement: JsStatement) {} private val publicFunctionCache = mutableMapOf() @@ -82,26 +80,16 @@ sealed class InliningScope { } } - val localDeclarations = mutableListOf() - copiedStatements.asSequence() .flatMap { node -> collectDefinedNamesInAllScopes(node).asSequence() } .filter { name -> !newReplacements.containsKey(name) } .forEach { name -> val alias = JsScope.declareTemporaryName(name.ident) alias.copyMetadataFrom(name) - localDeclarations += alias val replacement = JsAstUtils.pureFqn(alias, null) newReplacements[name] = replacement } - // Add local declarations to the name bindings in order to correctly rename usages of the same imported local declaraions - definition.tag?.let { tag -> - localDeclarations.forEachIndexed { index, name -> - addLocalDeclarationBinding(tag, name, index) - } - } - // Apply renaming and restore the static ref links JsBlock(copiedStatements).let { replaceNames(it, newReplacements) @@ -189,10 +177,6 @@ class ImportIntoFragmentInliningScope private constructor( addNameBinding(name, tag) } - override fun addLocalDeclarationBinding(inlineFunctionTag: String, name: JsName, index: Int) { - addNameBinding(name, "\$local:$inlineFunctionTag:$index") - } - override fun addInlinedDeclaration(tag: String?, declaration: JsStatement) { if (tag != null) { fragment.inlinedLocalDeclarations.computeIfAbsent(tag) { JsGlobalBlock() }.statements.add(declaration) diff --git a/js/js.translator/src/org/jetbrains/kotlin/js/translate/general/Merger.kt b/js/js.translator/src/org/jetbrains/kotlin/js/translate/general/Merger.kt index ab92d65bdc7..ec422589670 100644 --- a/js/js.translator/src/org/jetbrains/kotlin/js/translate/general/Merger.kt +++ b/js/js.translator/src/org/jetbrains/kotlin/js/translate/general/Merger.kt @@ -190,7 +190,7 @@ class Merger( return rootNode } - private val importedFunctionWrappers = mutableMapOf() + private val additionalFakeOverrides = mutableListOf() private fun mergeNames() { for (fragment in fragments) { @@ -204,15 +204,23 @@ class Merger( } } + fragment.inlinedLocalDeclarations.forEach { (_, imports) -> + imports.statements.forEach { s -> + if (s.isFakeOverrideAssignment()) { + additionalFakeOverrides += s + } else { + declarationBlock.statements += s + } + } + } + declarationBlock.statements += fragment.declarationBlock initializerBlock.statements += fragment.initializerBlock fragment.tryUpdateTests() fragment.tryUpdateMain() addExportStatements(fragment) - fragment.inlinedLocalDeclarations.forEach { (tag, imports) -> - importedFunctionWrappers.putIfAbsent(tag, imports) - } + classes += fragment.classes } @@ -241,18 +249,6 @@ class Merger( this += importBlock.statements addClassPrototypes(this) - // TODO better placing? - val additionalFakeOverrides = mutableListOf() - importedFunctionWrappers.values.forEach { block -> - block.statements.forEach { s -> - if (s.isFakeOverrideAssignment()) { - additionalFakeOverrides += s - } else { - this += s - } - } - } - this += declarationBlock.statements this += exportBlock.statements addClassPostDeclarations(this)