From 20165dd699d7e86402da51f31d093edeb0a3e95b Mon Sep 17 00:00:00 2001 From: Ivan Kylchik Date: Wed, 16 Aug 2023 10:50:29 +0200 Subject: [PATCH] [Native] Drop `defaultOrNullableType` from `IrUtils2` We can simplify most usages of `defaultOrNullableType` --- .../src/org/jetbrains/kotlin/backend/konan/Boxing.kt | 11 ++++++----- .../backend/konan/lower/BuiltinOperatorLowering.kt | 4 ++-- .../src/org/jetbrains/kotlin/ir/util/IrUtils2.kt | 3 --- 3 files changed, 8 insertions(+), 10 deletions(-) diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/Boxing.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/Boxing.kt index 241c19c1e7d..75578ff1850 100644 --- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/Boxing.kt +++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/Boxing.kt @@ -21,7 +21,7 @@ import org.jetbrains.kotlin.ir.expressions.IrConstKind import org.jetbrains.kotlin.ir.expressions.IrConstantPrimitive import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol import org.jetbrains.kotlin.ir.types.IrType -import org.jetbrains.kotlin.ir.util.defaultOrNullableType +import org.jetbrains.kotlin.ir.types.makeNullable import org.jetbrains.kotlin.ir.util.defaultType import org.jetbrains.kotlin.ir.util.fqNameForIrSerialization import org.jetbrains.kotlin.konan.target.KonanTarget @@ -47,6 +47,9 @@ private fun Context.getTypeConversionImpl( internal object DECLARATION_ORIGIN_INLINE_CLASS_SPECIAL_FUNCTION : IrDeclarationOriginImpl("INLINE_CLASS_SPECIAL_FUNCTION") +private fun IrClass.defaultOrNullableType(hasQuestionMark: Boolean) = + if (hasQuestionMark) this.defaultType.makeNullable() else this.defaultType + internal fun Context.getBoxFunction(inlinedClass: IrClass): IrSimpleFunction = mapping.boxFunctions.getOrPut(inlinedClass) { require(inlinedClass.isUsedAsBoxClass()) val classes = mutableListOf(inlinedClass) @@ -59,7 +62,7 @@ internal fun Context.getBoxFunction(inlinedClass: IrClass): IrSimpleFunction = m val isNullable = inlinedClass.inlinedClassIsNullable() val unboxedType = inlinedClass.defaultOrNullableType(isNullable) - val boxedType = ir.symbols.any.owner.defaultOrNullableType(isNullable) + val boxedType = if (isNullable) ir.symbols.irBuiltIns.anyNType else ir.symbols.irBuiltIns.anyType irFactory.buildFun { startOffset = inlinedClass.startOffset @@ -90,11 +93,9 @@ internal fun Context.getUnboxFunction(inlinedClass: IrClass): IrSimpleFunction = } require(parent is IrFile || parent is IrExternalPackageFragment) { "Local inline classes are not supported" } - val symbols = ir.symbols - val isNullable = inlinedClass.inlinedClassIsNullable() val unboxedType = inlinedClass.defaultOrNullableType(isNullable) - val boxedType = symbols.any.owner.defaultOrNullableType(isNullable) + val boxedType = if (isNullable) ir.symbols.irBuiltIns.anyNType else ir.symbols.irBuiltIns.anyType irFactory.buildFun { startOffset = inlinedClass.startOffset diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/BuiltinOperatorLowering.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/BuiltinOperatorLowering.kt index eaad3b8e72d..fbf116e2ab2 100644 --- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/BuiltinOperatorLowering.kt +++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/BuiltinOperatorLowering.kt @@ -152,9 +152,9 @@ internal class BuiltinOperatorLowering(val context: Context) : FileLoweringPass, is BinaryType.Reference -> { // TODO: don't use binaryType.nullable. - val lhsRawType = irBuiltins.anyClass.owner.defaultOrNullableType(lhsBinaryType.nullable) + val lhsRawType = if (lhsBinaryType.nullable) irBuiltins.anyNType else irBuiltins.anyType val rhsBinaryType = rhs.type.computeBinaryType() as BinaryType.Reference<*> - val rhsRawType = irBuiltins.anyClass.owner.defaultOrNullableType(rhsBinaryType.nullable) + val rhsRawType = if (rhsBinaryType.nullable) irBuiltins.anyNType else irBuiltins.anyType genFloatingOrReferenceEquals( symbol, diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/ir/util/IrUtils2.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/ir/util/IrUtils2.kt index 5094396e6cb..2550ab4f4b5 100644 --- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/ir/util/IrUtils2.kt +++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/ir/util/IrUtils2.kt @@ -110,9 +110,6 @@ fun IrBuilderWithScope.irCatch() = ) ) -fun IrClass.defaultOrNullableType(hasQuestionMark: Boolean) = - if (hasQuestionMark) this.defaultType.makeNullable() else this.defaultType - @OptIn(ObsoleteDescriptorBasedAPI::class) fun IrFunction.isRestrictedSuspendFunction(): Boolean = this.descriptor.extensionReceiverParameter?.type?.isRestrictsSuspensionReceiver() == true