From abb254297a06a0f603a063cfad235fec29b8684c Mon Sep 17 00:00:00 2001 From: Alexey Andreev Date: Wed, 23 Aug 2017 15:24:10 +0300 Subject: [PATCH] Properly rename local name aliases when merging JS fragments together --- .../js/test/semantics/BoxJsTestGenerated.java | 6 ++++++ .../kotlin/js/translate/general/Merger.kt | 5 ++++- .../sameNameOfDeclarationsInSameModule.kt | 18 ++++++++++++++++++ 3 files changed, 28 insertions(+), 1 deletion(-) create mode 100644 js/js.translator/testData/box/inline/sameNameOfDeclarationsInSameModule.kt diff --git a/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/BoxJsTestGenerated.java b/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/BoxJsTestGenerated.java index 3b248f07322..3883d18650e 100644 --- a/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/BoxJsTestGenerated.java +++ b/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/BoxJsTestGenerated.java @@ -4115,6 +4115,12 @@ public class BoxJsTestGenerated extends AbstractBoxJsTest { doTest(fileName); } + @TestMetadata("sameNameOfDeclarationsInSameModule.kt") + public void testSameNameOfDeclarationsInSameModule() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("js/js.translator/testData/box/inline/sameNameOfDeclarationsInSameModule.kt"); + doTest(fileName); + } + @TestMetadata("severalClosures.kt") public void testSeveralClosures() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("js/js.translator/testData/box/inline/severalClosures.kt"); 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 f41bb29250c..5082161250a 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 @@ -21,6 +21,7 @@ import org.jetbrains.kotlin.js.backend.ast.* import org.jetbrains.kotlin.js.backend.ast.metadata.coroutineMetadata import org.jetbrains.kotlin.js.backend.ast.metadata.exportedPackage import org.jetbrains.kotlin.js.backend.ast.metadata.exportedTag +import org.jetbrains.kotlin.js.backend.ast.metadata.localAlias import org.jetbrains.kotlin.js.translate.context.Namer import org.jetbrains.kotlin.js.translate.utils.JsAstUtils import org.jetbrains.kotlin.js.translate.utils.createPrototypeStatements @@ -141,7 +142,9 @@ class Merger(private val rootFunction: JsFunction, val internalModuleName: JsNam override fun visitElement(node: JsNode) { super.visitElement(node) if (node is HasName) { - node.name = node.name?.let { name -> rename(name) } + val oldName = node.name + node.name = oldName?.let { rename(it) } + node.name?.localAlias = oldName?.localAlias?.let { rename(it) } } if (node is JsFunction) { val coroutineMetadata = node.coroutineMetadata diff --git a/js/js.translator/testData/box/inline/sameNameOfDeclarationsInSameModule.kt b/js/js.translator/testData/box/inline/sameNameOfDeclarationsInSameModule.kt new file mode 100644 index 00000000000..7b488c46c0a --- /dev/null +++ b/js/js.translator/testData/box/inline/sameNameOfDeclarationsInSameModule.kt @@ -0,0 +1,18 @@ +// EXPECTED_REACHABLE_NODES: 996 +fun foo(x: Int) = "int: $x" + +fun foo(x: String) = "string: $x" + +inline fun bar(x: Int) = foo(x) + +inline fun bar(x: String) = foo(x) + +fun box(): String { + val a = bar(23) + if (a != "int: 23") return "fail1: $a" + + val b = bar("qqq") + if (b != "string: qqq") return "fail2: $b" + + return "OK" +} \ No newline at end of file