diff --git a/compiler/testData/codegen/box/size/add.kt b/compiler/testData/codegen/box/size/add.kt index 0f888b425ab..8dafa1a71b2 100644 --- a/compiler/testData/codegen/box/size/add.kt +++ b/compiler/testData/codegen/box/size/add.kt @@ -1,6 +1,6 @@ // TARGET_BACKEND: WASM -// WASM_DCE_EXPECTED_OUTPUT_SIZE: wasm 132_428 +// WASM_DCE_EXPECTED_OUTPUT_SIZE: wasm 114_138 // 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 a1a004908af..fa614f3ea94 100644 --- a/compiler/testData/codegen/box/size/helloWorld.kt +++ b/compiler/testData/codegen/box/size/helloWorld.kt @@ -1,6 +1,6 @@ // TARGET_BACKEND: WASM -// WASM_DCE_EXPECTED_OUTPUT_SIZE: wasm 132_749 +// WASM_DCE_EXPECTED_OUTPUT_SIZE: wasm 114_456 // WASM_DCE_EXPECTED_OUTPUT_SIZE: mjs 6_458 fun box(): String { diff --git a/compiler/testData/codegen/box/size/helloWorldDOM.kt b/compiler/testData/codegen/box/size/helloWorldDOM.kt index f497903733a..8c3c8473677 100644 --- a/compiler/testData/codegen/box/size/helloWorldDOM.kt +++ b/compiler/testData/codegen/box/size/helloWorldDOM.kt @@ -1,6 +1,6 @@ // TARGET_BACKEND: WASM -// WASM_DCE_EXPECTED_OUTPUT_SIZE: wasm 135_298 +// WASM_DCE_EXPECTED_OUTPUT_SIZE: wasm 126_639 // 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 4b084b8f909..0127beb78bf 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 132_479 +// WASM_DCE_EXPECTED_OUTPUT_SIZE: wasm 114_189 // WASM_DCE_EXPECTED_OUTPUT_SIZE: mjs 6_389 fun box() = "OK" \ No newline at end of file diff --git a/libraries/stdlib/wasm/builtins/kotlin/Any.kt b/libraries/stdlib/wasm/builtins/kotlin/Any.kt index cc5576bd926..ddce260de45 100644 --- a/libraries/stdlib/wasm/builtins/kotlin/Any.kt +++ b/libraries/stdlib/wasm/builtins/kotlin/Any.kt @@ -57,8 +57,10 @@ public open class Any @WasmPrimitiveConstructor constructor() { * Returns a string representation of the object. */ public open fun toString(): String { - val typeData = getTypeInfoTypeDataByPtr(typeInfo) - val qualifiedName = if (typeData.packageName.isEmpty()) typeData.typeName else "${typeData.packageName}.${typeData.typeName}" + val typeInfoPtr = this.typeInfo + val packageName = getPackageName(typeInfoPtr) + val simpleName = getSimpleName(typeInfoPtr) + val qualifiedName = if (packageName.isEmpty()) simpleName else "$packageName.$simpleName" return "$qualifiedName@${identityHashCode()}" } } diff --git a/libraries/stdlib/wasm/builtins/kotlin/Throwable.kt b/libraries/stdlib/wasm/builtins/kotlin/Throwable.kt index 3ab31a26a69..de4ad4cc327 100644 --- a/libraries/stdlib/wasm/builtins/kotlin/Throwable.kt +++ b/libraries/stdlib/wasm/builtins/kotlin/Throwable.kt @@ -6,6 +6,7 @@ package kotlin import kotlin.wasm.internal.ExternalInterfaceType +import kotlin.wasm.internal.getSimpleName import kotlin.wasm.internal.jsToKotlinStringAdapter /** @@ -34,8 +35,7 @@ public open class Throwable(open val message: String?, open val cause: kotlin.Th * followed by the exception message if it is not null. */ public override fun toString(): String { - val kClass = this::class - val s = kClass.simpleName ?: "Throwable" + val s = getSimpleName(this.typeInfo) return if (message != null) s + ": " + message.toString() else s } } diff --git a/libraries/stdlib/wasm/internal/kotlin/wasm/internal/ExceptionHelpers.kt b/libraries/stdlib/wasm/internal/kotlin/wasm/internal/ExceptionHelpers.kt index 24acc198bcf..afeb7304a93 100644 --- a/libraries/stdlib/wasm/internal/kotlin/wasm/internal/ExceptionHelpers.kt +++ b/libraries/stdlib/wasm/internal/kotlin/wasm/internal/ExceptionHelpers.kt @@ -17,7 +17,7 @@ private fun throwJsError(message: String?, wasmTypeName: String?, stack: String) } internal fun throwAsJsException(t: Throwable): Nothing { - throwJsError(t.message, t::class.simpleName, t.stackTraceToString()) + throwJsError(t.message, getSimpleName(t.typeInfo), t.stackTraceToString()) } internal var isNotFirstWasmExportCall: Boolean = false \ No newline at end of file diff --git a/libraries/stdlib/wasm/internal/kotlin/wasm/internal/TypeInfo.kt b/libraries/stdlib/wasm/internal/kotlin/wasm/internal/TypeInfo.kt index 4396f02d79a..a093b14da89 100644 --- a/libraries/stdlib/wasm/internal/kotlin/wasm/internal/TypeInfo.kt +++ b/libraries/stdlib/wasm/internal/kotlin/wasm/internal/TypeInfo.kt @@ -25,17 +25,32 @@ internal val TypeInfoData.isInterfaceType get() = typeId < 0 internal fun getTypeInfoTypeDataByPtr(typeInfoPtr: Int): TypeInfoData { - val fqNameLength = wasm_i32_load(typeInfoPtr + TYPE_INFO_TYPE_PACKAGE_NAME_LENGTH_OFFSET) - val fqNameId = wasm_i32_load(typeInfoPtr + TYPE_INFO_TYPE_PACKAGE_NAME_ID_OFFSET) - val fqNamePtr = wasm_i32_load(typeInfoPtr + TYPE_INFO_TYPE_PACKAGE_NAME_PRT_OFFSET) - val simpleNameLength = wasm_i32_load(typeInfoPtr + TYPE_INFO_TYPE_SIMPLE_NAME_LENGTH_OFFSET) - val simpleNameId = wasm_i32_load(typeInfoPtr + TYPE_INFO_TYPE_SIMPLE_NAME_ID_OFFSET) - val simpleNamePtr = wasm_i32_load(typeInfoPtr + TYPE_INFO_TYPE_SIMPLE_NAME_PRT_OFFSET) - val packageName = stringLiteral(fqNameId, fqNamePtr, fqNameLength) - val simpleName = stringLiteral(simpleNameId, simpleNamePtr, simpleNameLength) + val packageName = getPackageName(typeInfoPtr) + val simpleName = getSimpleName(typeInfoPtr) return TypeInfoData(typeInfoPtr, packageName, simpleName) } +internal fun getSimpleName(typeInfoPtr: Int) = getString( + typeInfoPtr, + TYPE_INFO_TYPE_SIMPLE_NAME_LENGTH_OFFSET, + TYPE_INFO_TYPE_SIMPLE_NAME_ID_OFFSET, + TYPE_INFO_TYPE_SIMPLE_NAME_PRT_OFFSET +) + +internal fun getPackageName(typeInfoPtr: Int) = getString( + typeInfoPtr, + TYPE_INFO_TYPE_PACKAGE_NAME_LENGTH_OFFSET, + TYPE_INFO_TYPE_PACKAGE_NAME_ID_OFFSET, + TYPE_INFO_TYPE_PACKAGE_NAME_PRT_OFFSET +) + +private fun getString(typeInfoPtr: Int, lengthOffset: Int, idOffset: Int, ptrOffset: Int): String { + val length = wasm_i32_load(typeInfoPtr + lengthOffset) + val id = wasm_i32_load(typeInfoPtr + idOffset) + val ptr = wasm_i32_load(typeInfoPtr + ptrOffset) + return stringLiteral(id, ptr, length) +} + internal fun getSuperTypeId(typeInfoPtr: Int): Int = wasm_i32_load(typeInfoPtr + TYPE_INFO_SUPER_TYPE_OFFSET)