From a9b553f16e75b7d912c93a0d814d518c6a04151e Mon Sep 17 00:00:00 2001 From: Zalim Bashorov Date: Tue, 28 Mar 2023 02:07:39 +0200 Subject: [PATCH] [Wasm] Don't use `by lazy` to keep some JS values used by adapters --- compiler/testData/codegen/box/size/add.kt | 4 +-- .../testData/codegen/box/size/helloWorld.kt | 4 +-- .../codegen/box/size/helloWorldDOM.kt | 4 +-- compiler/testData/codegen/box/size/ok.kt | 4 +-- .../kotlin/wasm/internal/ExternalWrapper.kt | 26 ++++++++++++++++--- 5 files changed, 31 insertions(+), 11 deletions(-) diff --git a/compiler/testData/codegen/box/size/add.kt b/compiler/testData/codegen/box/size/add.kt index 45985a8d2c2..0f888b425ab 100644 --- a/compiler/testData/codegen/box/size/add.kt +++ b/compiler/testData/codegen/box/size/add.kt @@ -1,7 +1,7 @@ // TARGET_BACKEND: WASM -// WASM_DCE_EXPECTED_OUTPUT_SIZE: wasm 137_837 -// WASM_DCE_EXPECTED_OUTPUT_SIZE: mjs 6_629 +// WASM_DCE_EXPECTED_OUTPUT_SIZE: wasm 132_428 +// WASM_DCE_EXPECTED_OUTPUT_SIZE: mjs 6_517 // FILE: test.kt diff --git a/compiler/testData/codegen/box/size/helloWorld.kt b/compiler/testData/codegen/box/size/helloWorld.kt index 7379ca24ff8..a1a004908af 100644 --- a/compiler/testData/codegen/box/size/helloWorld.kt +++ b/compiler/testData/codegen/box/size/helloWorld.kt @@ -1,7 +1,7 @@ // TARGET_BACKEND: WASM -// WASM_DCE_EXPECTED_OUTPUT_SIZE: wasm 138_169 -// WASM_DCE_EXPECTED_OUTPUT_SIZE: mjs 6_570 +// WASM_DCE_EXPECTED_OUTPUT_SIZE: wasm 132_749 +// WASM_DCE_EXPECTED_OUTPUT_SIZE: mjs 6_458 fun box(): String { println("Hello, World!") diff --git a/compiler/testData/codegen/box/size/helloWorldDOM.kt b/compiler/testData/codegen/box/size/helloWorldDOM.kt index 963d7a9fa9d..f497903733a 100644 --- a/compiler/testData/codegen/box/size/helloWorldDOM.kt +++ b/compiler/testData/codegen/box/size/helloWorldDOM.kt @@ -1,7 +1,7 @@ // TARGET_BACKEND: WASM -// WASM_DCE_EXPECTED_OUTPUT_SIZE: wasm 140_726 -// WASM_DCE_EXPECTED_OUTPUT_SIZE: mjs 7_068 +// WASM_DCE_EXPECTED_OUTPUT_SIZE: wasm 135_298 +// WASM_DCE_EXPECTED_OUTPUT_SIZE: mjs 6_956 // FILE: test.kt diff --git a/compiler/testData/codegen/box/size/ok.kt b/compiler/testData/codegen/box/size/ok.kt index a54ffd2f923..4b084b8f909 100644 --- a/compiler/testData/codegen/box/size/ok.kt +++ b/compiler/testData/codegen/box/size/ok.kt @@ -1,6 +1,6 @@ // TARGET_BACKEND: WASM -// WASM_DCE_EXPECTED_OUTPUT_SIZE: wasm 137_888 -// WASM_DCE_EXPECTED_OUTPUT_SIZE: mjs 6_501 +// WASM_DCE_EXPECTED_OUTPUT_SIZE: wasm 132_479 +// WASM_DCE_EXPECTED_OUTPUT_SIZE: mjs 6_389 fun box() = "OK" \ No newline at end of file diff --git a/libraries/stdlib/wasm/internal/kotlin/wasm/internal/ExternalWrapper.kt b/libraries/stdlib/wasm/internal/kotlin/wasm/internal/ExternalWrapper.kt index 6939d341929..022407a37ba 100644 --- a/libraries/stdlib/wasm/internal/kotlin/wasm/internal/ExternalWrapper.kt +++ b/libraries/stdlib/wasm/internal/kotlin/wasm/internal/ExternalWrapper.kt @@ -281,9 +281,29 @@ private fun getJsTrue(): JsBoolean = private fun getJsFalse(): JsBoolean = js("false") -private val jsEmptyString by lazy(::getJsEmptyString) -private val jsTrue by lazy(::getJsTrue) -private val jsFalse by lazy(::getJsFalse) +private lateinit var _jsEmptyString: JsString +private val jsEmptyString: JsString + get() { + if (!::_jsEmptyString.isInitialized) + _jsEmptyString = getJsEmptyString() + return _jsEmptyString + } + +private lateinit var _jsTrue: JsBoolean +private val jsTrue: JsBoolean + get() { + if (!::_jsTrue.isInitialized) + _jsTrue = getJsTrue() + return _jsTrue + } + +private lateinit var _jsFalse: JsBoolean +private val jsFalse: JsBoolean + get() { + if (!::_jsFalse.isInitialized) + _jsFalse = getJsFalse() + return _jsFalse + } internal fun numberToDoubleAdapter(x: Number): Double = x.toDouble()