[Wasm] NFC refactor: eraseGenerics -> toWasmSignatureType

Use a more concrete name, make it private,
and split out:

 IrSimpleType.toWasmSignatureSimpleType

This does not change the behavior,
but helps to set the stage for the following bugfix
 (KT-58852)
This commit is contained in:
Svyatoslav Kuzmich
2023-12-12 13:35:59 +01:00
committed by Space Team
parent 5fcdd4a9f6
commit b5def88ff4
3 changed files with 18 additions and 18 deletions
@@ -13,13 +13,6 @@ import org.jetbrains.kotlin.ir.symbols.IrTypeParameterSymbol
import org.jetbrains.kotlin.ir.types.*
import org.jetbrains.kotlin.ir.util.defaultType
fun IrType.eraseGenerics(irBuiltIns: IrBuiltIns): IrType {
if (this is IrDynamicType) return this
if (this is IrErrorType) return this
val defaultType = this.erasedUpperBound?.defaultType ?: irBuiltIns.anyType
if (!this.isNullable()) return defaultType
return defaultType.makeNullable()
}
// Return null if upper bound is Any
private val IrTypeParameter.erasedUpperBound: IrClass?
@@ -5,21 +5,17 @@
package org.jetbrains.kotlin.backend.wasm.ir2wasm
import org.jetbrains.kotlin.ir.util.isOverridableOrOverrides
import org.jetbrains.kotlin.descriptors.DescriptorVisibilities
import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.ir.IrBuiltIns
import org.jetbrains.kotlin.ir.backend.js.utils.eraseGenerics
import org.jetbrains.kotlin.ir.backend.js.utils.erasedUpperBound
import org.jetbrains.kotlin.ir.backend.js.utils.realOverrideTarget
import org.jetbrains.kotlin.ir.declarations.IrClass
import org.jetbrains.kotlin.ir.declarations.IrDeclaration
import org.jetbrains.kotlin.ir.declarations.IrField
import org.jetbrains.kotlin.ir.declarations.IrSimpleFunction
import org.jetbrains.kotlin.ir.types.IrType
import org.jetbrains.kotlin.ir.types.classifierOrFail
import org.jetbrains.kotlin.ir.util.fqNameWhenAvailable
import org.jetbrains.kotlin.ir.util.isInterface
import org.jetbrains.kotlin.ir.util.render
import org.jetbrains.kotlin.ir.types.*
import org.jetbrains.kotlin.ir.util.*
import org.jetbrains.kotlin.name.Name
data class WasmSignature(
@@ -45,12 +41,23 @@ data class WasmSignature(
fun IrSimpleFunction.wasmSignature(irBuiltIns: IrBuiltIns): WasmSignature =
WasmSignature(
name,
extensionReceiverParameter?.type?.eraseGenerics(irBuiltIns),
valueParameters.map { it.type.eraseGenerics(irBuiltIns) },
returnType.eraseGenerics(irBuiltIns),
extensionReceiverParameter?.type?.toWasmSignatureType(irBuiltIns),
valueParameters.map { it.type.toWasmSignatureType(irBuiltIns) },
returnType.toWasmSignatureType(irBuiltIns),
isOverridableOrOverrides
)
private fun IrType.toWasmSignatureType(irBuiltIns: IrBuiltIns): IrType =
when (this) {
is IrSimpleType -> toWasmSignatureSimpleType(irBuiltIns)
else -> this
}
private fun IrSimpleType.toWasmSignatureSimpleType(irBuiltIns: IrBuiltIns): IrSimpleType {
val klass = (this.erasedUpperBound?.symbol ?: irBuiltIns.anyClass).owner
return klass.defaultType.withNullability(this.isNullable())
}
class VirtualMethodMetadata(
val function: IrSimpleFunction,
val signature: WasmSignature
@@ -31,7 +31,7 @@ private fun IrType.withNullability(newNullability: Boolean): IrType =
else -> this
}
private fun IrSimpleType.withNullability(newNullability: Boolean): IrSimpleType {
fun IrSimpleType.withNullability(newNullability: Boolean): IrSimpleType {
val requiredNullability = if (newNullability) SimpleTypeNullability.MARKED_NULLABLE else SimpleTypeNullability.DEFINITELY_NOT_NULL
return if (nullability == requiredNullability)
this