[ObjCExport] Fix emission of 'ValueTypeBridge' for 'non primitive' types
^KT-65167
This commit is contained in:
+25
-25
@@ -68,32 +68,32 @@ private fun bridgeType(
|
||||
type: KtType,
|
||||
): TypeBridge {
|
||||
|
||||
return if (type.isPrimitive) {
|
||||
val objCType = when {
|
||||
type.isBoolean -> ObjCValueType.BOOL
|
||||
type.isChar -> ObjCValueType.UNICHAR
|
||||
type.isByte -> ObjCValueType.CHAR
|
||||
type.isShort -> ObjCValueType.SHORT
|
||||
type.isInt -> ObjCValueType.INT
|
||||
type.isLong -> ObjCValueType.LONG_LONG
|
||||
type.isFloat -> ObjCValueType.FLOAT
|
||||
type.isDouble -> ObjCValueType.DOUBLE
|
||||
type.isUByte -> ObjCValueType.UNSIGNED_CHAR
|
||||
type.isUShort -> ObjCValueType.UNSIGNED_SHORT
|
||||
type.isUInt -> ObjCValueType.UNSIGNED_INT
|
||||
type.isULong -> ObjCValueType.UNSIGNED_LONG_LONG
|
||||
else ->
|
||||
/**
|
||||
* Handle [KonanPrimitiveType.NON_NULL_NATIVE_PTR] and [KonanPrimitiveType.VECTOR128]
|
||||
*/
|
||||
TODO()
|
||||
}
|
||||
ValueTypeBridge(objCType)
|
||||
} else if (type.isFunctionType) {
|
||||
bridgeFunctionType(type)
|
||||
} else {
|
||||
ReferenceBridge
|
||||
val primitiveObjCValueType = when {
|
||||
type.isBoolean -> ObjCValueType.BOOL
|
||||
type.isChar -> ObjCValueType.UNICHAR
|
||||
type.isByte -> ObjCValueType.CHAR
|
||||
type.isShort -> ObjCValueType.SHORT
|
||||
type.isInt -> ObjCValueType.INT
|
||||
type.isLong -> ObjCValueType.LONG_LONG
|
||||
type.isFloat -> ObjCValueType.FLOAT
|
||||
type.isDouble -> ObjCValueType.DOUBLE
|
||||
type.isUByte -> ObjCValueType.UNSIGNED_CHAR
|
||||
type.isUShort -> ObjCValueType.UNSIGNED_SHORT
|
||||
type.isUInt -> ObjCValueType.UNSIGNED_INT
|
||||
type.isULong -> ObjCValueType.UNSIGNED_LONG_LONG
|
||||
type.isClassTypeWithClassId(KonanPrimitiveType.NON_NULL_NATIVE_PTR.classId) -> ObjCValueType.POINTER
|
||||
else -> null
|
||||
}
|
||||
|
||||
if (primitiveObjCValueType != null) {
|
||||
return ValueTypeBridge(primitiveObjCValueType)
|
||||
}
|
||||
|
||||
if (type.isFunctionType) {
|
||||
return bridgeFunctionType(type)
|
||||
}
|
||||
|
||||
return ReferenceBridge
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
+14
-18
@@ -361,24 +361,20 @@ private fun KtType.mapType(typeBridge: TypeBridge): ObjCType {
|
||||
return when (typeBridge) {
|
||||
is ReferenceBridge -> this.translateToObjCReferenceType()
|
||||
is BlockPointerBridge -> this.translateToObjCFunctionType(typeBridge)
|
||||
is ValueTypeBridge -> {
|
||||
when {
|
||||
isBoolean -> ObjCPrimitiveType.BOOL
|
||||
isChar -> ObjCPrimitiveType.int8_t
|
||||
isByte -> ObjCPrimitiveType.char
|
||||
isShort -> ObjCPrimitiveType.int16_t
|
||||
isInt -> ObjCPrimitiveType.int32_t
|
||||
isLong -> ObjCPrimitiveType.long_long
|
||||
isFloat -> ObjCPrimitiveType.float
|
||||
isDouble -> ObjCPrimitiveType.double
|
||||
isUByte -> ObjCPrimitiveType.unsigned_char
|
||||
isUShort -> ObjCPrimitiveType.unsigned_short
|
||||
isUInt -> ObjCPrimitiveType.unsigned_int
|
||||
isULong -> ObjCPrimitiveType.unsigned_long_long
|
||||
|
||||
|
||||
else -> TODO("Handle primitive KtType mapping to ObjCType: $this")
|
||||
}
|
||||
is ValueTypeBridge -> 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, this.isMarkedNullable)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user