From 66dbd9185179f04296e0e6318c7fac265d26be56 Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Thu, 12 Aug 2021 12:34:30 +0200 Subject: [PATCH] IR: minor, remove unused 'isInlined' --- .../jetbrains/kotlin/ir/util/InlineClasses.kt | 53 ------------------- .../kotlin/backend/konan/InlineClasses.kt | 8 --- 2 files changed, 61 deletions(-) diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/InlineClasses.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/InlineClasses.kt index abcaa7b5d14..ecfc42a142d 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/InlineClasses.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/InlineClasses.kt @@ -9,60 +9,7 @@ import org.jetbrains.kotlin.ir.declarations.IrClass import org.jetbrains.kotlin.ir.declarations.IrConstructor import org.jetbrains.kotlin.ir.declarations.IrField import org.jetbrains.kotlin.ir.declarations.IrProperty -import org.jetbrains.kotlin.ir.symbols.IrClassSymbol -import org.jetbrains.kotlin.ir.symbols.IrScriptSymbol -import org.jetbrains.kotlin.ir.symbols.IrTypeParameterSymbol -import org.jetbrains.kotlin.ir.types.IrSimpleType import org.jetbrains.kotlin.ir.types.IrType -import org.jetbrains.kotlin.ir.types.classifierOrFail -import org.jetbrains.kotlin.ir.types.isMarkedNullable - -/** - * Returns inline class for given class or null of type is not inlined - * TODO: Make this configurable for different backends (currently implements logic of JS BE) - */ -private fun IrType.getInlinedClass(): IrClass? { - if (this is IrSimpleType) { - val erased = erase(this) ?: return null - if (erased.isInline) { - if (this.isMarkedNullable()) { - var fieldType: IrType - var fieldInlinedClass = erased - while (true) { - fieldType = getInlineClassUnderlyingType(fieldInlinedClass) - if (fieldType.isMarkedNullable()) { - return null - } - - fieldInlinedClass = fieldType.getInlinedClass() ?: break - } - } - - return erased - } - } - return null -} - -/** - * Do not use this function in the JVM backend! Use `isInlineClassType` instead. - * - * This function has slightly different semantics for generic type parameters with inline class bounds. - * - * TODO: examine remaining usages in Native and preferably remove this function. - */ -fun IrType.isInlined(): Boolean = this.getInlinedClass() != null - -private tailrec fun erase(type: IrType): IrClass? { - val classifier = type.classifierOrFail - - return when (classifier) { - is IrClassSymbol -> classifier.owner - is IrScriptSymbol -> null // TODO: check if correct - is IrTypeParameterSymbol -> erase(classifier.owner.superTypes.first()) - else -> error(classifier) - } -} fun getInlineClassUnderlyingType(irClass: IrClass): IrType { for (declaration in irClass.declarations) { diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/InlineClasses.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/InlineClasses.kt index e2f3070e554..b2a2e8c1564 100644 --- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/InlineClasses.kt +++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/InlineClasses.kt @@ -33,16 +33,8 @@ import org.jetbrains.kotlin.types.KotlinType import org.jetbrains.kotlin.types.isNullable import org.jetbrains.kotlin.types.typeUtil.makeNullable -/** - * TODO: there is [IrType::getInlinedClass] in [org.jetbrains.kotlin.ir.util] which isn't compatible with - * Native's implementation. Please take a look while commonization. - */ fun IrType.getInlinedClassNative(): IrClass? = IrTypeInlineClassesSupport.getInlinedClass(this) -/** - * TODO: there is [IrType::isInlined] in [org.jetbrains.kotlin.ir.util] which isn't compatible with - * Native's implementation. Please take a look while commonization. - */ fun IrType.isInlinedNative(): Boolean = IrTypeInlineClassesSupport.isInlined(this) fun IrClass.isInlined(): Boolean = IrTypeInlineClassesSupport.isInlined(this) fun IrClass.isNativePrimitiveType() = IrTypeInlineClassesSupport.isTopLevelClass(this) &&