[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.types.*
|
||||||
import org.jetbrains.kotlin.ir.util.defaultType
|
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
|
// Return null if upper bound is Any
|
||||||
private val IrTypeParameter.erasedUpperBound: IrClass?
|
private val IrTypeParameter.erasedUpperBound: IrClass?
|
||||||
|
|||||||
+17
-10
@@ -5,21 +5,17 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.backend.wasm.ir2wasm
|
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.DescriptorVisibilities
|
||||||
import org.jetbrains.kotlin.descriptors.Modality
|
import org.jetbrains.kotlin.descriptors.Modality
|
||||||
import org.jetbrains.kotlin.ir.IrBuiltIns
|
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.backend.js.utils.realOverrideTarget
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrClass
|
import org.jetbrains.kotlin.ir.declarations.IrClass
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrDeclaration
|
import org.jetbrains.kotlin.ir.declarations.IrDeclaration
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrField
|
import org.jetbrains.kotlin.ir.declarations.IrField
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrSimpleFunction
|
import org.jetbrains.kotlin.ir.declarations.IrSimpleFunction
|
||||||
import org.jetbrains.kotlin.ir.types.IrType
|
import org.jetbrains.kotlin.ir.types.*
|
||||||
import org.jetbrains.kotlin.ir.types.classifierOrFail
|
import org.jetbrains.kotlin.ir.util.*
|
||||||
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.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
|
|
||||||
data class WasmSignature(
|
data class WasmSignature(
|
||||||
@@ -45,12 +41,23 @@ data class WasmSignature(
|
|||||||
fun IrSimpleFunction.wasmSignature(irBuiltIns: IrBuiltIns): WasmSignature =
|
fun IrSimpleFunction.wasmSignature(irBuiltIns: IrBuiltIns): WasmSignature =
|
||||||
WasmSignature(
|
WasmSignature(
|
||||||
name,
|
name,
|
||||||
extensionReceiverParameter?.type?.eraseGenerics(irBuiltIns),
|
extensionReceiverParameter?.type?.toWasmSignatureType(irBuiltIns),
|
||||||
valueParameters.map { it.type.eraseGenerics(irBuiltIns) },
|
valueParameters.map { it.type.toWasmSignatureType(irBuiltIns) },
|
||||||
returnType.eraseGenerics(irBuiltIns),
|
returnType.toWasmSignatureType(irBuiltIns),
|
||||||
isOverridableOrOverrides
|
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(
|
class VirtualMethodMetadata(
|
||||||
val function: IrSimpleFunction,
|
val function: IrSimpleFunction,
|
||||||
val signature: WasmSignature
|
val signature: WasmSignature
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ private fun IrType.withNullability(newNullability: Boolean): IrType =
|
|||||||
else -> this
|
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
|
val requiredNullability = if (newNullability) SimpleTypeNullability.MARKED_NULLABLE else SimpleTypeNullability.DEFINITELY_NOT_NULL
|
||||||
return if (nullability == requiredNullability)
|
return if (nullability == requiredNullability)
|
||||||
this
|
this
|
||||||
|
|||||||
Reference in New Issue
Block a user