[ObjCExport] Initial implementation of function type translation
^KT-65167
This commit is contained in:
committed by
Space Team
parent
3766a5f2ad
commit
c958aef679
+1
-1
@@ -111,7 +111,7 @@ private fun bridgeFunctionType(type: KtType): TypeBridge {
|
||||
|
||||
if (type is KtFunctionalType) {
|
||||
numberOfParameters = type.parameterTypes.size
|
||||
returnType = type.parameterTypes.last()
|
||||
returnType = type.returnType
|
||||
} else {
|
||||
numberOfParameters = 0
|
||||
returnType = type
|
||||
|
||||
+12
-5
@@ -1,11 +1,18 @@
|
||||
@file:Suppress("UNUSED_PARAMETER")
|
||||
|
||||
package org.jetbrains.kotlin.objcexport
|
||||
|
||||
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
|
||||
import org.jetbrains.kotlin.analysis.api.types.KtFunctionalType
|
||||
import org.jetbrains.kotlin.analysis.api.types.KtType
|
||||
import org.jetbrains.kotlin.backend.konan.objcexport.BlockPointerBridge
|
||||
import org.jetbrains.kotlin.backend.konan.objcexport.ObjCReferenceType
|
||||
import org.jetbrains.kotlin.backend.konan.objcexport.*
|
||||
|
||||
context(KtAnalysisSession, KtObjCExportSession)
|
||||
internal fun KtType.translateToObjCFunctionType(typeBridge: BlockPointerBridge): ObjCReferenceType {
|
||||
TODO()
|
||||
if (this !is KtFunctionalType) return ObjCIdType
|
||||
|
||||
return ObjCBlockPointerType(
|
||||
returnType = if (typeBridge.returnsVoid) ObjCVoidType else returnType.translateToObjCReferenceType(),
|
||||
parameterTypes = listOfNotNull(this.receiverType).plus(this.parameterTypes).map { parameterType ->
|
||||
parameterType.translateToObjCReferenceType()
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
+23
@@ -69,6 +69,29 @@ class ObjCExportTypeTranslationTest(
|
||||
assertEquals("A *, B * _Nullable -> C * _Nullable", header.renderTypesOfSymbol("foo"))
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `test - Unit as return type`() {
|
||||
val header = header(
|
||||
"""
|
||||
fun foo() = Unit
|
||||
""".trimIndent()
|
||||
)
|
||||
|
||||
assertEquals(" -> void", header.renderTypesOfSymbol("foo"))
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `test - Unit as parameter type`() {
|
||||
val header = header(
|
||||
"""
|
||||
fun foo(unit: Unit) = Unit
|
||||
""".trimIndent()
|
||||
)
|
||||
|
||||
assertEquals("Unit * -> void", header.renderTypesOfSymbol("foo"))
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
fun `test - hiddenTypes - Any - are exposed as id`() {
|
||||
val header = header("""fun foo(): Any""")
|
||||
|
||||
Reference in New Issue
Block a user