[WASM] Implementation of Class references
This commit is contained in:
committed by
TeamCityServer
parent
d9f2bd7963
commit
ce360bb10b
@@ -9,11 +9,30 @@ package kotlin.wasm.internal
|
||||
|
||||
internal const val TYPE_INFO_ELEMENT_SIZE = 4
|
||||
|
||||
|
||||
internal const val TYPE_INFO_ITABLE_PTR_OFFSET = 0
|
||||
internal const val TYPE_INFO_TYPE_PACKAGE_NAME_LENGTH_OFFSET = 0
|
||||
internal const val TYPE_INFO_TYPE_PACKAGE_NAME_PRT_OFFSET = TYPE_INFO_TYPE_PACKAGE_NAME_LENGTH_OFFSET + TYPE_INFO_ELEMENT_SIZE
|
||||
internal const val TYPE_INFO_TYPE_SIMPLE_NAME_LENGTH_OFFSET = TYPE_INFO_TYPE_PACKAGE_NAME_PRT_OFFSET + TYPE_INFO_ELEMENT_SIZE
|
||||
internal const val TYPE_INFO_TYPE_SIMPLE_NAME_PRT_OFFSET = TYPE_INFO_TYPE_SIMPLE_NAME_LENGTH_OFFSET + TYPE_INFO_ELEMENT_SIZE
|
||||
internal const val TYPE_INFO_SUPER_TYPE_OFFSET = TYPE_INFO_TYPE_SIMPLE_NAME_PRT_OFFSET + TYPE_INFO_ELEMENT_SIZE
|
||||
internal const val TYPE_INFO_ITABLE_PTR_OFFSET = TYPE_INFO_SUPER_TYPE_OFFSET + TYPE_INFO_ELEMENT_SIZE
|
||||
internal const val TYPE_INFO_VTABLE_LENGTH_OFFSET = TYPE_INFO_ITABLE_PTR_OFFSET + TYPE_INFO_ELEMENT_SIZE
|
||||
internal const val TYPE_INFO_VTABLE_OFFSET = TYPE_INFO_VTABLE_LENGTH_OFFSET + TYPE_INFO_ELEMENT_SIZE
|
||||
|
||||
internal class TypeInfoData(val typeId: Int, val packageName: String, val typeName: String)
|
||||
|
||||
internal fun getTypeInfoTypeDataByPtr(typeInfoPtr: Int): TypeInfoData {
|
||||
val fqNameLength = wasm_i32_load(typeInfoPtr + TYPE_INFO_TYPE_PACKAGE_NAME_LENGTH_OFFSET)
|
||||
val fqNameLengthPtr = 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 simpleNamePtr = wasm_i32_load(typeInfoPtr + TYPE_INFO_TYPE_SIMPLE_NAME_PRT_OFFSET)
|
||||
val packageName = stringLiteral(fqNameLengthPtr, fqNameLength)
|
||||
val simpleName = stringLiteral(simpleNamePtr, simpleNameLength)
|
||||
return TypeInfoData(typeInfoPtr, packageName, simpleName)
|
||||
}
|
||||
|
||||
internal fun getSuperTypeId(typeInfoPtr: Int): Int =
|
||||
wasm_i32_load(typeInfoPtr + TYPE_INFO_SUPER_TYPE_OFFSET)
|
||||
|
||||
internal fun getVtablePtr(obj: Any): Int =
|
||||
obj.typeInfo + TYPE_INFO_VTABLE_OFFSET
|
||||
|
||||
@@ -60,4 +79,12 @@ internal fun <T> wasmClassId(): Int =
|
||||
|
||||
@ExcludedFromCodegen
|
||||
internal fun <T> wasmInterfaceId(): Int =
|
||||
implementedAsIntrinsic
|
||||
|
||||
@ExcludedFromCodegen
|
||||
internal fun <T> wasmGetTypeInfoData(): TypeInfoData =
|
||||
implementedAsIntrinsic
|
||||
|
||||
@ExcludedFromCodegen
|
||||
internal fun <T> wasmTypeId(): Int =
|
||||
implementedAsIntrinsic
|
||||
Reference in New Issue
Block a user