[Wasm] Introduce utilities to get package and name of class directly from metadata and use it in some places
This commit is contained in:
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
// TARGET_BACKEND: WASM
|
// 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
|
// WASM_DCE_EXPECTED_OUTPUT_SIZE: mjs 6_517
|
||||||
|
|
||||||
// FILE: test.kt
|
// FILE: test.kt
|
||||||
|
|||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
// TARGET_BACKEND: WASM
|
// 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
|
// WASM_DCE_EXPECTED_OUTPUT_SIZE: mjs 6_458
|
||||||
|
|
||||||
fun box(): String {
|
fun box(): String {
|
||||||
|
|||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
// TARGET_BACKEND: WASM
|
// 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
|
// WASM_DCE_EXPECTED_OUTPUT_SIZE: mjs 6_956
|
||||||
|
|
||||||
// FILE: test.kt
|
// FILE: test.kt
|
||||||
|
|||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
// TARGET_BACKEND: WASM
|
// 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
|
// WASM_DCE_EXPECTED_OUTPUT_SIZE: mjs 6_389
|
||||||
|
|
||||||
fun box() = "OK"
|
fun box() = "OK"
|
||||||
@@ -57,8 +57,10 @@ public open class Any @WasmPrimitiveConstructor constructor() {
|
|||||||
* Returns a string representation of the object.
|
* Returns a string representation of the object.
|
||||||
*/
|
*/
|
||||||
public open fun toString(): String {
|
public open fun toString(): String {
|
||||||
val typeData = getTypeInfoTypeDataByPtr(typeInfo)
|
val typeInfoPtr = this.typeInfo
|
||||||
val qualifiedName = if (typeData.packageName.isEmpty()) typeData.typeName else "${typeData.packageName}.${typeData.typeName}"
|
val packageName = getPackageName(typeInfoPtr)
|
||||||
|
val simpleName = getSimpleName(typeInfoPtr)
|
||||||
|
val qualifiedName = if (packageName.isEmpty()) simpleName else "$packageName.$simpleName"
|
||||||
return "$qualifiedName@${identityHashCode()}"
|
return "$qualifiedName@${identityHashCode()}"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,6 +6,7 @@
|
|||||||
package kotlin
|
package kotlin
|
||||||
|
|
||||||
import kotlin.wasm.internal.ExternalInterfaceType
|
import kotlin.wasm.internal.ExternalInterfaceType
|
||||||
|
import kotlin.wasm.internal.getSimpleName
|
||||||
import kotlin.wasm.internal.jsToKotlinStringAdapter
|
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.
|
* followed by the exception message if it is not null.
|
||||||
*/
|
*/
|
||||||
public override fun toString(): String {
|
public override fun toString(): String {
|
||||||
val kClass = this::class
|
val s = getSimpleName(this.typeInfo)
|
||||||
val s = kClass.simpleName ?: "Throwable"
|
|
||||||
return if (message != null) s + ": " + message.toString() else s
|
return if (message != null) s + ": " + message.toString() else s
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ private fun throwJsError(message: String?, wasmTypeName: String?, stack: String)
|
|||||||
}
|
}
|
||||||
|
|
||||||
internal fun throwAsJsException(t: Throwable): Nothing {
|
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
|
internal var isNotFirstWasmExportCall: Boolean = false
|
||||||
@@ -25,17 +25,32 @@ internal val TypeInfoData.isInterfaceType
|
|||||||
get() = typeId < 0
|
get() = typeId < 0
|
||||||
|
|
||||||
internal fun getTypeInfoTypeDataByPtr(typeInfoPtr: Int): TypeInfoData {
|
internal fun getTypeInfoTypeDataByPtr(typeInfoPtr: Int): TypeInfoData {
|
||||||
val fqNameLength = wasm_i32_load(typeInfoPtr + TYPE_INFO_TYPE_PACKAGE_NAME_LENGTH_OFFSET)
|
val packageName = getPackageName(typeInfoPtr)
|
||||||
val fqNameId = wasm_i32_load(typeInfoPtr + TYPE_INFO_TYPE_PACKAGE_NAME_ID_OFFSET)
|
val simpleName = getSimpleName(typeInfoPtr)
|
||||||
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)
|
|
||||||
return TypeInfoData(typeInfoPtr, packageName, simpleName)
|
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 =
|
internal fun getSuperTypeId(typeInfoPtr: Int): Int =
|
||||||
wasm_i32_load(typeInfoPtr + TYPE_INFO_SUPER_TYPE_OFFSET)
|
wasm_i32_load(typeInfoPtr + TYPE_INFO_SUPER_TYPE_OFFSET)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user