diff --git a/libraries/stdlib/wasm/internal/kotlin/wasm/internal/TypeInfo.kt b/libraries/stdlib/wasm/internal/kotlin/wasm/internal/TypeInfo.kt index ff01f74195b..9a07d454a15 100644 --- a/libraries/stdlib/wasm/internal/kotlin/wasm/internal/TypeInfo.kt +++ b/libraries/stdlib/wasm/internal/kotlin/wasm/internal/TypeInfo.kt @@ -62,49 +62,3 @@ internal fun wasmInterfaceId(): Int = @ExcludedFromCodegen internal fun wasmGetTypeInfoData(): TypeInfoData = implementedAsIntrinsic - - -//REMOVE AFTER COMPILER BOOTSTRAP -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 fun getVtablePtr(obj: Any): Int = - obj.typeInfo + TYPE_INFO_VTABLE_OFFSET - -internal fun getVtableLength(obj: Any): Int = - wasm_i32_load(obj.typeInfo + TYPE_INFO_VTABLE_LENGTH_OFFSET) - -internal fun getItablePtr(obj: Any): Int = - wasm_i32_load(obj.typeInfo + TYPE_INFO_ITABLE_PTR_OFFSET) - -internal fun getInterfaceListLength(itablePtr: Int): Int = - wasm_i32_load(itablePtr + TYPE_INFO_VTABLE_LENGTH_OFFSET) - -internal fun getVirtualMethodId(obj: Any, virtualFunctionSlot: Int): Int { - val vtablePtr = getVtablePtr(obj) - val methodIdPtr = vtablePtr + virtualFunctionSlot * TYPE_INFO_ELEMENT_SIZE - return wasm_i32_load(methodIdPtr) -} - -// Returns -1 if obj does not implement interface -internal fun getInterfaceImplId(obj: Any, interfaceId: Int): Int { - val interfaceListSizePtr = getItablePtr(obj) - val interfaceListPtr = interfaceListSizePtr + TYPE_INFO_ELEMENT_SIZE - val interfaceListSize = wasm_i32_load(interfaceListSizePtr) - - var interfaceSlot = 0 - while (interfaceSlot < interfaceListSize) { - val supportedInterface = wasm_i32_load(interfaceListPtr + interfaceSlot * TYPE_INFO_ELEMENT_SIZE) - if (supportedInterface == interfaceId) { - return wasm_i32_load(interfaceListPtr + interfaceListSize * TYPE_INFO_ELEMENT_SIZE + interfaceSlot * TYPE_INFO_ELEMENT_SIZE) - } - interfaceSlot++ - } - - return -1 -} - -internal fun isInterface(obj: Any, interfaceId: Int): Boolean { - return getInterfaceImplId(obj, interfaceId) != -1 -} \ No newline at end of file