diff --git a/compiler/testData/codegen/box/ieee754/differentTypesComparison.kt b/compiler/testData/codegen/box/ieee754/differentTypesComparison.kt index e1922d26397..a29c56f7142 100644 --- a/compiler/testData/codegen/box/ieee754/differentTypesComparison.kt +++ b/compiler/testData/codegen/box/ieee754/differentTypesComparison.kt @@ -1,5 +1,4 @@ // IGNORE_BACKEND: NATIVE -// IGNORE_BACKEND: JS_IR fun box(): String { if (0.toByte().compareTo(-0.0) != 1) return "fail 1.1" if (0.toByte().compareTo(-0.0F) != 1) return "fail 1.2" diff --git a/libraries/stdlib/js/irRuntime/compareTo.kt b/libraries/stdlib/js/irRuntime/compareTo.kt index d28d81deb82..36f3ed6796a 100644 --- a/libraries/stdlib/js/irRuntime/compareTo.kt +++ b/libraries/stdlib/js/irRuntime/compareTo.kt @@ -8,19 +8,19 @@ package kotlin.js // Adopted from misc.js -fun compareTo(a: dynamic, b: dynamic): Int { - var typeA = typeOf(a) - if (typeA == "number") { - if (typeOf(b) == "number") { - return doubleCompareTo(a, b) - } - return primitiveCompareTo(a, b) - } - if (typeA == "string" || typeA == "boolean") { - return primitiveCompareTo(a, b) +fun compareTo(a: dynamic, b: dynamic): Int = when (typeOf(a)) { + "number" -> when { + typeOf(b) == "number" -> + doubleCompareTo(a, b) + b is Long -> + doubleCompareTo(a, b.toDouble()) + else -> + primitiveCompareTo(a, b) } - return compareToDoNotIntrinsicify(a, b) + "string", "boolean" -> primitiveCompareTo(a, b) + + else -> compareToDoNotIntrinsicify(a, b) } @DoNotIntrinsify