[Wasm] adapt K/Js version to spec (KT-80998)
diff --git a/libraries/stdlib/wasm/js/internal/StringToDouble.kt b/libraries/stdlib/wasm/js/internal/StringToDouble.kt index 1736685..206eaab 100644 --- a/libraries/stdlib/wasm/js/internal/StringToDouble.kt +++ b/libraries/stdlib/wasm/js/internal/StringToDouble.kt
@@ -6,11 +6,23 @@ package kotlin.wasm.internal @OptIn(ExperimentalWasmJsInterop::class) -@JsFun("(s) => Number(s)") -private external fun parseJsNumber(string: String): Double +private fun parseJsNumber(string: String): Double = + js("Number(string)") + +private fun String.isNaN(): Boolean = when (this) { + "NaN", "+NaN", "-NaN" -> true + else -> false +} internal actual fun parseDouble(string: String): Double { - if (string.isEmpty()) numberFormatError(string) - - return parseJsNumber(string) + val significantPart = string.trim() + if (significantPart.length >= 2 && (significantPart[0] == '0' && + significantPart[1].lowercaseChar() in listOf('x', 'o', 'b')) + ) { + numberFormatError(string) + } + val jsNumber = parseJsNumber(significantPart) + if (jsNumber.isNaN() && !significantPart.isNaN() || jsNumber == 0.0 && significantPart.isBlank()) + numberFormatError(string) + return jsNumber }
diff --git a/libraries/stdlib/wasm/wasi/internal/StringToDouble.kt b/libraries/stdlib/wasm/wasi/internal/StringToDouble.kt index 804eafe..3fdffcb 100644 --- a/libraries/stdlib/wasm/wasi/internal/StringToDouble.kt +++ b/libraries/stdlib/wasm/wasi/internal/StringToDouble.kt
@@ -7,7 +7,6 @@ internal actual fun parseDouble(string: String): Double { if (string.isEmpty()) numberFormatError(string) - if (string.isEmpty()) numberFormatError(string) var index = 0