From 6cd2a5932a8b83a46116dcf2b8ba4d4e894d7f5c Mon Sep 17 00:00:00 2001 From: Artem Olkov Date: Tue, 13 Feb 2024 08:03:33 +0000 Subject: [PATCH] Fix generation of KtBridges, now it is using actual C Function Name Merge-request: KT-MR-14337 Merged-by: Artem Olkov --- .../kotlin/sir/bridge/impl/BridgeGeneratorImpl.kt | 11 +++++++++-- .../testData/multiple_requests/expected.kt | 4 ++-- .../testData/primitive_parameters/expected.kt | 6 +++--- .../testData/property_accessors/expected.kt | 2 +- .../sir-compiler-bridge/testData/smoke0/expected.kt | 2 +- .../testData/documentation/golden_result/result.kt | 2 +- .../testData/functions/golden_result/result.kt | 10 +++++----- .../testData/variables/golden_result/result.kt | 4 ++-- 8 files changed, 24 insertions(+), 17 deletions(-) diff --git a/native/swift/sir-compiler-bridge/src/org/jetbrains/kotlin/sir/bridge/impl/BridgeGeneratorImpl.kt b/native/swift/sir-compiler-bridge/src/org/jetbrains/kotlin/sir/bridge/impl/BridgeGeneratorImpl.kt index 4506cbdf73c..1464312385c 100644 --- a/native/swift/sir-compiler-bridge/src/org/jetbrains/kotlin/sir/bridge/impl/BridgeGeneratorImpl.kt +++ b/native/swift/sir-compiler-bridge/src/org/jetbrains/kotlin/sir/bridge/impl/BridgeGeneratorImpl.kt @@ -20,7 +20,13 @@ internal class BridgeGeneratorImpl : BridgeGenerator { val parameterBridges = request.callable.allParameters.mapIndexed { index, value -> bridgeParameter(value, index) } val cDeclaration = request.createCDeclaration() - val kotlinBridge = createKotlinBridge(request.bridgeName, request.fqName, kotlinReturnType, parameterBridges.map { it.kotlin }) + val kotlinBridge = createKotlinBridge( + bridgeName = request.bridgeName, + cName = request.cDeclarationName(), + functionFqName = request.fqName, + returnType = kotlinReturnType, + parameterBridges = parameterBridges.map { it.kotlin } + ) return FunctionBridge( KotlinFunctionBridge(kotlinBridge, listOf(exportAnnotationFqName)), CFunctionBridge(cDeclaration, listOf(stdintHeader)) @@ -41,12 +47,13 @@ internal fun BridgeRequest.cDeclarationName(): String { private fun createKotlinBridge( bridgeName: String, + cName: String, functionFqName: List, returnType: KotlinType, parameterBridges: List, ): List { val declaration = createKotlinDeclarationSignature(bridgeName, returnType, parameterBridges) - val annotation = "@${exportAnnotationFqName.substringAfterLast('.')}(\"${bridgeName}\")" + val annotation = "@${exportAnnotationFqName.substringAfterLast('.')}(\"${cName}\")" val resultName = "result" val callSite = createCallSite(functionFqName, parameterBridges.map { it.name }, resultName) return """ diff --git a/native/swift/sir-compiler-bridge/testData/multiple_requests/expected.kt b/native/swift/sir-compiler-bridge/testData/multiple_requests/expected.kt index fcd04c39ab3..c4c655cdaca 100644 --- a/native/swift/sir-compiler-bridge/testData/multiple_requests/expected.kt +++ b/native/swift/sir-compiler-bridge/testData/multiple_requests/expected.kt @@ -1,12 +1,12 @@ import kotlin.native.internal.ExportedBridge -@ExportedBridge("a_b_bar_bridge") +@ExportedBridge("a_b_bar_bridge__TypesOfArguments__int32_t_int64_t__") public fun a_b_bar_bridge(param1: Int, param2: Long): Int { val result = a.b.bar(param1, param2) return result } -@ExportedBridge("a_b_foo_bridge") +@ExportedBridge("a_b_foo_bridge__TypesOfArguments__int32_t_int64_t__") public fun a_b_foo_bridge(param1: Int, param2: Long): Boolean { val result = a.b.foo(param1, param2) return result diff --git a/native/swift/sir-compiler-bridge/testData/primitive_parameters/expected.kt b/native/swift/sir-compiler-bridge/testData/primitive_parameters/expected.kt index 66b551735f6..304b083ce11 100644 --- a/native/swift/sir-compiler-bridge/testData/primitive_parameters/expected.kt +++ b/native/swift/sir-compiler-bridge/testData/primitive_parameters/expected.kt @@ -1,18 +1,18 @@ import kotlin.native.internal.ExportedBridge -@ExportedBridge("a") +@ExportedBridge("a__TypesOfArguments__int8_t_int16_t_int32_t_int64_t__") public fun a(p0: Byte, p1: Short, p2: Int, p3: Long): Int { val result = pkg.a(p0, p1, p2, p3) return result } -@ExportedBridge("b") +@ExportedBridge("b__TypesOfArguments__uint8_t_uint16_t_uint32_t_uint64_t__") public fun b(p0: UByte, p1: UShort, p2: UInt, p3: ULong): UInt { val result = pkg.b(p0, p1, p2, p3) return result } -@ExportedBridge("c") +@ExportedBridge("c__TypesOfArguments___Bool__") public fun c(p0: Boolean): Boolean { val result = pkg.c(p0) return result diff --git a/native/swift/sir-compiler-bridge/testData/property_accessors/expected.kt b/native/swift/sir-compiler-bridge/testData/property_accessors/expected.kt index 84c12917333..1feb7edcf85 100644 --- a/native/swift/sir-compiler-bridge/testData/property_accessors/expected.kt +++ b/native/swift/sir-compiler-bridge/testData/property_accessors/expected.kt @@ -6,7 +6,7 @@ public fun getter_bridge(): Boolean { return result } -@ExportedBridge("setter_bridge") +@ExportedBridge("setter_bridge__TypesOfArguments___Bool__") public fun setter_bridge(newValue: Boolean): Unit { val result = variable(newValue) return result diff --git a/native/swift/sir-compiler-bridge/testData/smoke0/expected.kt b/native/swift/sir-compiler-bridge/testData/smoke0/expected.kt index 68e6a09dba6..fc5e019a7fd 100644 --- a/native/swift/sir-compiler-bridge/testData/smoke0/expected.kt +++ b/native/swift/sir-compiler-bridge/testData/smoke0/expected.kt @@ -1,6 +1,6 @@ import kotlin.native.internal.ExportedBridge -@ExportedBridge("a_b_foo_bridge") +@ExportedBridge("a_b_foo_bridge__TypesOfArguments__int32_t_int64_t__") public fun a_b_foo_bridge(param1: Int, param2: Long): Int { val result = a.b.foo(param1, param2) return result diff --git a/native/swift/swift-export-standalone/testData/documentation/golden_result/result.kt b/native/swift/swift-export-standalone/testData/documentation/golden_result/result.kt index e9108f2edc1..3dde3d84b2e 100644 --- a/native/swift/swift-export-standalone/testData/documentation/golden_result/result.kt +++ b/native/swift/swift-export-standalone/testData/documentation/golden_result/result.kt @@ -1,6 +1,6 @@ import kotlin.native.internal.ExportedBridge -@ExportedBridge("__root___foo") +@ExportedBridge("__root___foo__TypesOfArguments__int32_t_double__") public fun __root___foo(p: Int, p2: Double): Short { val result = foo(p, p2) return result diff --git a/native/swift/swift-export-standalone/testData/functions/golden_result/result.kt b/native/swift/swift-export-standalone/testData/functions/golden_result/result.kt index 9c9e33b1d69..610a8b94b1c 100644 --- a/native/swift/swift-export-standalone/testData/functions/golden_result/result.kt +++ b/native/swift/swift-export-standalone/testData/functions/golden_result/result.kt @@ -6,13 +6,13 @@ public fun namespace1_local_functions_foo(): Unit { return result } -@ExportedBridge("namespace1_main_foobar") +@ExportedBridge("namespace1_main_foobar__TypesOfArguments__int32_t__") public fun namespace1_main_foobar(param: Int): Int { val result = namespace1.main.foobar(param) return result } -@ExportedBridge("namespace1_main_all_args") +@ExportedBridge("namespace1_main_all_args__TypesOfArguments___Bool_int8_t_int16_t_int32_t_int64_t_float_double__") public fun namespace1_main_all_args(arg1: Boolean, arg2: Byte, arg3: Short, arg4: Int, arg5: Long, arg10: Float, arg11: Double): Unit { val result = namespace1.main.all_args(arg1, arg2, arg3, arg4, arg5, arg10, arg11) return result @@ -24,19 +24,19 @@ public fun namespace1_bar(): Int { return result } -@ExportedBridge("namespace2_foo") +@ExportedBridge("namespace2_foo__TypesOfArguments__int32_t__") public fun namespace2_foo(arg1: Int): Int { val result = namespace2.foo(arg1) return result } -@ExportedBridge("overload_foo") +@ExportedBridge("overload_foo__TypesOfArguments__int32_t__") public fun overload_foo(arg1: Int): Int { val result = overload.foo(arg1) return result } -@ExportedBridge("overload_foo") +@ExportedBridge("overload_foo__TypesOfArguments__double__") public fun overload_foo(arg1: Double): Int { val result = overload.foo(arg1) return result diff --git a/native/swift/swift-export-standalone/testData/variables/golden_result/result.kt b/native/swift/swift-export-standalone/testData/variables/golden_result/result.kt index 904b74ac19e..ab7ae748328 100644 --- a/native/swift/swift-export-standalone/testData/variables/golden_result/result.kt +++ b/native/swift/swift-export-standalone/testData/variables/golden_result/result.kt @@ -12,13 +12,13 @@ public fun namespace_main_bar_get(): Int { return result } -@ExportedBridge("namespace_main_bar_set") +@ExportedBridge("namespace_main_bar_set__TypesOfArguments__int32_t__") public fun namespace_main_bar_set(newValue: Int): Unit { val result = namespace.main.bar(newValue) return result } -@ExportedBridge("namespace_main_foobar") +@ExportedBridge("namespace_main_foobar__TypesOfArguments__int32_t__") public fun namespace_main_foobar(param: Int): Int { val result = namespace.main.foobar(param) return result