[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
@@ -9,21 +9,21 @@ import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOriginImpl
object JsLoweredDeclarationOrigin {
object JS_INTRINSICS_STUB : IrDeclarationOriginImpl("JS_INTRINSICS_STUB")
object JS_CLOSURE_BOX_CLASS_DECLARATION : IrDeclarationOriginImpl("JS_CLOSURE_BOX_CLASS_DECLARATION")
object BRIDGE_WITH_STABLE_NAME : IrDeclarationOriginImpl("BRIDGE_WITH_STABLE_NAME")
object BRIDGE_WITHOUT_STABLE_NAME : IrDeclarationOriginImpl("BRIDGE_WITHOUT_STABLE_NAME")
object BRIDGE_PROPERTY_ACCESSOR : IrDeclarationOriginImpl("BRIDGE_PROPERTY_ACCESSOR")
object OBJECT_GET_INSTANCE_FUNCTION : IrDeclarationOriginImpl("OBJECT_GET_INSTANCE_FUNCTION")
object JS_SHADOWED_EXPORT : IrDeclarationOriginImpl("JS_SHADOWED_EXPORT")
object JS_SUPER_CONTEXT_PARAMETER : IrDeclarationOriginImpl("JS_SUPER_CONTEXT_PARAMETER")
object JS_SHADOWED_DEFAULT_PARAMETER : IrDeclarationOriginImpl("JS_SHADOWED_DEFAULT_PARAMETER")
object ENUM_GET_INSTANCE_FUNCTION : IrDeclarationOriginImpl("ENUM_GET_INSTANCE_FUNCTION")
val JS_INTRINSICS_STUB by IrDeclarationOriginImpl
val JS_CLOSURE_BOX_CLASS_DECLARATION by IrDeclarationOriginImpl
val BRIDGE_WITH_STABLE_NAME by IrDeclarationOriginImpl
val BRIDGE_WITHOUT_STABLE_NAME by IrDeclarationOriginImpl
val BRIDGE_PROPERTY_ACCESSOR by IrDeclarationOriginImpl
val OBJECT_GET_INSTANCE_FUNCTION by IrDeclarationOriginImpl
val JS_SHADOWED_EXPORT by IrDeclarationOriginImpl
val JS_SUPER_CONTEXT_PARAMETER by IrDeclarationOriginImpl
val JS_SHADOWED_DEFAULT_PARAMETER by IrDeclarationOriginImpl
val ENUM_GET_INSTANCE_FUNCTION by IrDeclarationOriginImpl
fun isBridgeDeclarationOrigin(origin: IrDeclarationOrigin) = when (origin) {
is BRIDGE_WITH_STABLE_NAME -> true
is BRIDGE_WITHOUT_STABLE_NAME -> true
is BRIDGE_PROPERTY_ACCESSOR -> true
BRIDGE_WITH_STABLE_NAME -> true
BRIDGE_WITHOUT_STABLE_NAME -> true
BRIDGE_PROPERTY_ACCESSOR -> true
else -> false
}
}
@@ -20,7 +20,7 @@ import org.jetbrains.kotlin.ir.util.parentAsClass
import org.jetbrains.kotlin.name.Name
object JsIrBuilder {
object SYNTHESIZED_DECLARATION : IrDeclarationOriginImpl("SYNTHESIZED_DECLARATION")
val SYNTHESIZED_DECLARATION by IrDeclarationOriginImpl
fun buildCall(
target: IrSimpleFunctionSymbol,
@@ -469,9 +469,9 @@ class CallableReferenceLowering(private val context: CommonBackendContext) : Bod
}
companion object {
object LAMBDA_IMPL : IrDeclarationOriginImpl("LAMBDA_IMPL")
object FUNCTION_REFERENCE_IMPL : IrDeclarationOriginImpl("FUNCTION_REFERENCE_IMPL")
object GENERATED_MEMBER_IN_CALLABLE_REFERENCE : IrDeclarationOriginImpl("GENERATED_MEMBER_IN_CALLABLE_REFERENCE")
val LAMBDA_IMPL by IrDeclarationOriginImpl
val FUNCTION_REFERENCE_IMPL by IrDeclarationOriginImpl
val GENERATED_MEMBER_IN_CALLABLE_REFERENCE by IrDeclarationOriginImpl
val BOUND_RECEIVER_NAME = Name.identifier("\$boundThis")
}
@@ -22,7 +22,7 @@ import org.jetbrains.kotlin.ir.util.isSubclassOf
import org.jetbrains.kotlin.ir.util.parentAsClass
import org.jetbrains.kotlin.name.Name
object ES6_THROWABLE_CONSTRUCTOR_SLOT : IrDeclarationOriginImpl("ES6_THROWABLE_CONSTRUCTOR_SLOT")
val ES6_THROWABLE_CONSTRUCTOR_SLOT by IrDeclarationOriginImpl
/**
* Capture stack trace in primary constructors of Throwable
*/
@@ -24,7 +24,7 @@ import org.jetbrains.kotlin.ir.util.transformFlat
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.utils.memoryOptimizedMap
private object SCRIPT_FUNCTION : IrDeclarationOriginImpl("SCRIPT_FUNCTION")
private val SCRIPT_FUNCTION by IrDeclarationOriginImpl
class CreateScriptFunctionsPhase(val context: CommonBackendContext) : FileLoweringPass {
override fun lower(irFile: IrFile) {
@@ -30,8 +30,8 @@ import org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid
import org.jetbrains.kotlin.ir.visitors.transformChildrenVoid
import org.jetbrains.kotlin.utils.memoryOptimizedPlus
object ES6_BOX_PARAMETER : IrDeclarationOriginImpl("ES6_BOX_PARAMETER")
object ES6_BOX_PARAMETER_DEFAULT_RESOLUTION : IrStatementOriginImpl("ES6_BOX_PARAMETER_DEFAULT_RESOLUTION")
val ES6_BOX_PARAMETER by IrDeclarationOriginImpl
val ES6_BOX_PARAMETER_DEFAULT_RESOLUTION by IrStatementOriginImpl
val IrValueParameter.isBoxParameter: Boolean
get() = origin == ES6_BOX_PARAMETER
@@ -29,13 +29,13 @@ import org.jetbrains.kotlin.utils.memoryOptimizedMap
import org.jetbrains.kotlin.utils.memoryOptimizedPlus
import org.jetbrains.kotlin.utils.newHashMapWithExpectedSize
object ES6_INIT_CALL : IrStatementOriginImpl("ES6_INIT_CALL")
object ES6_CONSTRUCTOR_REPLACEMENT : IrDeclarationOriginImpl("ES6_CONSTRUCTOR_REPLACEMENT")
object ES6_SYNTHETIC_EXPORT_CONSTRUCTOR: IrDeclarationOriginImpl("ES6_SYNTHETIC_EXPORT_CONSTRUCTOR")
object ES6_PRIMARY_CONSTRUCTOR_REPLACEMENT : IrDeclarationOriginImpl("ES6_PRIMARY_CONSTRUCTOR_REPLACEMENT")
object ES6_INIT_FUNCTION : IrDeclarationOriginImpl("ES6_INIT_FUNCTION")
object ES6_DELEGATING_CONSTRUCTOR_REPLACEMENT : IrStatementOriginImpl("ES6_DELEGATING_CONSTRUCTOR_REPLACEMENT")
object ES6_DELEGATING_CONSTRUCTOR_CALL_REPLACEMENT : IrDeclarationOriginImpl("ES6_DELEGATING_CONSTRUCTOR_CALL_REPLACEMENT")
val ES6_INIT_CALL by IrStatementOriginImpl
val ES6_CONSTRUCTOR_REPLACEMENT by IrDeclarationOriginImpl
val ES6_SYNTHETIC_EXPORT_CONSTRUCTOR by IrDeclarationOriginImpl
val ES6_PRIMARY_CONSTRUCTOR_REPLACEMENT by IrDeclarationOriginImpl
val ES6_INIT_FUNCTION by IrDeclarationOriginImpl
val ES6_DELEGATING_CONSTRUCTOR_REPLACEMENT by IrStatementOriginImpl
val ES6_DELEGATING_CONSTRUCTOR_CALL_REPLACEMENT by IrDeclarationOriginImpl
val IrDeclaration.isEs6ConstructorReplacement: Boolean
get() = origin == ES6_CONSTRUCTOR_REPLACEMENT || origin == ES6_PRIMARY_CONSTRUCTOR_REPLACEMENT
@@ -44,7 +44,7 @@ class JsCodeOutliningLowering(val backendContext: JsIrBackendContext) : BodyLowe
}
companion object {
val OUTLINED_JS_CODE_ORIGIN = object : IrDeclarationOriginImpl("OUTLINED_JS_CODE") {}
val OUTLINED_JS_CODE_ORIGIN = IrDeclarationOriginImpl("OUTLINED_JS_CODE")
}
}
@@ -42,7 +42,9 @@ class PrimaryConstructorLowering(val context: JsCommonBackendContext) : Declarat
return null
}
object SYNTHETIC_PRIMARY_CONSTRUCTOR : IrDeclarationOriginImpl("SYNTHETIC_PRIMARY_CONSTRUCTOR")
companion object {
val SYNTHETIC_PRIMARY_CONSTRUCTOR by IrDeclarationOriginImpl
}
private val unitType = context.irBuiltIns.unitType
@@ -25,7 +25,7 @@ import org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.utils.memoryOptimizedPlus
private val STATIC_THIS_PARAMETER = object : IrDeclarationOriginImpl("STATIC_THIS_PARAMETER") {}
private val STATIC_THIS_PARAMETER by IrDeclarationOriginImpl
class PrivateMembersLowering(val context: JsIrBackendContext) : DeclarationTransformer {
@@ -164,7 +164,7 @@ class PropertyLazyInitLowering(
}
companion object {
object PROPERTY_INIT_FUN_CALL : IrStatementOriginImpl("PROPERTY_INIT_FUN_CALL")
val PROPERTY_INIT_FUN_CALL by IrStatementOriginImpl
}
}
@@ -271,6 +271,6 @@ class PropertyReferenceLowering(private val context: JsIrBackendContext) : BodyL
}
companion object {
object PROPERTY_REFERENCE_FACTORY : IrDeclarationOriginImpl("PROPERTY_REFERNCE_FACTORY")
val PROPERTY_REFERENCE_FACTORY = IrDeclarationOriginImpl("PROPERTY_REFERNCE_FACTORY")
}
}
@@ -42,7 +42,9 @@ abstract class AbstractSuspendFunctionsLowering<C : CommonBackendContext>(val co
private var IrFunction.coroutineConstructor by context.mapping.suspendFunctionToCoroutineConstructor
protected object DECLARATION_ORIGIN_COROUTINE_IMPL : IrDeclarationOriginImpl("COROUTINE_IMPL")
protected companion object {
val DECLARATION_ORIGIN_COROUTINE_IMPL = IrDeclarationOriginImpl("COROUTINE_IMPL")
}
protected abstract val stateMachineMethodName: Name
protected abstract fun getCoroutineBaseClass(function: IrFunction): IrClassSymbol
@@ -169,10 +169,10 @@ class IrElementToJsStatementTransformer : BaseIrElementToJsNodeTransformer<JsSta
val jsInitializer = value?.accept(IrElementToJsExpressionTransformer(), context)
val syntheticVariable = when (declaration.origin) {
is IrDeclarationOrigin.IR_TEMPORARY_VARIABLE -> true
is IrDeclarationOrigin.IR_TEMPORARY_VARIABLE_FOR_INLINED_PARAMETER -> true
is IrDeclarationOrigin.IR_TEMPORARY_VARIABLE_FOR_INLINED_EXTENSION_RECEIVER -> true
is ES6_DELEGATING_CONSTRUCTOR_CALL_REPLACEMENT -> true
IrDeclarationOrigin.IR_TEMPORARY_VARIABLE -> true
IrDeclarationOrigin.IR_TEMPORARY_VARIABLE_FOR_INLINED_PARAMETER -> true
IrDeclarationOrigin.IR_TEMPORARY_VARIABLE_FOR_INLINED_EXTENSION_RECEIVER -> true
ES6_DELEGATING_CONSTRUCTOR_CALL_REPLACEMENT -> true
else -> false
}