[Wasm] Fix external functions import clashing

This commit is contained in:
Igor Yakovlev
2022-12-19 22:49:44 +01:00
committed by teamcity
parent 35340f2f04
commit fc80104d55
5 changed files with 42 additions and 1 deletions
@@ -54,7 +54,10 @@ class DeclarationGenerator(
}
private fun jsCodeName(declaration: IrFunction): String {
return declaration.fqNameWhenAvailable!!.asString() + "_" + (declaration as IrSimpleFunction).wasmSignature(irBuiltIns).hashCode()
require(declaration is IrSimpleFunction)
val fqName = declaration.fqNameWhenAvailable!!.asString()
val hashCode = declaration.wasmSignature(irBuiltIns).hashCode() + declaration.file.path.hashCode()
return "${fqName}_$hashCode"
}
override fun visitFunction(declaration: IrFunction) {
+21
View File
@@ -0,0 +1,21 @@
// IGNORE_BACKEND: JS_IR, JS
// FILE: file1.kt
@JsFun("() => 42")
private external fun clashName(): Int
public fun getClashName1(): Int = clashName()
// FILE: file2.kt
@JsFun("() => 24")
private external fun clashName(): Int
public fun getClashName2(): Int = clashName()
fun box(): String {
if (getClashName1() != 42) return "Error1"
if (getClashName2() != 24) return "Error2"
return "OK"
}
@@ -73,6 +73,12 @@ public class FirJsCodegenWasmJsInteropTestGenerated extends AbstractFirJsCodegen
runTest("compiler/testData/codegen/boxWasmJsInterop/longStrings.kt");
}
@Test
@TestMetadata("nameClash.kt")
public void testNameClash() throws Exception {
runTest("compiler/testData/codegen/boxWasmJsInterop/nameClash.kt");
}
@Test
@TestMetadata("types.kt")
public void testTypes() throws Exception {
@@ -73,6 +73,12 @@ public class IrCodegenWasmJsInteropJsTestGenerated extends AbstractIrCodegenWasm
runTest("compiler/testData/codegen/boxWasmJsInterop/longStrings.kt");
}
@Test
@TestMetadata("nameClash.kt")
public void testNameClash() throws Exception {
runTest("compiler/testData/codegen/boxWasmJsInterop/nameClash.kt");
}
@Test
@TestMetadata("types.kt")
public void testTypes() throws Exception {
@@ -85,6 +85,11 @@ public class IrCodegenWasmJsInteropWasmTestGenerated extends AbstractIrCodegenWa
runTest("compiler/testData/codegen/boxWasmJsInterop/longStrings.kt");
}
@TestMetadata("nameClash.kt")
public void testNameClash() throws Exception {
runTest("compiler/testData/codegen/boxWasmJsInterop/nameClash.kt");
}
@TestMetadata("nullableExternRefs.kt")
public void testNullableExternRefs() throws Exception {
runTest("compiler/testData/codegen/boxWasmJsInterop/nullableExternRefs.kt");