[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,
|
type: KtType,
|
||||||
): TypeBridge {
|
): TypeBridge {
|
||||||
|
|
||||||
return if (type.isPrimitive) {
|
val primitiveObjCValueType = when {
|
||||||
val objCType = when {
|
type.isBoolean -> ObjCValueType.BOOL
|
||||||
type.isBoolean -> ObjCValueType.BOOL
|
type.isChar -> ObjCValueType.UNICHAR
|
||||||
type.isChar -> ObjCValueType.UNICHAR
|
type.isByte -> ObjCValueType.CHAR
|
||||||
type.isByte -> ObjCValueType.CHAR
|
type.isShort -> ObjCValueType.SHORT
|
||||||
type.isShort -> ObjCValueType.SHORT
|
type.isInt -> ObjCValueType.INT
|
||||||
type.isInt -> ObjCValueType.INT
|
type.isLong -> ObjCValueType.LONG_LONG
|
||||||
type.isLong -> ObjCValueType.LONG_LONG
|
type.isFloat -> ObjCValueType.FLOAT
|
||||||
type.isFloat -> ObjCValueType.FLOAT
|
type.isDouble -> ObjCValueType.DOUBLE
|
||||||
type.isDouble -> ObjCValueType.DOUBLE
|
type.isUByte -> ObjCValueType.UNSIGNED_CHAR
|
||||||
type.isUByte -> ObjCValueType.UNSIGNED_CHAR
|
type.isUShort -> ObjCValueType.UNSIGNED_SHORT
|
||||||
type.isUShort -> ObjCValueType.UNSIGNED_SHORT
|
type.isUInt -> ObjCValueType.UNSIGNED_INT
|
||||||
type.isUInt -> ObjCValueType.UNSIGNED_INT
|
type.isULong -> ObjCValueType.UNSIGNED_LONG_LONG
|
||||||
type.isULong -> ObjCValueType.UNSIGNED_LONG_LONG
|
type.isClassTypeWithClassId(KonanPrimitiveType.NON_NULL_NATIVE_PTR.classId) -> ObjCValueType.POINTER
|
||||||
else ->
|
else -> null
|
||||||
/**
|
|
||||||
* Handle [KonanPrimitiveType.NON_NULL_NATIVE_PTR] and [KonanPrimitiveType.VECTOR128]
|
|
||||||
*/
|
|
||||||
TODO()
|
|
||||||
}
|
|
||||||
ValueTypeBridge(objCType)
|
|
||||||
} else if (type.isFunctionType) {
|
|
||||||
bridgeFunctionType(type)
|
|
||||||
} else {
|
|
||||||
ReferenceBridge
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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) {
|
return when (typeBridge) {
|
||||||
is ReferenceBridge -> this.translateToObjCReferenceType()
|
is ReferenceBridge -> this.translateToObjCReferenceType()
|
||||||
is BlockPointerBridge -> this.translateToObjCFunctionType(typeBridge)
|
is BlockPointerBridge -> this.translateToObjCFunctionType(typeBridge)
|
||||||
is ValueTypeBridge -> {
|
is ValueTypeBridge -> when (typeBridge.objCValueType) {
|
||||||
when {
|
ObjCValueType.BOOL -> ObjCPrimitiveType.BOOL
|
||||||
isBoolean -> ObjCPrimitiveType.BOOL
|
ObjCValueType.UNICHAR -> ObjCPrimitiveType.unichar
|
||||||
isChar -> ObjCPrimitiveType.int8_t
|
ObjCValueType.CHAR -> ObjCPrimitiveType.int8_t
|
||||||
isByte -> ObjCPrimitiveType.char
|
ObjCValueType.SHORT -> ObjCPrimitiveType.int16_t
|
||||||
isShort -> ObjCPrimitiveType.int16_t
|
ObjCValueType.INT -> ObjCPrimitiveType.int32_t
|
||||||
isInt -> ObjCPrimitiveType.int32_t
|
ObjCValueType.LONG_LONG -> ObjCPrimitiveType.int64_t
|
||||||
isLong -> ObjCPrimitiveType.long_long
|
ObjCValueType.UNSIGNED_CHAR -> ObjCPrimitiveType.uint8_t
|
||||||
isFloat -> ObjCPrimitiveType.float
|
ObjCValueType.UNSIGNED_SHORT -> ObjCPrimitiveType.uint16_t
|
||||||
isDouble -> ObjCPrimitiveType.double
|
ObjCValueType.UNSIGNED_INT -> ObjCPrimitiveType.uint32_t
|
||||||
isUByte -> ObjCPrimitiveType.unsigned_char
|
ObjCValueType.UNSIGNED_LONG_LONG -> ObjCPrimitiveType.uint64_t
|
||||||
isUShort -> ObjCPrimitiveType.unsigned_short
|
ObjCValueType.FLOAT -> ObjCPrimitiveType.float
|
||||||
isUInt -> ObjCPrimitiveType.unsigned_int
|
ObjCValueType.DOUBLE -> ObjCPrimitiveType.double
|
||||||
isULong -> ObjCPrimitiveType.unsigned_long_long
|
ObjCValueType.POINTER -> ObjCPointerType(ObjCVoidType, this.isMarkedNullable)
|
||||||
|
|
||||||
|
|
||||||
else -> TODO("Handle primitive KtType mapping to ObjCType: $this")
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user