[Wasm] Remove unused super class field in type info
This commit is contained in:
@@ -129,7 +129,6 @@ class WasmSymbols(
|
|||||||
val getVirtualMethodId = getInternalFunction("getVirtualMethodId")
|
val getVirtualMethodId = getInternalFunction("getVirtualMethodId")
|
||||||
val getInterfaceImplId = getInternalFunction("getInterfaceImplId")
|
val getInterfaceImplId = getInternalFunction("getInterfaceImplId")
|
||||||
|
|
||||||
val isSubClass = getInternalFunction("isSubClass")
|
|
||||||
val isInterface = getInternalFunction("isInterface")
|
val isInterface = getInternalFunction("isInterface")
|
||||||
|
|
||||||
val nullableEquals = getInternalFunction("nullableEquals")
|
val nullableEquals = getInternalFunction("nullableEquals")
|
||||||
|
|||||||
-9
@@ -275,14 +275,6 @@ class DeclarationGenerator(val context: WasmModuleCodegenContext) : IrElementVis
|
|||||||
|
|
||||||
private fun binaryDataStruct(classMetadata: ClassMetadata): ConstantDataStruct {
|
private fun binaryDataStruct(classMetadata: ClassMetadata): ConstantDataStruct {
|
||||||
val invalidIndex = -1
|
val invalidIndex = -1
|
||||||
val superClass = classMetadata.superClass?.klass
|
|
||||||
|
|
||||||
val superClassSymbol: WasmSymbol<Int> =
|
|
||||||
superClass?.let { context.referenceClassId(it.symbol) } ?: WasmSymbol(invalidIndex)
|
|
||||||
|
|
||||||
val superTypeField =
|
|
||||||
ConstantDataIntField("Super class", superClassSymbol)
|
|
||||||
|
|
||||||
val vtableSizeField = ConstantDataIntField(
|
val vtableSizeField = ConstantDataIntField(
|
||||||
"V-table length",
|
"V-table length",
|
||||||
classMetadata.virtualMethods.size
|
classMetadata.virtualMethods.size
|
||||||
@@ -307,7 +299,6 @@ class DeclarationGenerator(val context: WasmModuleCodegenContext) : IrElementVis
|
|||||||
return ConstantDataStruct(
|
return ConstantDataStruct(
|
||||||
"Class TypeInfo: ${classMetadata.klass.fqNameWhenAvailable} ",
|
"Class TypeInfo: ${classMetadata.klass.fqNameWhenAvailable} ",
|
||||||
listOf(
|
listOf(
|
||||||
superTypeField,
|
|
||||||
interfaceTablePtr,
|
interfaceTablePtr,
|
||||||
vtableSizeField,
|
vtableSizeField,
|
||||||
vtableArray,
|
vtableArray,
|
||||||
|
|||||||
@@ -10,8 +10,7 @@ package kotlin.wasm.internal
|
|||||||
internal const val TYPE_INFO_ELEMENT_SIZE = 4
|
internal const val TYPE_INFO_ELEMENT_SIZE = 4
|
||||||
|
|
||||||
|
|
||||||
internal const val SUPER_CLASS_ID_OFFSET = 0
|
internal const val TYPE_INFO_ITABLE_PTR_OFFSET = 0
|
||||||
internal const val TYPE_INFO_ITABLE_PTR_OFFSET = SUPER_CLASS_ID_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_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 const val TYPE_INFO_VTABLE_OFFSET = TYPE_INFO_VTABLE_LENGTH_OFFSET + TYPE_INFO_ELEMENT_SIZE
|
||||||
|
|
||||||
@@ -27,9 +26,6 @@ internal fun getItablePtr(obj: Any): Int =
|
|||||||
internal fun getInterfaceListLength(itablePtr: Int): Int =
|
internal fun getInterfaceListLength(itablePtr: Int): Int =
|
||||||
wasm_i32_load(itablePtr + TYPE_INFO_VTABLE_LENGTH_OFFSET)
|
wasm_i32_load(itablePtr + TYPE_INFO_VTABLE_LENGTH_OFFSET)
|
||||||
|
|
||||||
internal fun getSuperClassId(obj: Any): Int =
|
|
||||||
wasm_i32_load(obj.typeInfo + SUPER_CLASS_ID_OFFSET)
|
|
||||||
|
|
||||||
internal fun getVirtualMethodId(obj: Any, virtualFunctionSlot: Int): Int {
|
internal fun getVirtualMethodId(obj: Any, virtualFunctionSlot: Int): Int {
|
||||||
val vtablePtr = getVtablePtr(obj)
|
val vtablePtr = getVtablePtr(obj)
|
||||||
val methodIdPtr = vtablePtr + virtualFunctionSlot * TYPE_INFO_ELEMENT_SIZE
|
val methodIdPtr = vtablePtr + virtualFunctionSlot * TYPE_INFO_ELEMENT_SIZE
|
||||||
@@ -54,18 +50,6 @@ internal fun getInterfaceImplId(obj: Any, interfaceId: Int): Int {
|
|||||||
return -1
|
return -1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
internal fun isSubClassOfImpl(currentClassId: Int, otherClassId: Int): Boolean {
|
|
||||||
if (currentClassId == otherClassId) return true
|
|
||||||
val anyClassId = wasmClassId<Any>()
|
|
||||||
if (currentClassId == anyClassId && otherClassId != anyClassId) return false
|
|
||||||
return isSubClassOfImpl(wasm_i32_load(currentClassId + SUPER_CLASS_ID_OFFSET), otherClassId)
|
|
||||||
}
|
|
||||||
|
|
||||||
internal fun isSubClass(obj: Any, classId: Int): Boolean {
|
|
||||||
return isSubClassOfImpl(obj.typeInfo, classId)
|
|
||||||
}
|
|
||||||
|
|
||||||
internal fun isInterface(obj: Any, interfaceId: Int): Boolean {
|
internal fun isInterface(obj: Any, interfaceId: Int): Boolean {
|
||||||
return getInterfaceImplId(obj, interfaceId) != -1
|
return getInterfaceImplId(obj, interfaceId) != -1
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user