Add is64BitLong function. Use exhaustive when in is64BitLong and is64BitNSInteger

to make code a bit more robust.
This commit is contained in:
Sergey Bogolepov
2019-10-02 19:32:20 +03:00
committed by Sergey Bogolepov
parent 8e5fb4dc1e
commit 890ebb02bb
2 changed files with 51 additions and 4 deletions
@@ -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
@@ -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.")
}