Support exposing pointer types when producing framework
This commit is contained in:
committed by
SvyatoslavScherbina
parent
066429831e
commit
d52a3f0c3d
+3
-2
@@ -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) {
|
||||
|
||||
+14
-14
@@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
+1
-1
@@ -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)
|
||||
},
|
||||
|
||||
+2
-1
@@ -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")
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user