[Wasm] Rewrite lazy initialization without by lazy and lateinit to reduce overhead

This commit is contained in:
Zalim Bashorov
2023-03-30 20:47:01 +02:00
parent 1a8a4fa65d
commit 295acdf2af
7 changed files with 42 additions and 27 deletions
+1 -1
View File
@@ -1,6 +1,6 @@
// TARGET_BACKEND: WASM // TARGET_BACKEND: WASM
// WASM_DCE_EXPECTED_OUTPUT_SIZE: wasm 66_687 // WASM_DCE_EXPECTED_OUTPUT_SIZE: wasm 65_583
// WASM_DCE_EXPECTED_OUTPUT_SIZE: mjs 6_517 // WASM_DCE_EXPECTED_OUTPUT_SIZE: mjs 6_517
// FILE: test.kt // FILE: test.kt
+1 -1
View File
@@ -1,6 +1,6 @@
// TARGET_BACKEND: WASM // TARGET_BACKEND: WASM
// WASM_DCE_EXPECTED_OUTPUT_SIZE: wasm 67_012 // WASM_DCE_EXPECTED_OUTPUT_SIZE: wasm 65_908
// WASM_DCE_EXPECTED_OUTPUT_SIZE: mjs 6_458 // WASM_DCE_EXPECTED_OUTPUT_SIZE: mjs 6_458
fun box(): String { fun box(): String {
+1 -1
View File
@@ -1,6 +1,6 @@
// TARGET_BACKEND: WASM // TARGET_BACKEND: WASM
// WASM_DCE_EXPECTED_OUTPUT_SIZE: wasm 78_710 // WASM_DCE_EXPECTED_OUTPUT_SIZE: wasm 77_603
// WASM_DCE_EXPECTED_OUTPUT_SIZE: mjs 6_956 // WASM_DCE_EXPECTED_OUTPUT_SIZE: mjs 6_956
// FILE: test.kt // FILE: test.kt
+1 -1
View File
@@ -1,6 +1,6 @@
// TARGET_BACKEND: WASM // TARGET_BACKEND: WASM
// WASM_DCE_EXPECTED_OUTPUT_SIZE: wasm 66_738 // WASM_DCE_EXPECTED_OUTPUT_SIZE: wasm 65_634
// WASM_DCE_EXPECTED_OUTPUT_SIZE: mjs 6_389 // WASM_DCE_EXPECTED_OUTPUT_SIZE: mjs 6_389
fun box() = "OK" fun box() = "OK"
@@ -77,17 +77,17 @@ internal class TeamcityAdapter : FrameworkAdapter {
println("##teamcity[$type name='${name.tcEscape()}' message='${errorMessage.tcEscape()}' $flowId]") println("##teamcity[$type name='${name.tcEscape()}' message='${errorMessage.tcEscape()}' $flowId]")
} }
private var _testArguments: FrameworkTestArguments? = null
private lateinit var _testArguments: FrameworkTestArguments
private val testArguments: FrameworkTestArguments private val testArguments: FrameworkTestArguments
get() { get() {
if (!::_testArguments.isInitialized) { var value = _testArguments
if (value == null) {
val arguments = d8Arguments().takeIf { it.isNotEmpty() } ?: nodeArguments() val arguments = d8Arguments().takeIf { it.isNotEmpty() } ?: nodeArguments()
_testArguments = FrameworkTestArguments.parse(arguments.split(' ')) value = FrameworkTestArguments.parse(arguments.split(' '))
_testArguments = value
} }
return _testArguments return value
} }
private fun runSuite(name: String, suiteFn: () -> Unit) { private fun runSuite(name: String, suiteFn: () -> Unit) {
@@ -24,13 +24,16 @@ public open class Throwable(open val message: String?, open val cause: kotlin.Th
private val jsStack: ExternalInterfaceType = captureStackTrace() private val jsStack: ExternalInterfaceType = captureStackTrace()
private lateinit var _stack: String private var _stack: String? = null
internal val stack: String internal val stack: String
get() { get() {
if (!::_stack.isInitialized) { var value = _stack
_stack = jsToKotlinStringAdapter(jsStack).removePrefix("Error\n") if (value == null) {
value = jsToKotlinStringAdapter(jsStack).removePrefix("Error\n")
_stack = value
} }
return _stack
return value
} }
internal var suppressedExceptionsList: MutableList<Throwable>? = null internal var suppressedExceptionsList: MutableList<Throwable>? = null
@@ -281,28 +281,40 @@ private fun getJsTrue(): JsBoolean =
private fun getJsFalse(): JsBoolean = private fun getJsFalse(): JsBoolean =
js("false") js("false")
private lateinit var _jsEmptyString: JsString private var _jsEmptyString: JsString? = null
private val jsEmptyString: JsString private val jsEmptyString: JsString
get() { get() {
if (!::_jsEmptyString.isInitialized) var value = _jsEmptyString
_jsEmptyString = getJsEmptyString() if (value == null) {
return _jsEmptyString value = getJsEmptyString()
_jsEmptyString = value
}
return value
} }
private lateinit var _jsTrue: JsBoolean private var _jsTrue: JsBoolean? = null
private val jsTrue: JsBoolean private val jsTrue: JsBoolean
get() { get() {
if (!::_jsTrue.isInitialized) var value = _jsTrue
_jsTrue = getJsTrue() if (value == null) {
return _jsTrue value = getJsTrue()
_jsTrue = value
}
return value
} }
private lateinit var _jsFalse: JsBoolean private var _jsFalse: JsBoolean? = null
private val jsFalse: JsBoolean private val jsFalse: JsBoolean
get() { get() {
if (!::_jsFalse.isInitialized) var value = _jsFalse
_jsFalse = getJsFalse() if (value == null) {
return _jsFalse value = getJsFalse()
_jsFalse = value
}
return value
} }
internal fun numberToDoubleAdapter(x: Number): Double = internal fun numberToDoubleAdapter(x: Number): Double =