[IR] Drastically simplify the hierarchy of IR origins

IrStatementOriginImpl and IrDeclarationOriginImpl were made final
classes to simplify the creation of them (a delegate provider was
added) and to optimize performance when comparing the origins by type
and name
This commit is contained in:
Iaroslav Postovalov
2023-08-22 11:50:33 +02:00
committed by Space Team
parent f2ddae533e
commit a3b55cf758
67 changed files with 438 additions and 380 deletions
@@ -44,7 +44,7 @@ private fun Context.getTypeConversionImpl(
}.symbol
}
internal object DECLARATION_ORIGIN_INLINE_CLASS_SPECIAL_FUNCTION : IrDeclarationOriginImpl("INLINE_CLASS_SPECIAL_FUNCTION")
internal val 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
@@ -32,7 +32,7 @@ import org.jetbrains.kotlin.resolve.scopes.DescriptorKindFilter
import org.jetbrains.kotlin.types.KotlinType
import org.jetbrains.kotlin.util.OperatorNameConventions
internal object DECLARATION_ORIGIN_FUNCTION_CLASS : IrDeclarationOriginImpl("DECLARATION_ORIGIN_FUNCTION_CLASS")
internal val DECLARATION_ORIGIN_FUNCTION_CLASS by IrDeclarationOriginImpl
@OptIn(ObsoleteDescriptorBasedAPI::class)
val IrPackageFragment.isFunctionInterfaceFile get() = packageFragmentDescriptor is FunctionInterfacePackageFragment
@@ -22,7 +22,7 @@ import org.jetbrains.kotlin.ir.types.typeWith
import org.jetbrains.kotlin.ir.util.SYNTHETIC_OFFSET
import org.jetbrains.kotlin.name.Name
internal object DECLARATION_ORIGIN_ENTRY_POINT : IrDeclarationOriginImpl("ENTRY_POINT")
internal val DECLARATION_ORIGIN_ENTRY_POINT = IrDeclarationOriginImpl("ENTRY_POINT")
internal fun makeEntryPoint(generationState: NativeGenerationState): IrFunction {
val context = generationState.context
@@ -1100,7 +1100,9 @@ private class ObjCBlockPointerValuePassing(
)
}
private object OBJC_BLOCK_FUNCTION_IMPL : IrDeclarationOriginImpl("OBJC_BLOCK_FUNCTION_IMPL")
private companion object {
private val OBJC_BLOCK_FUNCTION_IMPL by IrDeclarationOriginImpl
}
private fun IrBuilderWithScope.createKotlinFunctionObject(blockPointer: IrExpression): IrExpression {
val constructor = generateKotlinFunctionClass()
@@ -151,7 +151,7 @@ internal class KotlinCBridgeBuilder(
isKotlinToC: Boolean,
foreignExceptionMode: ForeignExceptionMode.Mode = ForeignExceptionMode.default
) {
private val origin: CBridgeOrigin = if (isKotlinToC) CBridgeOrigin.KOTLIN_TO_C_BRIDGE else CBridgeOrigin.C_TO_KOTLIN_BRIDGE
private val origin = if (isKotlinToC) CBridgeOrigin.KOTLIN_TO_C_BRIDGE else CBridgeOrigin.C_TO_KOTLIN_BRIDGE
private val kotlinBridgeBuilder = KotlinBridgeBuilder(startOffset, endOffset, cName, stubs, isExternal = isKotlinToC, foreignExceptionMode, origin)
private val cBridgeBuilder = CFunctionBuilder()
@@ -261,7 +261,7 @@ internal class CCallBuilder {
}
}
sealed class CBridgeOrigin(name: String): IrDeclarationOriginImpl(name, isSynthetic = true) {
object KOTLIN_TO_C_BRIDGE: CBridgeOrigin("KOTLIN_TO_C_BRIDGE")
object C_TO_KOTLIN_BRIDGE: CBridgeOrigin("C_TO_KOTLIN_BRIDGE")
object CBridgeOrigin {
val KOTLIN_TO_C_BRIDGE by IrDeclarationOriginImpl.Synthetic
val C_TO_KOTLIN_BRIDGE by IrDeclarationOriginImpl.Synthetic
}
@@ -28,7 +28,7 @@ import org.jetbrains.kotlin.name.Name
/**
* Allows to distinguish external declarations to internal ABI.
*/
internal object INTERNAL_ABI_ORIGIN : IrDeclarationOriginImpl("INTERNAL_ABI")
internal val INTERNAL_ABI_ORIGIN = IrDeclarationOriginImpl("INTERNAL_ABI")
/**
* Sometimes we need to reference symbols that are not declared in metadata.
@@ -288,5 +288,7 @@ internal class PropertyDelegationLowering(val generationState: NativeGenerationS
return type.classifier == expectedClass
}
private object DECLARATION_ORIGIN_KPROPERTIES_FOR_DELEGATION : IrDeclarationOriginImpl("KPROPERTIES_FOR_DELEGATION")
private companion object {
private val DECLARATION_ORIGIN_KPROPERTIES_FOR_DELEGATION = IrDeclarationOriginImpl("KPROPERTIES_FOR_DELEGATION")
}
}
@@ -29,7 +29,7 @@ import org.jetbrains.kotlin.ir.builders.declarations.buildField
import org.jetbrains.kotlin.ir.builders.declarations.buildFun
import org.jetbrains.kotlin.ir.declarations.*
import org.jetbrains.kotlin.ir.expressions.*
import org.jetbrains.kotlin.ir.expressions.IrStatementOrigin.ARGUMENTS_REORDERING_FOR_CALL
import org.jetbrains.kotlin.ir.expressions.IrStatementOrigin.Companion.ARGUMENTS_REORDERING_FOR_CALL
import org.jetbrains.kotlin.ir.symbols.IrClassSymbol
import org.jetbrains.kotlin.ir.types.classifierOrNull
import org.jetbrains.kotlin.ir.types.typeWith
@@ -85,7 +85,7 @@ internal class EnumsSupport(
}
}
internal object DECLARATION_ORIGIN_ENUM : IrDeclarationOriginImpl("ENUM")
internal val DECLARATION_ORIGIN_ENUM = IrDeclarationOriginImpl("ENUM")
internal class NativeEnumWhenLowering constructor(context: Context) : EnumWhenLowering(context) {
override fun mapConstEnumEntry(entry: IrEnumEntry): Int {
@@ -61,9 +61,9 @@ import org.jetbrains.kotlin.name.Name
* ```
*/
internal class FunctionReferenceLowering(val generationState: NativeGenerationState) : FileLoweringPass {
private object DECLARATION_ORIGIN_FUNCTION_REFERENCE_IMPL : IrDeclarationOriginImpl("FUNCTION_REFERENCE_IMPL")
companion object {
private val DECLARATION_ORIGIN_FUNCTION_REFERENCE_IMPL = IrDeclarationOriginImpl("FUNCTION_REFERENCE_IMPL")
fun isLoweredFunctionReference(declaration: IrDeclaration): Boolean =
declaration.origin == DECLARATION_ORIGIN_FUNCTION_REFERENCE_IMPL
}
@@ -26,10 +26,10 @@ import org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid
import org.jetbrains.kotlin.ir.visitors.transformChildrenVoid
internal class InitializersLowering(val context: CommonBackendContext) : ClassLoweringPass {
object STATEMENT_ORIGIN_ANONYMOUS_INITIALIZER : IrStatementOriginImpl("ANONYMOUS_INITIALIZER")
object DECLARATION_ORIGIN_ANONYMOUS_INITIALIZER : IrDeclarationOriginImpl("ANONYMOUS_INITIALIZER")
companion object {
val STATEMENT_ORIGIN_ANONYMOUS_INITIALIZER = IrStatementOriginImpl("ANONYMOUS_INITIALIZER")
val DECLARATION_ORIGIN_ANONYMOUS_INITIALIZER = IrDeclarationOriginImpl("ANONYMOUS_INITIALIZER")
}
override fun lower(irClass: IrClass) {
if (irClass.isInterface) return
@@ -312,8 +312,9 @@ private class InteropLoweringPart1(val generationState: NativeGenerationState) :
}
}
private object OVERRIDING_INITIALIZER_BY_CONSTRUCTOR :
IrDeclarationOriginImpl("OVERRIDING_INITIALIZER_BY_CONSTRUCTOR")
private companion object {
private val OVERRIDING_INITIALIZER_BY_CONSTRUCTOR by IrDeclarationOriginImpl
}
private fun IrConstructor.overridesConstructor(other: IrConstructor): Boolean {
return this.descriptor.valueParameters.size == other.descriptor.valueParameters.size &&
@@ -171,7 +171,8 @@ internal class ObjectClassLowering(val generationState: NativeGenerationState) :
}
// This is a hack to avoid early freezing. Should be removed when freezing is removed
object IrStatementOriginFieldPreInit : IrStatementOriginImpl("FIELD_PRE_INIT")
companion object {
// This is a hack to avoid early freezing. Should be removed when freezing is removed
val IrStatementOriginFieldPreInit = IrStatementOriginImpl("FIELD_PRE_INIT")
}
}
@@ -25,9 +25,9 @@ import org.jetbrains.kotlin.ir.visitors.acceptChildrenVoid
import org.jetbrains.kotlin.ir.visitors.acceptVoid
import org.jetbrains.kotlin.name.Name
internal object DECLARATION_ORIGIN_STATIC_GLOBAL_INITIALIZER : IrDeclarationOriginImpl("STATIC_GLOBAL_INITIALIZER")
internal object DECLARATION_ORIGIN_STATIC_THREAD_LOCAL_INITIALIZER : IrDeclarationOriginImpl("STATIC_THREAD_LOCAL_INITIALIZER")
internal object DECLARATION_ORIGIN_STATIC_STANDALONE_THREAD_LOCAL_INITIALIZER : IrDeclarationOriginImpl("STATIC_STANDALONE_THREAD_LOCAL_INITIALIZER")
internal val DECLARATION_ORIGIN_STATIC_GLOBAL_INITIALIZER = IrDeclarationOriginImpl("STATIC_GLOBAL_INITIALIZER")
internal val DECLARATION_ORIGIN_STATIC_THREAD_LOCAL_INITIALIZER = IrDeclarationOriginImpl("STATIC_THREAD_LOCAL_INITIALIZER")
internal val DECLARATION_ORIGIN_STATIC_STANDALONE_THREAD_LOCAL_INITIALIZER = IrDeclarationOriginImpl("STATIC_STANDALONE_THREAD_LOCAL_INITIALIZER")
internal val IrFunction.isStaticInitializer: Boolean
get() = origin == DECLARATION_ORIGIN_STATIC_GLOBAL_INITIALIZER
@@ -45,11 +45,10 @@ import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.resolve.descriptorUtil.module
internal class TestProcessor (val context: Context) {
object TEST_SUITE_CLASS: IrDeclarationOriginImpl("TEST_SUITE_CLASS")
object TEST_SUITE_GENERATED_MEMBER: IrDeclarationOriginImpl("TEST_SUITE_GENERATED_MEMBER")
companion object {
val TEST_SUITE_CLASS by IrDeclarationOriginImpl
val TEST_SUITE_GENERATED_MEMBER by IrDeclarationOriginImpl
val COMPANION_GETTER_NAME = Name.identifier("getCompanion")
val INSTANCE_GETTER_NAME = Name.identifier("createInstance")
@@ -31,7 +31,7 @@ import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.util.capitalizeDecapitalize.*
import org.jetbrains.kotlin.ir.util.*
object IR_DECLARATION_ORIGIN_VOLATILE : IrDeclarationOriginImpl("VOLATILE")
val IR_DECLARATION_ORIGIN_VOLATILE = IrDeclarationOriginImpl("VOLATILE")
internal class VolatileFieldsLowering(val context: Context) : FileLoweringPass {
private val symbols = context.ir.symbols
@@ -33,8 +33,8 @@ internal class ExternalModulesDFG(val allTypes: List<DataFlowIR.Type.Declared>,
val publicFunctions: Map<Long, DataFlowIR.FunctionSymbol.Public>,
val functionDFGs: Map<DataFlowIR.FunctionSymbol, DataFlowIR.Function>)
internal object STATEMENT_ORIGIN_PRODUCER_INVOCATION : IrStatementOriginImpl("PRODUCER_INVOCATION")
internal object STATEMENT_ORIGIN_JOB_INVOCATION : IrStatementOriginImpl("JOB_INVOCATION")
internal val STATEMENT_ORIGIN_PRODUCER_INVOCATION = IrStatementOriginImpl("PRODUCER_INVOCATION")
internal val STATEMENT_ORIGIN_JOB_INVOCATION = IrStatementOriginImpl("JOB_INVOCATION")
private fun IrTypeOperator.isCast() =
this == IrTypeOperator.CAST || this == IrTypeOperator.IMPLICIT_CAST || this == IrTypeOperator.SAFE_CAST
@@ -36,7 +36,7 @@ internal class KonanForwardDeclarationModuleDeserializer(
}
companion object {
private val FORWARD_DECLARATION_ORIGIN = object : IrDeclarationOriginImpl("FORWARD_DECLARATION_ORIGIN") {}
private val FORWARD_DECLARATION_ORIGIN by IrDeclarationOriginImpl
}
private val declaredDeclaration = mutableMapOf<IdSignature, IrClass>()