diff --git a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/objcexport/BlockPointerSupport.kt b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/objcexport/BlockPointerSupport.kt index d382a1aa243..ceb33cfd9fb 100644 --- a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/objcexport/BlockPointerSupport.kt +++ b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/objcexport/BlockPointerSupport.kt @@ -188,7 +188,7 @@ internal class BlockAdapterToFunctionGenerator(val objCExportCodeGenerator: ObjC } fun org.jetbrains.kotlin.backend.konan.Context.LongInt(value: Long) = - if (is64BitNSInteger()) Int64(value) else Int32(value.toInt()) + if (is64BitLong()) Int64(value) else Int32(value.toInt()) private fun generateDescriptorForBlockAdapterToFunction(bridge: BlockPointerBridge): ConstValue { val numberOfParameters = bridge.numberOfParameters 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 36ba100e7d2..cde2b5d01bc 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 @@ -1325,7 +1325,54 @@ private val TypeBridge.objCEncoding: String get() = when (this) { is ValueTypeBridge -> this.objCValueType.encoding } -internal fun Context.is64BitNSInteger(): Boolean = this.config.target.let { - // We work with watchos_arm64 the same as we work with watchos_arm32. - it.architecture.bitness == 64 && it != KonanTarget.WATCHOS_ARM64 +internal fun Context.is64BitNSInteger(): Boolean = when (val target = this.config.target) { + KonanTarget.IOS_X64, + KonanTarget.IOS_ARM64, + KonanTarget.TVOS_ARM64, + KonanTarget.TVOS_X64, + KonanTarget.MACOS_X64 -> true + KonanTarget.WATCHOS_ARM64, + KonanTarget.WATCHOS_ARM32, + KonanTarget.WATCHOS_X86, + KonanTarget.IOS_ARM32 -> false + KonanTarget.ANDROID_X64, + KonanTarget.ANDROID_X86, + KonanTarget.ANDROID_ARM32, + KonanTarget.ANDROID_ARM64, + KonanTarget.LINUX_X64, + KonanTarget.MINGW_X86, + KonanTarget.MINGW_X64, + KonanTarget.LINUX_ARM64, + KonanTarget.LINUX_ARM32_HFP, + KonanTarget.LINUX_MIPS32, + KonanTarget.LINUX_MIPSEL32, + KonanTarget.WASM32, + is KonanTarget.ZEPHYR -> error("Target $target has no support for NSInteger type.") + KonanTarget.WATCHOS_X64 -> error("Target $target is not supported.") } + +internal fun Context.is64BitLong(): Boolean = when (val target = this.config.target) { + KonanTarget.IOS_X64, + KonanTarget.IOS_ARM64, + KonanTarget.TVOS_ARM64, + KonanTarget.TVOS_X64, + KonanTarget.ANDROID_X64, + KonanTarget.ANDROID_ARM64, + KonanTarget.LINUX_ARM64, + KonanTarget.MINGW_X64, + KonanTarget.LINUX_X64, + KonanTarget.MACOS_X64 -> true + KonanTarget.WATCHOS_ARM64, + KonanTarget.WATCHOS_ARM32, + KonanTarget.ANDROID_X86, + KonanTarget.ANDROID_ARM32, + KonanTarget.WATCHOS_X86, + KonanTarget.MINGW_X86, + KonanTarget.LINUX_ARM32_HFP, + KonanTarget.LINUX_MIPS32, + KonanTarget.LINUX_MIPSEL32, + KonanTarget.WASM32, + is KonanTarget.ZEPHYR, + KonanTarget.IOS_ARM32 -> false + KonanTarget.WATCHOS_X64 -> error("Target $target is not supported.") +} \ No newline at end of file