[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:
committed by
Space Team
parent
5fcdd4a9f6
commit
b5def88ff4
@@ -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?
|
||||
|
||||
+17
-10
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user