From eb7805baf9592b95f71f692cc940b1bf3659063b Mon Sep 17 00:00:00 2001 From: Shagen Ogandzhanian Date: Tue, 18 Jul 2023 13:06:33 +0200 Subject: [PATCH] [KT-59294] [wasm] Resolve undefined to null for any nullable types in external functions --- .../backend/wasm/lower/JsInteropFunctionsLowering.kt | 12 ++++-------- .../codegen/boxWasmJsInterop/nullableExternRefs.kt | 5 +++++ .../testData/box/native/simpleUndefined.kt | 1 - 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/lower/JsInteropFunctionsLowering.kt b/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/lower/JsInteropFunctionsLowering.kt index 92c7462f83a..a8cf74a8f6a 100644 --- a/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/lower/JsInteropFunctionsLowering.kt +++ b/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/lower/JsInteropFunctionsLowering.kt @@ -328,14 +328,10 @@ class JsInteropFunctionsLowering(val context: WasmBackendContext) : DeclarationT ) } else { //nullable reference should not be checked val nullableValueAdapter = valueAdapter?.let(::NullOrAdapter) - if (isExternalType(notNullType)) { - val undefinedToNullAdapter = FunctionBasedAdapter(adapters.jsCheckIsNullOrUndefinedAdapter.owner) - nullableValueAdapter - ?.let { CombineAdapter(it, undefinedToNullAdapter) } - ?: undefinedToNullAdapter - } else { - nullableValueAdapter - } + val undefinedToNullAdapter = FunctionBasedAdapter(adapters.jsCheckIsNullOrUndefinedAdapter.owner) + nullableValueAdapter + ?.let { CombineAdapter(it, undefinedToNullAdapter) } + ?: undefinedToNullAdapter } } diff --git a/compiler/testData/codegen/boxWasmJsInterop/nullableExternRefs.kt b/compiler/testData/codegen/boxWasmJsInterop/nullableExternRefs.kt index de050009eba..11564fd2cae 100644 --- a/compiler/testData/codegen/boxWasmJsInterop/nullableExternRefs.kt +++ b/compiler/testData/codegen/boxWasmJsInterop/nullableExternRefs.kt @@ -25,6 +25,10 @@ fun getNull(): EI? = fun getUndefined(): EI? = js("undefined") +// https://youtrack.jetbrains.com/issue/KT-59294/WASM-localStorage-Cannot-read-properties-of-undefined-reading-length +fun getStringUndefined(): String? = + js("undefined") + fun isJsNull(ref: EI?): Boolean = js("ref === null") @@ -55,6 +59,7 @@ fun box(): String { assertTrue((jsNull as Any?) == null) assertTrue((jsNull as Any?) === null) assertTrue(jsUndefined == null) + assertTrue(getStringUndefined() == null) assertTrue(isJsNull(null)) assertTrue(isJsNull(null as EI?)) diff --git a/js/js.translator/testData/box/native/simpleUndefined.kt b/js/js.translator/testData/box/native/simpleUndefined.kt index f4a48b4bdc6..dfb3b6ce539 100644 --- a/js/js.translator/testData/box/native/simpleUndefined.kt +++ b/js/js.translator/testData/box/native/simpleUndefined.kt @@ -1,4 +1,3 @@ -// IGNORE_BACKEND: WASM // EXPECTED_REACHABLE_NODES: 1281 package foo