[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
@@ -22,9 +22,10 @@ import org.jetbrains.kotlin.ir.visitors.*
import org.jetbrains.kotlin.name.Name
abstract class AbstractSuspendFunctionsLowering<C : CommonBackendContext>(val context: C) : FileLoweringPass {
protected object STATEMENT_ORIGIN_COROUTINE_IMPL : IrStatementOriginImpl("COROUTINE_IMPL")
protected object DECLARATION_ORIGIN_COROUTINE_IMPL : IrDeclarationOriginImpl("COROUTINE_IMPL")
protected companion object {
val STATEMENT_ORIGIN_COROUTINE_IMPL = IrStatementOriginImpl("COROUTINE_IMPL")
val DECLARATION_ORIGIN_COROUTINE_IMPL = IrDeclarationOriginImpl("COROUTINE_IMPL")
}
protected abstract val stateMachineMethodName: Name
protected abstract fun getCoroutineBaseClass(function: IrFunction): IrClassSymbol
@@ -28,7 +28,7 @@ import org.jetbrains.kotlin.ir.visitors.transformChildrenVoid
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.utils.filterIsInstanceAnd
val ANNOTATION_IMPLEMENTATION = object : IrDeclarationOriginImpl("ANNOTATION_IMPLEMENTATION", isSynthetic = true) {}
val ANNOTATION_IMPLEMENTATION by IrDeclarationOriginImpl.Synthetic
class AnnotationImplementationLowering(
val transformer: (IrFile) -> AnnotationImplementationTransformer
@@ -103,7 +103,7 @@ private class ArrayConstructorTransformer(
}
private object ArrayConstructorWrapper : IrDeclarationOriginImpl("arrayConstructorWrapper")
private val ArrayConstructorWrapper = IrDeclarationOriginImpl("arrayConstructorWrapper")
class ArrayConstructorReferenceLowering(val context: CommonBackendContext) : BodyLoweringPass {
override fun lower(irBody: IrBody, container: IrDeclaration) {
@@ -27,7 +27,7 @@ import org.jetbrains.kotlin.ir.util.setDeclarationsParent
import org.jetbrains.kotlin.ir.visitors.transformChildrenVoid
import org.jetbrains.kotlin.name.Name
object FINALLY_EXPRESSION : IrStatementOriginImpl("FINALLY_EXPRESSION")
val FINALLY_EXPRESSION by IrStatementOriginImpl
class FinallyBlocksLowering(val context: CommonBackendContext, private val throwableType: IrType): FileLoweringPass, IrElementTransformerVoidWithContext() {
@@ -59,9 +59,9 @@ val IrDeclaration.parentsWithSelf: Sequence<IrDeclarationParent>
val IrDeclaration.parents: Sequence<IrDeclarationParent>
get() = generateSequence(parent) { (it as? IrDeclaration)?.parent }
object BOUND_VALUE_PARAMETER : IrDeclarationOriginImpl("BOUND_VALUE_PARAMETER")
val BOUND_VALUE_PARAMETER by IrDeclarationOriginImpl
object BOUND_RECEIVER_PARAMETER : IrDeclarationOriginImpl("BOUND_RECEIVER_PARAMETER")
val BOUND_RECEIVER_PARAMETER by IrDeclarationOriginImpl
/*
Local functions raised in LocalDeclarationLowering continue to refer to
@@ -86,11 +86,13 @@ class LocalDeclarationsLowering(
runOnFilePostfix(irFile)
}
object DECLARATION_ORIGIN_FIELD_FOR_CAPTURED_VALUE :
IrDeclarationOriginImpl("FIELD_FOR_CAPTURED_VALUE", isSynthetic = true)
companion object {
val DECLARATION_ORIGIN_FIELD_FOR_CAPTURED_VALUE =
IrDeclarationOriginImpl("FIELD_FOR_CAPTURED_VALUE", isSynthetic = true)
object DECLARATION_ORIGIN_FIELD_FOR_CROSSINLINE_CAPTURED_VALUE :
IrDeclarationOriginImpl("FIELD_FOR_CROSSINLINE_CAPTURED_VALUE", isSynthetic = true)
val DECLARATION_ORIGIN_FIELD_FOR_CROSSINLINE_CAPTURED_VALUE =
IrDeclarationOriginImpl("FIELD_FOR_CROSSINLINE_CAPTURED_VALUE", isSynthetic = true)
}
override fun lower(irBody: IrBody, container: IrDeclaration) {
LocalDeclarationsTransformer(irBody, container).lowerLocalDeclarations()
@@ -7,8 +7,8 @@ package org.jetbrains.kotlin.backend.common.lower
import org.jetbrains.kotlin.ir.expressions.IrStatementOriginImpl
interface LoweredStatementOrigins {
object STATEMENT_ORIGIN_INITIALIZER_OF_FIELD_FOR_CAPTURED_VALUE : IrStatementOriginImpl("INITIALIZER_OF_FIELD_FOR_CAPTURED_VALUE")
object SYNTHESIZED_INIT_BLOCK : IrStatementOriginImpl("SYNTHESIZED_INIT_BLOCK")
object DEFAULT_DISPATCH_CALL : IrStatementOriginImpl("DEFAULT_DISPATCH_CALL")
}
object LoweredStatementOrigins {
val STATEMENT_ORIGIN_INITIALIZER_OF_FIELD_FOR_CAPTURED_VALUE = IrStatementOriginImpl("INITIALIZER_OF_FIELD_FOR_CAPTURED_VALUE")
val SYNTHESIZED_INIT_BLOCK by IrStatementOriginImpl
val DEFAULT_DISPATCH_CALL by IrStatementOriginImpl
}
@@ -917,6 +917,6 @@ class FunctionInlining(
}
}
object INLINED_FUNCTION_REFERENCE : IrStatementOriginImpl("INLINED_FUNCTION_REFERENCE")
object INLINED_FUNCTION_ARGUMENTS : IrStatementOriginImpl("INLINED_FUNCTION_ARGUMENTS")
object INLINED_FUNCTION_DEFAULT_ARGUMENTS : IrStatementOriginImpl("INLINED_FUNCTION_DEFAULT_ARGUMENTS")
val INLINED_FUNCTION_REFERENCE by IrStatementOriginImpl
val INLINED_FUNCTION_ARGUMENTS by IrStatementOriginImpl
val INLINED_FUNCTION_DEFAULT_ARGUMENTS by IrStatementOriginImpl