diff --git a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/objcexport/ObjCExportCodeGenerator.kt b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/objcexport/ObjCExportCodeGenerator.kt index 8a619042fb8..36c820976c6 100644 --- a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/objcexport/ObjCExportCodeGenerator.kt +++ b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/objcexport/ObjCExportCodeGenerator.kt @@ -100,7 +100,7 @@ internal class ObjCExportCodeGenerator( ObjCValueType.CHAR, ObjCValueType.SHORT, ObjCValueType.INT, ObjCValueType.LONG_LONG, ObjCValueType.UNSIGNED_CHAR, ObjCValueType.UNSIGNED_SHORT, ObjCValueType.UNSIGNED_INT, ObjCValueType.UNSIGNED_LONG_LONG, - ObjCValueType.FLOAT, ObjCValueType.DOUBLE -> value + ObjCValueType.FLOAT, ObjCValueType.DOUBLE, ObjCValueType.POINTER -> value } private fun FunctionGenerationContext.objCToKotlin( @@ -113,7 +113,7 @@ internal class ObjCExportCodeGenerator( ObjCValueType.CHAR, ObjCValueType.SHORT, ObjCValueType.INT, ObjCValueType.LONG_LONG, ObjCValueType.UNSIGNED_CHAR, ObjCValueType.UNSIGNED_SHORT, ObjCValueType.UNSIGNED_INT, ObjCValueType.UNSIGNED_LONG_LONG, - ObjCValueType.FLOAT, ObjCValueType.DOUBLE -> value + ObjCValueType.FLOAT, ObjCValueType.DOUBLE, ObjCValueType.POINTER -> value } fun FunctionGenerationContext.kotlinReferenceToObjC(value: LLVMValueRef) = @@ -1115,6 +1115,7 @@ private val ObjCValueType.llvmType: LLVMTypeRef get() = when (this) { ObjCValueType.UNSIGNED_LONG_LONG -> int64Type ObjCValueType.FLOAT -> LLVMFloatType()!! ObjCValueType.DOUBLE -> LLVMDoubleType()!! + ObjCValueType.POINTER -> kInt8Ptr } private val MethodBridgeParameter.objCType: LLVMTypeRef get() = when (this) { diff --git a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/objcexport/ObjCExportHeaderGenerator.kt b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/objcexport/ObjCExportHeaderGenerator.kt index c7bf8360001..89a0537effd 100644 --- a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/objcexport/ObjCExportHeaderGenerator.kt +++ b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/objcexport/ObjCExportHeaderGenerator.kt @@ -741,22 +741,22 @@ abstract class ObjCExportHeaderGenerator( private fun mapType(kotlinType: KotlinType, typeBridge: TypeBridge): ObjCType = when (typeBridge) { ReferenceBridge -> mapReferenceType(kotlinType) is ValueTypeBridge -> { - val cName = when (typeBridge.objCValueType) { - ObjCValueType.BOOL -> "BOOL" - ObjCValueType.UNICHAR -> "unichar" - ObjCValueType.CHAR -> "int8_t" - ObjCValueType.SHORT -> "int16_t" - ObjCValueType.INT -> "int32_t" - ObjCValueType.LONG_LONG -> "int64_t" - ObjCValueType.UNSIGNED_CHAR -> "uint8_t" - ObjCValueType.UNSIGNED_SHORT -> "uint16_t" - ObjCValueType.UNSIGNED_INT -> "uint32_t" - ObjCValueType.UNSIGNED_LONG_LONG -> "uint64_t" - ObjCValueType.FLOAT -> "float" - ObjCValueType.DOUBLE -> "double" + when (typeBridge.objCValueType) { + ObjCValueType.BOOL -> ObjCPrimitiveType("BOOL") + ObjCValueType.UNICHAR -> ObjCPrimitiveType("unichar") + ObjCValueType.CHAR -> ObjCPrimitiveType("int8_t") + ObjCValueType.SHORT -> ObjCPrimitiveType("int16_t") + ObjCValueType.INT -> ObjCPrimitiveType("int32_t") + ObjCValueType.LONG_LONG -> ObjCPrimitiveType("int64_t") + ObjCValueType.UNSIGNED_CHAR -> ObjCPrimitiveType("uint8_t") + ObjCValueType.UNSIGNED_SHORT -> ObjCPrimitiveType("uint16_t") + ObjCValueType.UNSIGNED_INT -> ObjCPrimitiveType("uint32_t") + ObjCValueType.UNSIGNED_LONG_LONG -> ObjCPrimitiveType("uint64_t") + ObjCValueType.FLOAT -> ObjCPrimitiveType("float") + ObjCValueType.DOUBLE -> ObjCPrimitiveType("double") + ObjCValueType.POINTER -> ObjCPointerType(ObjCVoidType) } // TODO: consider other namings. - ObjCPrimitiveType(cName) } } } \ No newline at end of file diff --git a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/objcexport/ObjCExportMapper.kt b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/objcexport/ObjCExportMapper.kt index b2c142623e0..588b5354a34 100644 --- a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/objcexport/ObjCExportMapper.kt +++ b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/objcexport/ObjCExportMapper.kt @@ -130,7 +130,7 @@ private fun ObjCExportMapper.bridgeType(kotlinType: KotlinType): TypeBridge = ko KonanPrimitiveType.LONG -> ObjCValueType.LONG_LONG KonanPrimitiveType.FLOAT -> ObjCValueType.FLOAT KonanPrimitiveType.DOUBLE -> ObjCValueType.DOUBLE - KonanPrimitiveType.NON_NULL_NATIVE_PTR -> error("Can't produce pointer type to framework API") // TODO + KonanPrimitiveType.NON_NULL_NATIVE_PTR -> ObjCValueType.POINTER } ValueTypeBridge(objCValueType) }, diff --git a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/objcexport/objcTypes.kt b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/objcexport/objcTypes.kt index b495f803703..3134081e4d6 100644 --- a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/objcexport/objcTypes.kt +++ b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/objcexport/objcTypes.kt @@ -123,5 +123,6 @@ internal enum class ObjCValueType(val encoding: String) { UNSIGNED_INT("I"), UNSIGNED_LONG_LONG("Q"), FLOAT("f"), - DOUBLE("d") + DOUBLE("d"), + POINTER("^v") }