[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
@@ -128,10 +128,10 @@ internal class OperatorExpressionGenerator(
} }
private fun IrStatementOrigin.toIrDynamicOperator() = when (this) { private fun IrStatementOrigin.toIrDynamicOperator() = when (this) {
is IrStatementOrigin.EQEQ -> IrDynamicOperator.EQEQ IrStatementOrigin.EQEQ -> IrDynamicOperator.EQEQ
is IrStatementOrigin.EXCLEQ -> IrDynamicOperator.EXCLEQ IrStatementOrigin.EXCLEQ -> IrDynamicOperator.EXCLEQ
is IrStatementOrigin.EQEQEQ -> IrDynamicOperator.EQEQEQ IrStatementOrigin.EQEQEQ -> IrDynamicOperator.EQEQEQ
is IrStatementOrigin.EXCLEQEQ -> IrDynamicOperator.EXCLEQEQ IrStatementOrigin.EXCLEQEQ -> IrDynamicOperator.EXCLEQEQ
else -> null else -> null
} }
@@ -22,9 +22,10 @@ import org.jetbrains.kotlin.ir.visitors.*
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
abstract class AbstractSuspendFunctionsLowering<C : CommonBackendContext>(val context: C) : FileLoweringPass { abstract class AbstractSuspendFunctionsLowering<C : CommonBackendContext>(val context: C) : FileLoweringPass {
protected companion object {
protected object STATEMENT_ORIGIN_COROUTINE_IMPL : IrStatementOriginImpl("COROUTINE_IMPL") val STATEMENT_ORIGIN_COROUTINE_IMPL = IrStatementOriginImpl("COROUTINE_IMPL")
protected object DECLARATION_ORIGIN_COROUTINE_IMPL : IrDeclarationOriginImpl("COROUTINE_IMPL") val DECLARATION_ORIGIN_COROUTINE_IMPL = IrDeclarationOriginImpl("COROUTINE_IMPL")
}
protected abstract val stateMachineMethodName: Name protected abstract val stateMachineMethodName: Name
protected abstract fun getCoroutineBaseClass(function: IrFunction): IrClassSymbol 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.name.Name
import org.jetbrains.kotlin.utils.filterIsInstanceAnd import org.jetbrains.kotlin.utils.filterIsInstanceAnd
val ANNOTATION_IMPLEMENTATION = object : IrDeclarationOriginImpl("ANNOTATION_IMPLEMENTATION", isSynthetic = true) {} val ANNOTATION_IMPLEMENTATION by IrDeclarationOriginImpl.Synthetic
class AnnotationImplementationLowering( class AnnotationImplementationLowering(
val transformer: (IrFile) -> AnnotationImplementationTransformer 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 { class ArrayConstructorReferenceLowering(val context: CommonBackendContext) : BodyLoweringPass {
override fun lower(irBody: IrBody, container: IrDeclaration) { 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.ir.visitors.transformChildrenVoid
import org.jetbrains.kotlin.name.Name 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() { 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> val IrDeclaration.parents: Sequence<IrDeclarationParent>
get() = generateSequence(parent) { (it as? IrDeclaration)?.parent } 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 Local functions raised in LocalDeclarationLowering continue to refer to
@@ -86,11 +86,13 @@ class LocalDeclarationsLowering(
runOnFilePostfix(irFile) runOnFilePostfix(irFile)
} }
object DECLARATION_ORIGIN_FIELD_FOR_CAPTURED_VALUE : companion object {
IrDeclarationOriginImpl("FIELD_FOR_CAPTURED_VALUE", isSynthetic = true) val DECLARATION_ORIGIN_FIELD_FOR_CAPTURED_VALUE =
IrDeclarationOriginImpl("FIELD_FOR_CAPTURED_VALUE", isSynthetic = true)
object DECLARATION_ORIGIN_FIELD_FOR_CROSSINLINE_CAPTURED_VALUE : val DECLARATION_ORIGIN_FIELD_FOR_CROSSINLINE_CAPTURED_VALUE =
IrDeclarationOriginImpl("FIELD_FOR_CROSSINLINE_CAPTURED_VALUE", isSynthetic = true) IrDeclarationOriginImpl("FIELD_FOR_CROSSINLINE_CAPTURED_VALUE", isSynthetic = true)
}
override fun lower(irBody: IrBody, container: IrDeclaration) { override fun lower(irBody: IrBody, container: IrDeclaration) {
LocalDeclarationsTransformer(irBody, container).lowerLocalDeclarations() LocalDeclarationsTransformer(irBody, container).lowerLocalDeclarations()
@@ -7,8 +7,8 @@ package org.jetbrains.kotlin.backend.common.lower
import org.jetbrains.kotlin.ir.expressions.IrStatementOriginImpl import org.jetbrains.kotlin.ir.expressions.IrStatementOriginImpl
interface LoweredStatementOrigins { object LoweredStatementOrigins {
object STATEMENT_ORIGIN_INITIALIZER_OF_FIELD_FOR_CAPTURED_VALUE : IrStatementOriginImpl("INITIALIZER_OF_FIELD_FOR_CAPTURED_VALUE") val STATEMENT_ORIGIN_INITIALIZER_OF_FIELD_FOR_CAPTURED_VALUE = IrStatementOriginImpl("INITIALIZER_OF_FIELD_FOR_CAPTURED_VALUE")
object SYNTHESIZED_INIT_BLOCK : IrStatementOriginImpl("SYNTHESIZED_INIT_BLOCK") val SYNTHESIZED_INIT_BLOCK by IrStatementOriginImpl
object DEFAULT_DISPATCH_CALL : IrStatementOriginImpl("DEFAULT_DISPATCH_CALL") val DEFAULT_DISPATCH_CALL by IrStatementOriginImpl
} }
@@ -917,6 +917,6 @@ class FunctionInlining(
} }
} }
object INLINED_FUNCTION_REFERENCE : IrStatementOriginImpl("INLINED_FUNCTION_REFERENCE") val INLINED_FUNCTION_REFERENCE by IrStatementOriginImpl
object INLINED_FUNCTION_ARGUMENTS : IrStatementOriginImpl("INLINED_FUNCTION_ARGUMENTS") val INLINED_FUNCTION_ARGUMENTS by IrStatementOriginImpl
object INLINED_FUNCTION_DEFAULT_ARGUMENTS : IrStatementOriginImpl("INLINED_FUNCTION_DEFAULT_ARGUMENTS") val INLINED_FUNCTION_DEFAULT_ARGUMENTS by IrStatementOriginImpl
@@ -9,21 +9,21 @@ import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOriginImpl import org.jetbrains.kotlin.ir.declarations.IrDeclarationOriginImpl
object JsLoweredDeclarationOrigin { object JsLoweredDeclarationOrigin {
object JS_INTRINSICS_STUB : IrDeclarationOriginImpl("JS_INTRINSICS_STUB") val JS_INTRINSICS_STUB by IrDeclarationOriginImpl
object JS_CLOSURE_BOX_CLASS_DECLARATION : IrDeclarationOriginImpl("JS_CLOSURE_BOX_CLASS_DECLARATION") val JS_CLOSURE_BOX_CLASS_DECLARATION by IrDeclarationOriginImpl
object BRIDGE_WITH_STABLE_NAME : IrDeclarationOriginImpl("BRIDGE_WITH_STABLE_NAME") val BRIDGE_WITH_STABLE_NAME by IrDeclarationOriginImpl
object BRIDGE_WITHOUT_STABLE_NAME : IrDeclarationOriginImpl("BRIDGE_WITHOUT_STABLE_NAME") val BRIDGE_WITHOUT_STABLE_NAME by IrDeclarationOriginImpl
object BRIDGE_PROPERTY_ACCESSOR : IrDeclarationOriginImpl("BRIDGE_PROPERTY_ACCESSOR") val BRIDGE_PROPERTY_ACCESSOR by IrDeclarationOriginImpl
object OBJECT_GET_INSTANCE_FUNCTION : IrDeclarationOriginImpl("OBJECT_GET_INSTANCE_FUNCTION") val OBJECT_GET_INSTANCE_FUNCTION by IrDeclarationOriginImpl
object JS_SHADOWED_EXPORT : IrDeclarationOriginImpl("JS_SHADOWED_EXPORT") val JS_SHADOWED_EXPORT by IrDeclarationOriginImpl
object JS_SUPER_CONTEXT_PARAMETER : IrDeclarationOriginImpl("JS_SUPER_CONTEXT_PARAMETER") val JS_SUPER_CONTEXT_PARAMETER by IrDeclarationOriginImpl
object JS_SHADOWED_DEFAULT_PARAMETER : IrDeclarationOriginImpl("JS_SHADOWED_DEFAULT_PARAMETER") val JS_SHADOWED_DEFAULT_PARAMETER by IrDeclarationOriginImpl
object ENUM_GET_INSTANCE_FUNCTION : IrDeclarationOriginImpl("ENUM_GET_INSTANCE_FUNCTION") val ENUM_GET_INSTANCE_FUNCTION by IrDeclarationOriginImpl
fun isBridgeDeclarationOrigin(origin: IrDeclarationOrigin) = when (origin) { fun isBridgeDeclarationOrigin(origin: IrDeclarationOrigin) = when (origin) {
is BRIDGE_WITH_STABLE_NAME -> true BRIDGE_WITH_STABLE_NAME -> true
is BRIDGE_WITHOUT_STABLE_NAME -> true BRIDGE_WITHOUT_STABLE_NAME -> true
is BRIDGE_PROPERTY_ACCESSOR -> true BRIDGE_PROPERTY_ACCESSOR -> true
else -> false else -> false
} }
} }
@@ -20,7 +20,7 @@ import org.jetbrains.kotlin.ir.util.parentAsClass
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
object JsIrBuilder { object JsIrBuilder {
object SYNTHESIZED_DECLARATION : IrDeclarationOriginImpl("SYNTHESIZED_DECLARATION") val SYNTHESIZED_DECLARATION by IrDeclarationOriginImpl
fun buildCall( fun buildCall(
target: IrSimpleFunctionSymbol, target: IrSimpleFunctionSymbol,
@@ -469,9 +469,9 @@ class CallableReferenceLowering(private val context: CommonBackendContext) : Bod
} }
companion object { companion object {
object LAMBDA_IMPL : IrDeclarationOriginImpl("LAMBDA_IMPL") val LAMBDA_IMPL by IrDeclarationOriginImpl
object FUNCTION_REFERENCE_IMPL : IrDeclarationOriginImpl("FUNCTION_REFERENCE_IMPL") val FUNCTION_REFERENCE_IMPL by IrDeclarationOriginImpl
object GENERATED_MEMBER_IN_CALLABLE_REFERENCE : IrDeclarationOriginImpl("GENERATED_MEMBER_IN_CALLABLE_REFERENCE") val GENERATED_MEMBER_IN_CALLABLE_REFERENCE by IrDeclarationOriginImpl
val BOUND_RECEIVER_NAME = Name.identifier("\$boundThis") 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.ir.util.parentAsClass
import org.jetbrains.kotlin.name.Name 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 * 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.name.Name
import org.jetbrains.kotlin.utils.memoryOptimizedMap 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 { class CreateScriptFunctionsPhase(val context: CommonBackendContext) : FileLoweringPass {
override fun lower(irFile: IrFile) { 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.ir.visitors.transformChildrenVoid
import org.jetbrains.kotlin.utils.memoryOptimizedPlus import org.jetbrains.kotlin.utils.memoryOptimizedPlus
object ES6_BOX_PARAMETER : IrDeclarationOriginImpl("ES6_BOX_PARAMETER") val ES6_BOX_PARAMETER by IrDeclarationOriginImpl
object ES6_BOX_PARAMETER_DEFAULT_RESOLUTION : IrStatementOriginImpl("ES6_BOX_PARAMETER_DEFAULT_RESOLUTION") val ES6_BOX_PARAMETER_DEFAULT_RESOLUTION by IrStatementOriginImpl
val IrValueParameter.isBoxParameter: Boolean val IrValueParameter.isBoxParameter: Boolean
get() = origin == ES6_BOX_PARAMETER 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.memoryOptimizedPlus
import org.jetbrains.kotlin.utils.newHashMapWithExpectedSize import org.jetbrains.kotlin.utils.newHashMapWithExpectedSize
object ES6_INIT_CALL : IrStatementOriginImpl("ES6_INIT_CALL") val ES6_INIT_CALL by IrStatementOriginImpl
object ES6_CONSTRUCTOR_REPLACEMENT : IrDeclarationOriginImpl("ES6_CONSTRUCTOR_REPLACEMENT") val ES6_CONSTRUCTOR_REPLACEMENT by IrDeclarationOriginImpl
object ES6_SYNTHETIC_EXPORT_CONSTRUCTOR: IrDeclarationOriginImpl("ES6_SYNTHETIC_EXPORT_CONSTRUCTOR") val ES6_SYNTHETIC_EXPORT_CONSTRUCTOR by IrDeclarationOriginImpl
object ES6_PRIMARY_CONSTRUCTOR_REPLACEMENT : IrDeclarationOriginImpl("ES6_PRIMARY_CONSTRUCTOR_REPLACEMENT") val ES6_PRIMARY_CONSTRUCTOR_REPLACEMENT by IrDeclarationOriginImpl
object ES6_INIT_FUNCTION : IrDeclarationOriginImpl("ES6_INIT_FUNCTION") val ES6_INIT_FUNCTION by IrDeclarationOriginImpl
object ES6_DELEGATING_CONSTRUCTOR_REPLACEMENT : IrStatementOriginImpl("ES6_DELEGATING_CONSTRUCTOR_REPLACEMENT") val ES6_DELEGATING_CONSTRUCTOR_REPLACEMENT by IrStatementOriginImpl
object ES6_DELEGATING_CONSTRUCTOR_CALL_REPLACEMENT : IrDeclarationOriginImpl("ES6_DELEGATING_CONSTRUCTOR_CALL_REPLACEMENT") val ES6_DELEGATING_CONSTRUCTOR_CALL_REPLACEMENT by IrDeclarationOriginImpl
val IrDeclaration.isEs6ConstructorReplacement: Boolean val IrDeclaration.isEs6ConstructorReplacement: Boolean
get() = origin == ES6_CONSTRUCTOR_REPLACEMENT || origin == ES6_PRIMARY_CONSTRUCTOR_REPLACEMENT get() = origin == ES6_CONSTRUCTOR_REPLACEMENT || origin == ES6_PRIMARY_CONSTRUCTOR_REPLACEMENT
@@ -44,7 +44,7 @@ class JsCodeOutliningLowering(val backendContext: JsIrBackendContext) : BodyLowe
} }
companion object { 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 return null
} }
object SYNTHETIC_PRIMARY_CONSTRUCTOR : IrDeclarationOriginImpl("SYNTHETIC_PRIMARY_CONSTRUCTOR") companion object {
val SYNTHETIC_PRIMARY_CONSTRUCTOR by IrDeclarationOriginImpl
}
private val unitType = context.irBuiltIns.unitType 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.name.Name
import org.jetbrains.kotlin.utils.memoryOptimizedPlus 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 { class PrivateMembersLowering(val context: JsIrBackendContext) : DeclarationTransformer {
@@ -164,7 +164,7 @@ class PropertyLazyInitLowering(
} }
companion object { 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 { 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 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 val stateMachineMethodName: Name
protected abstract fun getCoroutineBaseClass(function: IrFunction): IrClassSymbol protected abstract fun getCoroutineBaseClass(function: IrFunction): IrClassSymbol
@@ -169,10 +169,10 @@ class IrElementToJsStatementTransformer : BaseIrElementToJsNodeTransformer<JsSta
val jsInitializer = value?.accept(IrElementToJsExpressionTransformer(), context) val jsInitializer = value?.accept(IrElementToJsExpressionTransformer(), context)
val syntheticVariable = when (declaration.origin) { val syntheticVariable = when (declaration.origin) {
is IrDeclarationOrigin.IR_TEMPORARY_VARIABLE -> true IrDeclarationOrigin.IR_TEMPORARY_VARIABLE -> true
is IrDeclarationOrigin.IR_TEMPORARY_VARIABLE_FOR_INLINED_PARAMETER -> true IrDeclarationOrigin.IR_TEMPORARY_VARIABLE_FOR_INLINED_PARAMETER -> true
is IrDeclarationOrigin.IR_TEMPORARY_VARIABLE_FOR_INLINED_EXTENSION_RECEIVER -> true IrDeclarationOrigin.IR_TEMPORARY_VARIABLE_FOR_INLINED_EXTENSION_RECEIVER -> true
is ES6_DELEGATING_CONSTRUCTOR_CALL_REPLACEMENT -> true ES6_DELEGATING_CONSTRUCTOR_CALL_REPLACEMENT -> true
else -> false else -> false
} }
@@ -58,7 +58,7 @@ internal class FragmentLocalFunctionPatchLowering(
override fun visitCall(expression: IrCall): IrExpression { override fun visitCall(expression: IrCall): IrExpression {
expression.transformChildrenVoid(this) expression.transformChildrenVoid(this)
val localDeclarationsDataKey = when (expression.symbol.owner.origin) { val localDeclarationsDataKey = when (expression.symbol.owner.origin) {
is IrDeclarationOrigin.FUNCTION_FOR_DEFAULT_PARAMETER -> context.mapping.defaultArgumentsOriginalFunction[expression.symbol.owner] IrDeclarationOrigin.FUNCTION_FOR_DEFAULT_PARAMETER -> context.mapping.defaultArgumentsOriginalFunction[expression.symbol.owner]
else -> expression.symbol.owner else -> expression.symbol.owner
} }
val localsData = localDeclarationsData[localDeclarationsDataKey] ?: return expression val localsData = localDeclarationsData[localDeclarationsDataKey] ?: return expression
@@ -506,7 +506,9 @@ internal class JvmMultiFieldValueClassLowering(context: JvmBackendContext) : Jvm
return listOf(replacement) return listOf(replacement)
} }
private object UNSAFE_MFVC_SET_ORIGIN : IrStatementOrigin private companion object {
private val UNSAFE_MFVC_SET_ORIGIN by IrStatementOriginImpl
}
private fun RootMfvcNode.replaceMfvcNotStaticFields() { private fun RootMfvcNode.replaceMfvcNotStaticFields() {
val fieldsToRemove = mfvc.fields.filter { !it.isStatic }.toList() val fieldsToRemove = mfvc.fields.filter { !it.isStatic }.toList()
@@ -439,7 +439,7 @@ class JvmOptimizationLowering(val context: JvmBackendContext) : FileLoweringPass
if (!hasSameLineNumber(argument, expression)) { if (!hasSameLineNumber(argument, expression)) {
return null return null
} }
return rewriteCompoundAssignmentAsPrefixIncrDecr(expression, argument, expression.origin is IrStatementOrigin.MINUSEQ) return rewriteCompoundAssignmentAsPrefixIncrDecr(expression, argument, expression.origin == IrStatementOrigin.MINUSEQ)
} }
IrStatementOrigin.EQ -> { IrStatementOrigin.EQ -> {
val value = expression.value val value = expression.value
@@ -52,8 +52,10 @@ internal val propertyReferencePhase = makeIrFilePhase(
) )
internal class PropertyReferenceLowering(val context: JvmBackendContext) : IrElementTransformerVoidWithContext(), FileLoweringPass { internal class PropertyReferenceLowering(val context: JvmBackendContext) : IrElementTransformerVoidWithContext(), FileLoweringPass {
// Marking a property reference with this origin causes it to not generate a class. companion object {
object REFLECTED_PROPERTY_REFERENCE : IrStatementOriginImpl("REFLECTED_PROPERTY_REFERENCE") // Marking a property reference with this origin causes it to not generate a class.
val REFLECTED_PROPERTY_REFERENCE by IrStatementOriginImpl
}
// TODO: join IrLocalDelegatedPropertyReference and IrPropertyReference via the class hierarchy? // TODO: join IrLocalDelegatedPropertyReference and IrPropertyReference via the class hierarchy?
private val IrMemberAccessExpression<*>.getter: IrSimpleFunctionSymbol? private val IrMemberAccessExpression<*>.getter: IrSimpleFunctionSymbol?
@@ -33,7 +33,7 @@ object InlineClassAbi {
* perform inline class mangling and so in the absence of jvm signatures in the metadata we need to avoid * perform inline class mangling and so in the absence of jvm signatures in the metadata we need to avoid
* inline class mangling as well in the function references used as arguments to the signature string intrinsic. * inline class mangling as well in the function references used as arguments to the signature string intrinsic.
*/ */
object UNMANGLED_FUNCTION_REFERENCE : IrStatementOriginImpl("UNMANGLED_FUNCTION_REFERENCE") val UNMANGLED_FUNCTION_REFERENCE by IrStatementOriginImpl
/** /**
* Unwraps inline class types to their underlying representation. * Unwraps inline class types to their underlying representation.
@@ -5,60 +5,56 @@
package org.jetbrains.kotlin.backend.jvm package org.jetbrains.kotlin.backend.jvm
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOriginImpl import org.jetbrains.kotlin.ir.declarations.IrDeclarationOriginImpl
interface JvmLoweredDeclarationOrigin : IrDeclarationOrigin { object JvmLoweredDeclarationOrigin {
object CLASS_STATIC_INITIALIZER : IrDeclarationOriginImpl("CLASS_STATIC_INITIALIZER") val CLASS_STATIC_INITIALIZER by IrDeclarationOriginImpl
object DEFAULT_IMPLS : IrDeclarationOriginImpl("DEFAULT_IMPLS") val DEFAULT_IMPLS by IrDeclarationOriginImpl
object SUPER_INTERFACE_METHOD_BRIDGE : IrDeclarationOriginImpl("SUPER_INTERFACE_METHOD_BRIDGE") val SUPER_INTERFACE_METHOD_BRIDGE by IrDeclarationOriginImpl
object FIELD_FOR_OUTER_THIS : IrDeclarationOriginImpl("FIELD_FOR_OUTER_THIS") val FIELD_FOR_OUTER_THIS by IrDeclarationOriginImpl
object LAMBDA_IMPL : IrDeclarationOriginImpl("LAMBDA_IMPL") val LAMBDA_IMPL by IrDeclarationOriginImpl
object FUNCTION_REFERENCE_IMPL : IrDeclarationOriginImpl("FUNCTION_REFERENCE_IMPL", isSynthetic = true) val FUNCTION_REFERENCE_IMPL by IrDeclarationOriginImpl.Synthetic
object SYNTHETIC_ACCESSOR : IrDeclarationOriginImpl("SYNTHETIC_ACCESSOR", isSynthetic = true) val SYNTHETIC_ACCESSOR by IrDeclarationOriginImpl.Synthetic
object SYNTHETIC_ACCESSOR_FOR_HIDDEN_CONSTRUCTOR : val SYNTHETIC_ACCESSOR_FOR_HIDDEN_CONSTRUCTOR by IrDeclarationOriginImpl.Synthetic
IrDeclarationOriginImpl("SYNTHETIC_ACCESSOR_FOR_HIDDEN_CONSTRUCTOR", isSynthetic = true) val SYNTHETIC_MARKER_PARAMETER by IrDeclarationOriginImpl.Synthetic
object SYNTHETIC_MARKER_PARAMETER : IrDeclarationOriginImpl("SYNTHETIC_MARKER_PARAMETER", isSynthetic = true) val TO_ARRAY by IrDeclarationOriginImpl
object TO_ARRAY : IrDeclarationOriginImpl("TO_ARRAY") val JVM_STATIC_WRAPPER by IrDeclarationOriginImpl
object JVM_STATIC_WRAPPER : IrDeclarationOriginImpl("JVM_STATIC_WRAPPER") val JVM_OVERLOADS_WRAPPER by IrDeclarationOriginImpl
object JVM_OVERLOADS_WRAPPER : IrDeclarationOriginImpl("JVM_OVERLOADS_WRAPPER") val SYNTHETIC_METHOD_FOR_PROPERTY_OR_TYPEALIAS_ANNOTATIONS by IrDeclarationOriginImpl.Synthetic
object SYNTHETIC_METHOD_FOR_PROPERTY_OR_TYPEALIAS_ANNOTATIONS : val GENERATED_PROPERTY_REFERENCE by IrDeclarationOriginImpl.Synthetic
IrDeclarationOriginImpl("SYNTHETIC_METHOD_FOR_PROPERTY_OR_TYPEALIAS_ANNOTATIONS", isSynthetic = true) val GENERATED_MEMBER_IN_CALLABLE_REFERENCE by IrDeclarationOriginImpl
object GENERATED_PROPERTY_REFERENCE : IrDeclarationOriginImpl("GENERATED_PROPERTY_REFERENCE", isSynthetic = true) val ENUM_MAPPINGS_FOR_WHEN by IrDeclarationOriginImpl.Synthetic
object GENERATED_MEMBER_IN_CALLABLE_REFERENCE : IrDeclarationOriginImpl("GENERATED_MEMBER_IN_CALLABLE_REFERENCE", isSynthetic = false) val ENUM_MAPPINGS_FOR_ENTRIES by IrDeclarationOriginImpl.Synthetic
object ENUM_MAPPINGS_FOR_WHEN : IrDeclarationOriginImpl("ENUM_MAPPINGS_FOR_WHEN", isSynthetic = true) val SYNTHETIC_INLINE_CLASS_MEMBER by IrDeclarationOriginImpl.Synthetic
object ENUM_MAPPINGS_FOR_ENTRIES : IrDeclarationOriginImpl("ENUM_MAPPINGS_FOR_ENTRIES", isSynthetic = true) val SYNTHETIC_MULTI_FIELD_VALUE_CLASS_MEMBER by IrDeclarationOriginImpl.Synthetic
object SYNTHETIC_INLINE_CLASS_MEMBER : IrDeclarationOriginImpl("SYNTHETIC_INLINE_CLASS_MEMBER", isSynthetic = true) val INLINE_CLASS_GENERATED_IMPL_METHOD by IrDeclarationOriginImpl
object SYNTHETIC_MULTI_FIELD_VALUE_CLASS_MEMBER : val MULTI_FIELD_VALUE_CLASS_GENERATED_IMPL_METHOD by IrDeclarationOriginImpl
IrDeclarationOriginImpl("SYNTHETIC_MULTI_FIELD_VALUE_CLASS_MEMBER", isSynthetic = true) val STATIC_INLINE_CLASS_REPLACEMENT by IrDeclarationOriginImpl
object INLINE_CLASS_GENERATED_IMPL_METHOD : IrDeclarationOriginImpl("INLINE_CLASS_GENERATED_IMPL_METHOD") val STATIC_MULTI_FIELD_VALUE_CLASS_REPLACEMENT by IrDeclarationOriginImpl
object MULTI_FIELD_VALUE_CLASS_GENERATED_IMPL_METHOD : IrDeclarationOriginImpl("MULTI_FIELD_VALUE_CLASS_GENERATED_IMPL_METHOD") val STATIC_INLINE_CLASS_CONSTRUCTOR by IrDeclarationOriginImpl
object STATIC_INLINE_CLASS_REPLACEMENT : IrDeclarationOriginImpl("STATIC_INLINE_CLASS_REPLACEMENT") val STATIC_MULTI_FIELD_VALUE_CLASS_CONSTRUCTOR by IrDeclarationOriginImpl
object STATIC_MULTI_FIELD_VALUE_CLASS_REPLACEMENT : IrDeclarationOriginImpl("STATIC_MULTI_FIELD_VALUE_CLASS_REPLACEMENT") val GENERATED_ASSERTION_ENABLED_FIELD by IrDeclarationOriginImpl.Synthetic
object STATIC_INLINE_CLASS_CONSTRUCTOR : IrDeclarationOriginImpl("STATIC_INLINE_CLASS_CONSTRUCTOR") val GENERATED_MULTI_FIELD_VALUE_CLASS_PARAMETER by IrDeclarationOriginImpl
object STATIC_MULTI_FIELD_VALUE_CLASS_CONSTRUCTOR : IrDeclarationOriginImpl("STATIC_MULTI_FIELD_VALUE_CLASS_CONSTRUCTOR") val TEMPORARY_MULTI_FIELD_VALUE_CLASS_PARAMETER by IrDeclarationOriginImpl
object GENERATED_ASSERTION_ENABLED_FIELD : IrDeclarationOriginImpl("GENERATED_ASSERTION_ENABLED_FIELD", isSynthetic = true) val TEMPORARY_MULTI_FIELD_VALUE_CLASS_VARIABLE by IrDeclarationOriginImpl
object GENERATED_MULTI_FIELD_VALUE_CLASS_PARAMETER : IrDeclarationOriginImpl("GENERATED_MULTI_FIELD_VALUE_CLASS_PARAMETER") val MULTI_FIELD_VALUE_CLASS_REPRESENTATION_VARIABLE by IrDeclarationOriginImpl
object TEMPORARY_MULTI_FIELD_VALUE_CLASS_PARAMETER : IrDeclarationOriginImpl("TEMPORARY_MULTI_FIELD_VALUE_CLASS_PARAMETER") val GENERATED_EXTENDED_MAIN by IrDeclarationOriginImpl.Synthetic
object TEMPORARY_MULTI_FIELD_VALUE_CLASS_VARIABLE : IrDeclarationOriginImpl("TEMPORARY_MULTI_FIELD_VALUE_CLASS_VARIABLE") val SUSPEND_IMPL_STATIC_FUNCTION by IrDeclarationOriginImpl.Synthetic
object MULTI_FIELD_VALUE_CLASS_REPRESENTATION_VARIABLE : IrDeclarationOriginImpl("MULTI_FIELD_VALUE_CLASS_REPRESENTATION_VARIABLE") val INTERFACE_COMPANION_PRIVATE_INSTANCE by IrDeclarationOriginImpl.Synthetic
object GENERATED_EXTENDED_MAIN : IrDeclarationOriginImpl("GENERATED_EXTENDED_MAIN", isSynthetic = true) val POLYMORPHIC_SIGNATURE_INSTANTIATION by IrDeclarationOriginImpl.Synthetic
object SUSPEND_IMPL_STATIC_FUNCTION : IrDeclarationOriginImpl("SUSPEND_IMPL_STATIC_FUNCTION", isSynthetic = true) val ENUM_CONSTRUCTOR_SYNTHETIC_PARAMETER by IrDeclarationOriginImpl.Synthetic
object INTERFACE_COMPANION_PRIVATE_INSTANCE : IrDeclarationOriginImpl("INTERFACE_COMPANION_PRIVATE_INSTANCE", isSynthetic = true) val OBJECT_SUPER_CONSTRUCTOR_PARAMETER by IrDeclarationOriginImpl.Synthetic
object POLYMORPHIC_SIGNATURE_INSTANTIATION : IrDeclarationOriginImpl("POLYMORPHIC_SIGNATURE_INSTANTIATION", isSynthetic = true) val CONTINUATION_CLASS by IrDeclarationOriginImpl
object ENUM_CONSTRUCTOR_SYNTHETIC_PARAMETER : IrDeclarationOriginImpl("ENUM_CONSTRUCTOR_SYNTHETIC_PARAMETER", isSynthetic = true) val SUSPEND_LAMBDA by IrDeclarationOriginImpl
object OBJECT_SUPER_CONSTRUCTOR_PARAMETER : IrDeclarationOriginImpl("OBJECT_SUPER_CONSTRUCTOR_PARAMETER", isSynthetic = true) val FOR_INLINE_STATE_MACHINE_TEMPLATE by IrDeclarationOriginImpl
object CONTINUATION_CLASS : IrDeclarationOriginImpl("CONTINUATION_CLASS") val FOR_INLINE_STATE_MACHINE_TEMPLATE_CAPTURES_CROSSINLINE by IrDeclarationOriginImpl
object SUSPEND_LAMBDA : IrDeclarationOriginImpl("SUSPEND_LAMBDA") val CONTINUATION_CLASS_RESULT_FIELD by IrDeclarationOriginImpl.Synthetic
object FOR_INLINE_STATE_MACHINE_TEMPLATE : IrDeclarationOriginImpl("FOR_INLINE_TEMPLATE") val COMPANION_PROPERTY_BACKING_FIELD by IrDeclarationOriginImpl
object FOR_INLINE_STATE_MACHINE_TEMPLATE_CAPTURES_CROSSINLINE : IrDeclarationOriginImpl("FOR_INLINE_TEMPLATE_CROSSINLINE") val FIELD_FOR_STATIC_CALLABLE_REFERENCE_INSTANCE by IrDeclarationOriginImpl
object CONTINUATION_CLASS_RESULT_FIELD: IrDeclarationOriginImpl("CONTINUATION_CLASS_RESULT_FIELD", isSynthetic = true) val ABSTRACT_BRIDGE_STUB by IrDeclarationOriginImpl
object COMPANION_PROPERTY_BACKING_FIELD : IrDeclarationOriginImpl("COMPANION_PROPERTY_BACKING_FIELD") val INVOKEDYNAMIC_CALL_TARGET by IrDeclarationOriginImpl
object FIELD_FOR_STATIC_CALLABLE_REFERENCE_INSTANCE : IrDeclarationOriginImpl("FIELD_FOR_STATIC_CALLABLE_REFERENCE_INSTANCE") val INLINE_LAMBDA by IrDeclarationOriginImpl
object ABSTRACT_BRIDGE_STUB : IrDeclarationOriginImpl("ABSTRACT_BRIDGE_STUB") val PROXY_FUN_FOR_METAFACTORY by IrDeclarationOriginImpl
object INVOKEDYNAMIC_CALL_TARGET : IrDeclarationOriginImpl("INVOKEDYNAMIC_CALL_TARGET") val SYNTHETIC_PROXY_FUN_FOR_METAFACTORY by IrDeclarationOriginImpl.Synthetic
object INLINE_LAMBDA : IrDeclarationOriginImpl("INLINE_LAMBDA") val DESERIALIZE_LAMBDA_FUN by IrDeclarationOriginImpl.Synthetic
object PROXY_FUN_FOR_METAFACTORY : IrDeclarationOriginImpl("PROXY_FUN_FOR_METAFACTORY")
object SYNTHETIC_PROXY_FUN_FOR_METAFACTORY : IrDeclarationOriginImpl("SYNTHETIC_PROXY_FUN_FOR_METAFACTORY", isSynthetic = true)
object DESERIALIZE_LAMBDA_FUN : IrDeclarationOriginImpl("DESERIALIZE_LAMBDA_FUN", isSynthetic = true)
} }
@@ -0,0 +1,18 @@
/*
* Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/
package org.jetbrains.kotlin.backend.jvm
import org.jetbrains.kotlin.ir.expressions.IrStatementOriginImpl
object JvmLoweredStatementOrigin {
val DEFAULT_STUB_CALL_TO_IMPLEMENTATION by IrStatementOriginImpl
val DO_WHILE_COUNTER_LOOP by IrStatementOriginImpl
val INLINE_LAMBDA by IrStatementOriginImpl
val FAKE_CONTINUATION by IrStatementOriginImpl
val FOLDED_SAFE_CALL by IrStatementOriginImpl
val FOLDED_ELVIS by IrStatementOriginImpl
}
@@ -387,8 +387,7 @@ class MemoizedMultiFieldValueClassReplacements(
private val IrProperty.backingFieldIfNotToRemove get() = backingField?.takeUnless { it in getFieldsToRemove(this.parentAsClass) } private val IrProperty.backingFieldIfNotToRemove get() = backingField?.takeUnless { it in getFieldsToRemove(this.parentAsClass) }
@Suppress("ClassName") private val FLATTENED_NOTHING_DEFAULT_VALUE by IrStatementOriginImpl
private object FLATTENED_NOTHING_DEFAULT_VALUE : IrStatementOriginImpl("FLATTENED_NOTHING_DEFAULT_VALUE")
fun mapFunctionMfvcStructures( fun mapFunctionMfvcStructures(
irBuilder: IrBlockBuilder, irBuilder: IrBlockBuilder,
@@ -1,18 +0,0 @@
/*
* Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/
package org.jetbrains.kotlin.backend.jvm
import org.jetbrains.kotlin.ir.expressions.IrStatementOriginImpl
interface JvmLoweredStatementOrigin {
object DEFAULT_STUB_CALL_TO_IMPLEMENTATION : IrStatementOriginImpl("DEFAULT_STUB_CALL_TO_IMPLEMENTATION")
object DO_WHILE_COUNTER_LOOP: IrStatementOriginImpl("DO_WHILE_COUNTER_LOOP")
object INLINE_LAMBDA : IrStatementOriginImpl("INLINE_LAMBDA")
object FAKE_CONTINUATION : IrStatementOriginImpl("FAKE_CONTINUATION")
object FOLDED_SAFE_CALL : IrStatementOriginImpl("FOLDED_SAFE_CALL")
object FOLDED_ELVIS : IrStatementOriginImpl("FOLDED_ELVIS")
}
@@ -310,5 +310,7 @@ internal class WasmPropertyReferenceLowering(val context: WasmBackendContext) :
return type.classifier == expectedClass 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")
}
} }
@@ -23,7 +23,7 @@ import org.jetbrains.kotlin.ir.util.isElseBranch
import org.jetbrains.kotlin.ir.visitors.transformChildrenVoid import org.jetbrains.kotlin.ir.visitors.transformChildrenVoid
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
private object OPTIMISED_WHEN_SUBJECT : IrDeclarationOriginImpl("OPTIMISED_WHEN_SUBJECT") private val OPTIMISED_WHEN_SUBJECT by IrDeclarationOriginImpl
class WasmStringSwitchOptimizerLowering( class WasmStringSwitchOptimizerLowering(
private val context: WasmBackendContext private val context: WasmBackendContext
@@ -26,8 +26,8 @@ import org.jetbrains.kotlin.ir.types.*
import org.jetbrains.kotlin.ir.util.* import org.jetbrains.kotlin.ir.util.*
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
internal val TEMP_CLASS_FOR_INTERPRETER = object : IrDeclarationOriginImpl("TEMP_CLASS_FOR_INTERPRETER") {} internal val TEMP_CLASS_FOR_INTERPRETER = IrDeclarationOriginImpl("TEMP_CLASS_FOR_INTERPRETER")
internal val TEMP_FUNCTION_FOR_INTERPRETER = object : IrDeclarationOriginImpl("TEMP_FUNCTION_FOR_INTERPRETER") {} internal val TEMP_FUNCTION_FOR_INTERPRETER = IrDeclarationOriginImpl("TEMP_FUNCTION_FOR_INTERPRETER")
@Deprecated("Please migrate to `org.jetbrains.kotlin.ir.util.toIrConst`", level = DeprecationLevel.HIDDEN) @Deprecated("Please migrate to `org.jetbrains.kotlin.ir.util.toIrConst`", level = DeprecationLevel.HIDDEN)
fun Any?.toIrConst(irType: IrType, startOffset: Int = SYNTHETIC_OFFSET, endOffset: Int = SYNTHETIC_OFFSET): IrConst<*> = fun Any?.toIrConst(irType: IrType, startOffset: Int = SYNTHETIC_OFFSET, endOffset: Int = SYNTHETIC_OFFSET): IrConst<*> =
@@ -77,8 +77,8 @@ abstract class IrAbstractDescriptorBasedFunctionFactory {
} }
companion object { companion object {
val classOrigin = object : IrDeclarationOriginImpl("FUNCTION_INTERFACE_CLASS") {} val classOrigin = IrDeclarationOriginImpl("FUNCTION_INTERFACE_CLASS")
val memberOrigin = object : IrDeclarationOriginImpl("FUNCTION_INTERFACE_MEMBER") {} val memberOrigin = IrDeclarationOriginImpl("FUNCTION_INTERFACE_MEMBER")
const val offset = SYNTHETIC_OFFSET const val offset = SYNTHETIC_OFFSET
internal fun functionClassName(isK: Boolean, isSuspend: Boolean, arity: Int): String = internal fun functionClassName(isK: Boolean, isSuspend: Boolean, arity: Int): String =
@@ -215,7 +215,7 @@ abstract class IrBuiltIns {
companion object { companion object {
val KOTLIN_INTERNAL_IR_FQN = FqName("kotlin.internal.ir") val KOTLIN_INTERNAL_IR_FQN = FqName("kotlin.internal.ir")
val BUILTIN_OPERATOR = object : IrDeclarationOriginImpl("OPERATOR") {} val BUILTIN_OPERATOR = IrDeclarationOriginImpl("OPERATOR")
} }
} }
@@ -6,86 +6,96 @@
package org.jetbrains.kotlin.ir.declarations package org.jetbrains.kotlin.ir.declarations
import org.jetbrains.kotlin.GeneratedDeclarationKey import org.jetbrains.kotlin.GeneratedDeclarationKey
import org.jetbrains.kotlin.utils.DummyDelegate
import kotlin.properties.PropertyDelegateProvider
import kotlin.properties.ReadOnlyProperty
import kotlin.reflect.KProperty
interface IrDeclarationOrigin { interface IrDeclarationOrigin {
object DEFINED : IrDeclarationOriginImpl("DEFINED") val name: String
object FAKE_OVERRIDE : IrDeclarationOriginImpl("FAKE_OVERRIDE") val isSynthetic: Boolean
object FOR_LOOP_ITERATOR : IrDeclarationOriginImpl("FOR_LOOP_ITERATOR") get() = false
object FOR_LOOP_VARIABLE : IrDeclarationOriginImpl("FOR_LOOP_VARIABLE")
object FOR_LOOP_IMPLICIT_VARIABLE : IrDeclarationOriginImpl("FOR_LOOP_IMPLICIT_VARIABLE")
object PROPERTY_BACKING_FIELD : IrDeclarationOriginImpl("PROPERTY_BACKING_FIELD")
object DEFAULT_PROPERTY_ACCESSOR : IrDeclarationOriginImpl("DEFAULT_PROPERTY_ACCESSOR")
object DELEGATE : IrDeclarationOriginImpl("DELEGATE", isSynthetic = true)
object PROPERTY_DELEGATE : IrDeclarationOriginImpl("PROPERTY_DELEGATE")
object DELEGATED_PROPERTY_ACCESSOR : IrDeclarationOriginImpl("DELEGATED_PROPERTY_ACCESSOR")
object DELEGATED_MEMBER : IrDeclarationOriginImpl("DELEGATED_MEMBER")
object ENUM_CLASS_SPECIAL_MEMBER : IrDeclarationOriginImpl("ENUM_CLASS_SPECIAL_MEMBER")
object FUNCTION_FOR_DEFAULT_PARAMETER : IrDeclarationOriginImpl("FUNCTION_FOR_DEFAULT_PARAMETER", isSynthetic = true)
object MASK_FOR_DEFAULT_FUNCTION : IrDeclarationOriginImpl("MASK_FOR_DEFAULT_FUNCTION", isSynthetic = true)
object DEFAULT_CONSTRUCTOR_MARKER : IrDeclarationOriginImpl("DEFAULT_CONSTRUCTOR_MARKER", isSynthetic = true)
object METHOD_HANDLER_IN_DEFAULT_FUNCTION : IrDeclarationOriginImpl("METHOD_HANDLER_IN_DEFAULT_FUNCTION", isSynthetic = true)
object MOVED_DISPATCH_RECEIVER : IrDeclarationOriginImpl("MOVED_DISPATCH_RECEIVER")
object MOVED_EXTENSION_RECEIVER : IrDeclarationOriginImpl("MOVED_EXTENSION_RECEIVER")
object MOVED_CONTEXT_RECEIVER : IrDeclarationOriginImpl("MOVED_CONTEXT_RECEIVER")
object FILE_CLASS : IrDeclarationOriginImpl("FILE_CLASS") companion object {
object SYNTHETIC_FILE_CLASS : IrDeclarationOriginImpl("SYNTHETIC_FILE_CLASS", isSynthetic = true) val DEFINED by IrDeclarationOriginImpl
object JVM_MULTIFILE_CLASS : IrDeclarationOriginImpl("JVM_MULTIFILE_CLASS") val FAKE_OVERRIDE by IrDeclarationOriginImpl
object ERROR_CLASS : IrDeclarationOriginImpl("ERROR_CLASS") val FOR_LOOP_ITERATOR by IrDeclarationOriginImpl
val FOR_LOOP_VARIABLE by IrDeclarationOriginImpl
val FOR_LOOP_IMPLICIT_VARIABLE by IrDeclarationOriginImpl
val PROPERTY_BACKING_FIELD by IrDeclarationOriginImpl
val DEFAULT_PROPERTY_ACCESSOR by IrDeclarationOriginImpl
val DELEGATE by IrDeclarationOriginImpl.Synthetic
val PROPERTY_DELEGATE by IrDeclarationOriginImpl
val DELEGATED_PROPERTY_ACCESSOR by IrDeclarationOriginImpl
val DELEGATED_MEMBER by IrDeclarationOriginImpl
val ENUM_CLASS_SPECIAL_MEMBER by IrDeclarationOriginImpl
val FUNCTION_FOR_DEFAULT_PARAMETER by IrDeclarationOriginImpl.Synthetic
val MASK_FOR_DEFAULT_FUNCTION by IrDeclarationOriginImpl.Synthetic
val DEFAULT_CONSTRUCTOR_MARKER by IrDeclarationOriginImpl.Synthetic
val METHOD_HANDLER_IN_DEFAULT_FUNCTION by IrDeclarationOriginImpl.Synthetic
val MOVED_DISPATCH_RECEIVER by IrDeclarationOriginImpl
val MOVED_EXTENSION_RECEIVER by IrDeclarationOriginImpl
val MOVED_CONTEXT_RECEIVER by IrDeclarationOriginImpl
object SCRIPT_CLASS : IrDeclarationOriginImpl("SCRIPT_CLASS") val FILE_CLASS by IrDeclarationOriginImpl
object SCRIPT_THIS_RECEIVER : IrDeclarationOriginImpl("SCRIPT_THIS_RECEIVER") val SYNTHETIC_FILE_CLASS by IrDeclarationOriginImpl.Synthetic
object SCRIPT_STATEMENT : IrDeclarationOriginImpl("SCRIPT_STATEMENT") val JVM_MULTIFILE_CLASS by IrDeclarationOriginImpl
object SCRIPT_EARLIER_SCRIPTS : IrDeclarationOriginImpl("SCRIPT_EARLIER_SCRIPTS") val ERROR_CLASS by IrDeclarationOriginImpl
object SCRIPT_CALL_PARAMETER : IrDeclarationOriginImpl("SCRIPT_CALL_PARAMETER")
object SCRIPT_IMPLICIT_RECEIVER : IrDeclarationOriginImpl("SCRIPT_IMPLICIT_RECEIVER")
object SCRIPT_PROVIDED_PROPERTY : IrDeclarationOriginImpl("SCRIPT_PROVIDED_PROPERTY")
object SCRIPT_RESULT_PROPERTY : IrDeclarationOriginImpl("SCRIPT_RESULT_PROPERTY")
object GENERATED_DATA_CLASS_MEMBER : IrDeclarationOriginImpl("GENERATED_DATA_CLASS_MEMBER")
object GENERATED_SINGLE_FIELD_VALUE_CLASS_MEMBER : IrDeclarationOriginImpl("GENERATED_SINGLE_FIELD_VALUE_CLASS_MEMBER")
object GENERATED_MULTI_FIELD_VALUE_CLASS_MEMBER : IrDeclarationOriginImpl("GENERATED_MULTI_FIELD_VALUE_CLASS_MEMBER")
object LOCAL_FUNCTION : IrDeclarationOriginImpl("LOCAL_FUNCTION")
object LOCAL_FUNCTION_FOR_LAMBDA : IrDeclarationOriginImpl("LOCAL_FUNCTION_FOR_LAMBDA")
object CATCH_PARAMETER : IrDeclarationOriginImpl("CATCH_PARAMETER")
object UNDERSCORE_PARAMETER : IrDeclarationOriginImpl("UNDERSCORE_PARAMETER")
object DESTRUCTURED_OBJECT_PARAMETER : IrDeclarationOriginImpl("DESTRUCTURED_OBJECT_PARAMETER")
object INSTANCE_RECEIVER : IrDeclarationOriginImpl("INSTANCE_RECEIVER")
object PRIMARY_CONSTRUCTOR_PARAMETER : IrDeclarationOriginImpl("PRIMARY_CONSTRUCTOR_PARAMETER")
object IR_TEMPORARY_VARIABLE : IrDeclarationOriginImpl("IR_TEMPORARY_VARIABLE")
object IR_TEMPORARY_VARIABLE_FOR_INLINED_PARAMETER : IrDeclarationOriginImpl("IR_TEMPORARY_VARIABLE_FOR_INLINED_PARAMETER")
object IR_TEMPORARY_VARIABLE_FOR_INLINED_EXTENSION_RECEIVER : IrDeclarationOriginImpl("IR_TEMPORARY_VARIABLE_FOR_INLINED_EXTENSION_RECEIVER")
object IR_EXTERNAL_DECLARATION_STUB : IrDeclarationOriginImpl("IR_EXTERNAL_DECLARATION_STUB")
object IR_EXTERNAL_JAVA_DECLARATION_STUB : IrDeclarationOriginImpl("IR_EXTERNAL_JAVA_DECLARATION_STUB")
object IR_BUILTINS_STUB : IrDeclarationOriginImpl("IR_BUILTINS_STUB")
object BRIDGE : IrDeclarationOriginImpl("BRIDGE", isSynthetic = true)
object BRIDGE_SPECIAL : IrDeclarationOriginImpl("BRIDGE_SPECIAL")
object GENERATED_SETTER_GETTER : IrDeclarationOriginImpl("GENERATED_SETTER_GETTER", isSynthetic = true)
object FIELD_FOR_ENUM_ENTRY : IrDeclarationOriginImpl("FIELD_FOR_ENUM_ENTRY") val SCRIPT_CLASS by IrDeclarationOriginImpl
object SYNTHETIC_HELPER_FOR_ENUM_VALUES : IrDeclarationOriginImpl("SYNTHETIC_HELPER_FOR_ENUM_VALUES", isSynthetic = true) val SCRIPT_THIS_RECEIVER by IrDeclarationOriginImpl
object SYNTHETIC_HELPER_FOR_ENUM_ENTRIES : IrDeclarationOriginImpl("SYNTHETIC_HELPER_FOR_ENUM_ENTRIES", isSynthetic = true) val SCRIPT_STATEMENT by IrDeclarationOriginImpl
object FIELD_FOR_ENUM_VALUES : IrDeclarationOriginImpl("FIELD_FOR_ENUM_VALUES", isSynthetic = true) val SCRIPT_EARLIER_SCRIPTS by IrDeclarationOriginImpl
object FIELD_FOR_ENUM_ENTRIES: IrDeclarationOriginImpl("FIELD_FOR_ENUM_ENTRIES", isSynthetic = true) val SCRIPT_CALL_PARAMETER by IrDeclarationOriginImpl
object PROPERTY_FOR_ENUM_ENTRIES: IrDeclarationOriginImpl("PROPERTY_FOR_ENUM_ENTRIES", isSynthetic = false) val SCRIPT_IMPLICIT_RECEIVER by IrDeclarationOriginImpl
object FIELD_FOR_OBJECT_INSTANCE : IrDeclarationOriginImpl("FIELD_FOR_OBJECT_INSTANCE") val SCRIPT_PROVIDED_PROPERTY by IrDeclarationOriginImpl
object FIELD_FOR_CLASS_CONTEXT_RECEIVER : IrDeclarationOriginImpl("FIELD_FOR_CLASS_CONTEXT_RECEIVER", isSynthetic = true) val SCRIPT_RESULT_PROPERTY by IrDeclarationOriginImpl
val GENERATED_DATA_CLASS_MEMBER by IrDeclarationOriginImpl
val GENERATED_SINGLE_FIELD_VALUE_CLASS_MEMBER by IrDeclarationOriginImpl
val GENERATED_MULTI_FIELD_VALUE_CLASS_MEMBER by IrDeclarationOriginImpl
val LOCAL_FUNCTION by IrDeclarationOriginImpl
val LOCAL_FUNCTION_FOR_LAMBDA by IrDeclarationOriginImpl
val CATCH_PARAMETER by IrDeclarationOriginImpl
val UNDERSCORE_PARAMETER by IrDeclarationOriginImpl
val DESTRUCTURED_OBJECT_PARAMETER by IrDeclarationOriginImpl
val INSTANCE_RECEIVER by IrDeclarationOriginImpl
val PRIMARY_CONSTRUCTOR_PARAMETER by IrDeclarationOriginImpl
val IR_TEMPORARY_VARIABLE by IrDeclarationOriginImpl
val IR_TEMPORARY_VARIABLE_FOR_INLINED_PARAMETER by IrDeclarationOriginImpl
val IR_TEMPORARY_VARIABLE_FOR_INLINED_EXTENSION_RECEIVER by IrDeclarationOriginImpl
val IR_EXTERNAL_DECLARATION_STUB by IrDeclarationOriginImpl
val IR_EXTERNAL_JAVA_DECLARATION_STUB by IrDeclarationOriginImpl
val IR_BUILTINS_STUB by IrDeclarationOriginImpl
val BRIDGE by IrDeclarationOriginImpl.Synthetic
val BRIDGE_SPECIAL by IrDeclarationOriginImpl
val GENERATED_SETTER_GETTER by IrDeclarationOriginImpl.Synthetic
object ADAPTER_FOR_CALLABLE_REFERENCE : IrDeclarationOriginImpl("ADAPTER_FOR_CALLABLE_REFERENCE", isSynthetic = true) val FIELD_FOR_ENUM_ENTRY by IrDeclarationOriginImpl
object ADAPTER_PARAMETER_FOR_CALLABLE_REFERENCE : IrDeclarationOriginImpl("ADAPTER_PARAMETER_FOR_CALLABLE_REFERENCE") val SYNTHETIC_HELPER_FOR_ENUM_VALUES by IrDeclarationOriginImpl.Synthetic
object ADAPTER_FOR_SUSPEND_CONVERSION : IrDeclarationOriginImpl("ADAPTER_FOR_SUSPEND_CONVERSION", isSynthetic = true) val SYNTHETIC_HELPER_FOR_ENUM_ENTRIES by IrDeclarationOriginImpl.Synthetic
object ADAPTER_PARAMETER_FOR_SUSPEND_CONVERSION : IrDeclarationOriginImpl("ADAPTER_PARAMETER_FOR_SUSPEND_CONVERSION") val FIELD_FOR_ENUM_VALUES by IrDeclarationOriginImpl.Synthetic
object ADAPTER_FOR_FUN_INTERFACE_CONSTRUCTOR : IrDeclarationOriginImpl("ADAPTER_FOR_FUN_INTERFACE_CONSTRUCTOR", isSynthetic = true) val FIELD_FOR_ENUM_ENTRIES by IrDeclarationOriginImpl.Synthetic
val PROPERTY_FOR_ENUM_ENTRIES by IrDeclarationOriginImpl
val FIELD_FOR_OBJECT_INSTANCE by IrDeclarationOriginImpl
val FIELD_FOR_CLASS_CONTEXT_RECEIVER by IrDeclarationOriginImpl.Synthetic
object GENERATED_SAM_IMPLEMENTATION : IrDeclarationOriginImpl("GENERATED_SAM_IMPLEMENTATION") val ADAPTER_FOR_CALLABLE_REFERENCE by IrDeclarationOriginImpl.Synthetic
object SYNTHETIC_GENERATED_SAM_IMPLEMENTATION : IrDeclarationOriginImpl("SYNTHETIC_GENERATED_SAM_IMPLEMENTATION", isSynthetic = true) val ADAPTER_PARAMETER_FOR_CALLABLE_REFERENCE by IrDeclarationOriginImpl
val ADAPTER_FOR_SUSPEND_CONVERSION by IrDeclarationOriginImpl.Synthetic
val ADAPTER_PARAMETER_FOR_SUSPEND_CONVERSION by IrDeclarationOriginImpl
val ADAPTER_FOR_FUN_INTERFACE_CONSTRUCTOR by IrDeclarationOriginImpl.Synthetic
object SYNTHETIC_JAVA_PROPERTY_DELEGATE : IrDeclarationOriginImpl("SYNTHETIC_JAVA_PROPERTY_DELEGATE", isSynthetic = true) val GENERATED_SAM_IMPLEMENTATION by IrDeclarationOriginImpl
val SYNTHETIC_GENERATED_SAM_IMPLEMENTATION by IrDeclarationOriginImpl.Synthetic
object FIELD_FOR_OUTER_THIS : IrDeclarationOriginImpl("FIELD_FOR_OUTER_THIS", isSynthetic = true) val SYNTHETIC_JAVA_PROPERTY_DELEGATE by IrDeclarationOriginImpl.Synthetic
object CONTINUATION : IrDeclarationOriginImpl("CONTINUATION", isSynthetic = true)
object LOWERED_SUSPEND_FUNCTION : IrDeclarationOriginImpl("LOWERED_SUSPEND_FUNCTION", isSynthetic = true)
object SHARED_VARIABLE_IN_EVALUATOR_FRAGMENT : IrDeclarationOriginImpl("SHARED_VARIABLE_IN_EVALUATOR_FRAGMENT", isSynthetic = true) val FIELD_FOR_OUTER_THIS by IrDeclarationOriginImpl.Synthetic
val CONTINUATION by IrDeclarationOriginImpl.Synthetic
val LOWERED_SUSPEND_FUNCTION by IrDeclarationOriginImpl.Synthetic
val SHARED_VARIABLE_IN_EVALUATOR_FRAGMENT by IrDeclarationOriginImpl.Synthetic
}
/** /**
* [pluginKey] may be null if declaration with this origin was deserialized from klib * [pluginKey] may be null if declaration with this origin was deserialized from klib
@@ -103,9 +113,7 @@ interface IrDeclarationOrigin {
override val name: String override val name: String
get() = "GENERATED[${pluginId}]" get() = "GENERATED[${pluginId}]"
override fun toString(): String { override fun toString(): String = name
return name
}
override fun equals(other: Any?): Boolean { override fun equals(other: Any?): Boolean {
if (this === other) return true if (this === other) return true
@@ -113,20 +121,16 @@ interface IrDeclarationOrigin {
return pluginKey == other.pluginKey return pluginKey == other.pluginKey
} }
override fun hashCode(): Int { override fun hashCode(): Int = pluginKey.hashCode()
return pluginKey.hashCode()
}
} }
val name: String
val isSynthetic: Boolean get() = false
} }
abstract class IrDeclarationOriginImpl( class IrDeclarationOriginImpl(
override val name: String, override val name: String,
override val isSynthetic: Boolean = false override val isSynthetic: Boolean = false
) : IrDeclarationOrigin { ) : IrDeclarationOrigin, ReadOnlyProperty<Any?, IrDeclarationOriginImpl> {
override fun toString(): String = name override fun toString(): String = name
override fun getValue(thisRef: Any?, property: KProperty<*>): IrDeclarationOriginImpl = this
override fun equals(other: Any?): Boolean { override fun equals(other: Any?): Boolean {
if (this === other) return true if (this === other) return true
@@ -137,7 +141,15 @@ abstract class IrDeclarationOriginImpl(
return true return true
} }
override fun hashCode(): Int { override fun hashCode(): Int = name.hashCode()
return name.hashCode()
companion object : PropertyDelegateProvider<Any?, ReadOnlyProperty<Any?, IrDeclarationOriginImpl>> {
override fun provideDelegate(thisRef: Any?, property: KProperty<*>): ReadOnlyProperty<Any?, IrDeclarationOriginImpl> =
IrDeclarationOriginImpl(property.name)
}
object Synthetic : PropertyDelegateProvider<Any?, ReadOnlyProperty<Any?, IrDeclarationOriginImpl>> {
override fun provideDelegate(thisRef: Any?, property: KProperty<*>): ReadOnlyProperty<Any?, IrDeclarationOriginImpl> =
IrDeclarationOriginImpl(property.name, isSynthetic = true)
} }
} }
@@ -18,8 +18,8 @@ import org.jetbrains.kotlin.ir.types.IrType
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.utils.SmartList import org.jetbrains.kotlin.utils.SmartList
private val SCRIPT_ORIGIN = object : IrDeclarationOriginImpl("SCRIPT") {} private val SCRIPT_ORIGIN = IrDeclarationOriginImpl("SCRIPT")
val SCRIPT_K2_ORIGIN = object : IrDeclarationOriginImpl("SCRIPT_K2") {} val SCRIPT_K2_ORIGIN = IrDeclarationOriginImpl("SCRIPT_K2")
class IrScriptImpl( class IrScriptImpl(
override val symbol: IrScriptSymbol, override val symbol: IrScriptSymbol,
@@ -5,96 +5,113 @@
package org.jetbrains.kotlin.ir.expressions package org.jetbrains.kotlin.ir.expressions
abstract class IrStatementOriginImpl(val debugName: String) : IrStatementOrigin { import kotlin.properties.PropertyDelegateProvider
import kotlin.properties.ReadOnlyProperty
import kotlin.reflect.KProperty
class IrStatementOriginImpl(override val debugName: String) : IrStatementOrigin, ReadOnlyProperty<Any?, IrStatementOriginImpl> {
override fun getValue(thisRef: Any?, property: KProperty<*>): IrStatementOriginImpl = this
override fun toString(): String = debugName override fun toString(): String = debugName
companion object : PropertyDelegateProvider<Any?, ReadOnlyProperty<Any?, IrStatementOriginImpl>> {
override fun provideDelegate(thisRef: Any?, property: KProperty<*>): ReadOnlyProperty<Any?, IrStatementOriginImpl> =
IrStatementOriginImpl(property.name)
}
} }
interface IrStatementOrigin { interface IrStatementOrigin {
object SAFE_CALL : IrStatementOriginImpl("SAFE_CALL") val debugName: String
object UMINUS : IrStatementOriginImpl("UMINUS") companion object {
object UPLUS : IrStatementOriginImpl("UPLUS") val SAFE_CALL by IrStatementOriginImpl
object EXCL : IrStatementOriginImpl("EXCL")
object EXCLEXCL : IrStatementOriginImpl("EXCLEXCL")
object ELVIS : IrStatementOriginImpl("ELVIS") val UMINUS by IrStatementOriginImpl
val UPLUS by IrStatementOriginImpl
val EXCL by IrStatementOriginImpl
val EXCLEXCL by IrStatementOriginImpl
object LT : IrStatementOriginImpl("LT") val ELVIS by IrStatementOriginImpl
object GT : IrStatementOriginImpl("GT")
object LTEQ : IrStatementOriginImpl("LTEQ")
object GTEQ : IrStatementOriginImpl("GTEQ")
object EQEQ : IrStatementOriginImpl("EQEQ") val LT by IrStatementOriginImpl
object EQEQEQ : IrStatementOriginImpl("EQEQEQ") val GT by IrStatementOriginImpl
object EXCLEQ : IrStatementOriginImpl("EXCLEQ") val LTEQ by IrStatementOriginImpl
object EXCLEQEQ : IrStatementOriginImpl("EXCLEQEQ") val GTEQ by IrStatementOriginImpl
object IN : IrStatementOriginImpl("IN") val EQEQ by IrStatementOriginImpl
object NOT_IN : IrStatementOriginImpl("NOT_IN") val EQEQEQ by IrStatementOriginImpl
object ANDAND : IrStatementOriginImpl("ANDAND") val EXCLEQ by IrStatementOriginImpl
object OROR : IrStatementOriginImpl("OROR") val EXCLEQEQ by IrStatementOriginImpl
object PLUS : IrStatementOriginImpl("PLUS") val IN by IrStatementOriginImpl
object MINUS : IrStatementOriginImpl("MINUS") val NOT_IN by IrStatementOriginImpl
object MUL : IrStatementOriginImpl("MUL") val ANDAND by IrStatementOriginImpl
object DIV : IrStatementOriginImpl("DIV") val OROR by IrStatementOriginImpl
object PERC : IrStatementOriginImpl("PERC")
object RANGE : IrStatementOriginImpl("RANGE")
object RANGE_UNTIL : IrStatementOriginImpl("RANGE_UNTIL")
object INVOKE : IrStatementOriginImpl("INVOKE") val PLUS by IrStatementOriginImpl
object VARIABLE_AS_FUNCTION : IrStatementOriginImpl("VARIABLE_AS_FUNCTION") val MINUS by IrStatementOriginImpl
object GET_ARRAY_ELEMENT : IrStatementOriginImpl("GET_ARRAY_ELEMENT") val MUL by IrStatementOriginImpl
val DIV by IrStatementOriginImpl
val PERC by IrStatementOriginImpl
val RANGE by IrStatementOriginImpl
val RANGE_UNTIL by IrStatementOriginImpl
object PREFIX_INCR : IrStatementOriginImpl("PREFIX_INCR") val INVOKE by IrStatementOriginImpl
object PREFIX_DECR : IrStatementOriginImpl("PREFIX_DECR") val VARIABLE_AS_FUNCTION by IrStatementOriginImpl
object POSTFIX_INCR : IrStatementOriginImpl("POSTFIX_INCR") val GET_ARRAY_ELEMENT by IrStatementOriginImpl
object POSTFIX_DECR : IrStatementOriginImpl("POSTFIX_DECR")
object EQ : IrStatementOriginImpl("EQ") val PREFIX_INCR by IrStatementOriginImpl
object PLUSEQ : IrStatementOriginImpl("PLUSEQ") val PREFIX_DECR by IrStatementOriginImpl
object MINUSEQ : IrStatementOriginImpl("MINUSEQ") val POSTFIX_INCR by IrStatementOriginImpl
object MULTEQ : IrStatementOriginImpl("MULTEQ") val POSTFIX_DECR by IrStatementOriginImpl
object DIVEQ : IrStatementOriginImpl("DIVEQ")
object PERCEQ : IrStatementOriginImpl("PERCEQ")
object ARGUMENTS_REORDERING_FOR_CALL : IrStatementOriginImpl("ARGUMENTS_REORDERING_FOR_CALL") val EQ by IrStatementOriginImpl
object DESTRUCTURING_DECLARATION : IrStatementOriginImpl("DESTRUCTURING_DECLARATION") val PLUSEQ by IrStatementOriginImpl
val MINUSEQ by IrStatementOriginImpl
val MULTEQ by IrStatementOriginImpl
val DIVEQ by IrStatementOriginImpl
val PERCEQ by IrStatementOriginImpl
object GET_PROPERTY : IrStatementOriginImpl("GET_PROPERTY") val ARGUMENTS_REORDERING_FOR_CALL by IrStatementOriginImpl
object GET_LOCAL_PROPERTY : IrStatementOriginImpl("GET_LOCAL_PROPERTY") val DESTRUCTURING_DECLARATION by IrStatementOriginImpl
object IF : IrStatementOriginImpl("IF") val GET_PROPERTY by IrStatementOriginImpl
object WHEN : IrStatementOriginImpl("WHEN") val GET_LOCAL_PROPERTY by IrStatementOriginImpl
object WHEN_COMMA : IrStatementOriginImpl("WHEN_COMMA")
object WHILE_LOOP : IrStatementOriginImpl("WHILE_LOOP")
object DO_WHILE_LOOP : IrStatementOriginImpl("DO_WHILE_LOOP")
object FOR_LOOP : IrStatementOriginImpl("FOR_LOOP")
object FOR_LOOP_ITERATOR : IrStatementOriginImpl("FOR_LOOP_ITERATOR")
object FOR_LOOP_INNER_WHILE : IrStatementOriginImpl("FOR_LOOP_INNER_WHILE")
object FOR_LOOP_HAS_NEXT : IrStatementOriginImpl("FOR_LOOP_HAS_NEXT")
object FOR_LOOP_NEXT : IrStatementOriginImpl("FOR_LOOP_NEXT")
object LAMBDA : IrStatementOriginImpl("LAMBDA") val IF by IrStatementOriginImpl
object DEFAULT_VALUE : IrStatementOriginImpl("DEFAULT_VALUE") val WHEN by IrStatementOriginImpl
object ANONYMOUS_FUNCTION : IrStatementOriginImpl("ANONYMOUS_FUNCTION") val WHEN_COMMA by IrStatementOriginImpl
object OBJECT_LITERAL : IrStatementOriginImpl("OBJECT_LITERAL") val WHILE_LOOP by IrStatementOriginImpl
object ADAPTED_FUNCTION_REFERENCE : IrStatementOriginImpl("ADAPTED_FUNCTION_REFERENCE") val DO_WHILE_LOOP by IrStatementOriginImpl
object SUSPEND_CONVERSION : IrStatementOriginImpl("SUSPEND_CONVERSION") val FOR_LOOP by IrStatementOriginImpl
object FUN_INTERFACE_CONSTRUCTOR_REFERENCE : IrStatementOriginImpl("FUN_INTERFACE_CONSTRUCTOR_REFERENCE") val FOR_LOOP_ITERATOR by IrStatementOriginImpl
val FOR_LOOP_INNER_WHILE by IrStatementOriginImpl
val FOR_LOOP_HAS_NEXT by IrStatementOriginImpl
val FOR_LOOP_NEXT by IrStatementOriginImpl
object INITIALIZE_PROPERTY_FROM_PARAMETER : IrStatementOriginImpl("INITIALIZE_PROPERTY_FROM_PARAMETER") val LAMBDA by IrStatementOriginImpl
object INITIALIZE_FIELD : IrStatementOriginImpl("INITIALIZE_FIELD") val DEFAULT_VALUE by IrStatementOriginImpl
val ANONYMOUS_FUNCTION by IrStatementOriginImpl
val OBJECT_LITERAL by IrStatementOriginImpl
val ADAPTED_FUNCTION_REFERENCE by IrStatementOriginImpl
val SUSPEND_CONVERSION by IrStatementOriginImpl
val FUN_INTERFACE_CONSTRUCTOR_REFERENCE by IrStatementOriginImpl
object PROPERTY_REFERENCE_FOR_DELEGATE : IrStatementOriginImpl("PROPERTY_REFERENCE_FOR_DELEGATE") val INITIALIZE_PROPERTY_FROM_PARAMETER by IrStatementOriginImpl
val INITIALIZE_FIELD by IrStatementOriginImpl
object BRIDGE_DELEGATION : IrStatementOriginImpl("BRIDGE_DELEGATION") val PROPERTY_REFERENCE_FOR_DELEGATE by IrStatementOriginImpl
object SYNTHETIC_NOT_AUTOBOXED_CHECK : IrStatementOriginImpl("SYNTHETIC_NOT_AUTOBOXED_CHECK") val BRIDGE_DELEGATION by IrStatementOriginImpl
object PARTIAL_LINKAGE_RUNTIME_ERROR : IrStatementOriginImpl("PARTIAL_LINKAGE_RUNTIME_ERROR") val SYNTHETIC_NOT_AUTOBOXED_CHECK by IrStatementOriginImpl
val PARTIAL_LINKAGE_RUNTIME_ERROR by IrStatementOriginImpl
}
data class COMPONENT_N private constructor(val index: Int) : IrStatementOrigin {
override val debugName: String = "COMPONENT_$index"
data class COMPONENT_N private constructor(val index: Int) : IrStatementOriginImpl("COMPONENT_$index") {
companion object { companion object {
private val precreatedComponents = Array(32) { i -> COMPONENT_N(i + 1) } private val precreatedComponents = Array(32) { i -> COMPONENT_N(i + 1) }
@@ -14,7 +14,7 @@ import org.jetbrains.kotlin.ir.declarations.IrExternalPackageFragment
import org.jetbrains.kotlin.ir.declarations.IrFile import org.jetbrains.kotlin.ir.declarations.IrFile
import org.jetbrains.kotlin.ir.expressions.IrCall import org.jetbrains.kotlin.ir.expressions.IrCall
import org.jetbrains.kotlin.ir.expressions.IrContainerExpression import org.jetbrains.kotlin.ir.expressions.IrContainerExpression
import org.jetbrains.kotlin.ir.expressions.IrStatementOrigin.PARTIAL_LINKAGE_RUNTIME_ERROR import org.jetbrains.kotlin.ir.expressions.IrStatementOrigin.Companion.PARTIAL_LINKAGE_RUNTIME_ERROR
import org.jetbrains.kotlin.ir.util.IrMessageLogger import org.jetbrains.kotlin.ir.util.IrMessageLogger
import org.jetbrains.kotlin.ir.util.getPackageFragment import org.jetbrains.kotlin.ir.util.getPackageFragment
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
@@ -5,19 +5,26 @@
package org.jetbrains.kotlin.ir.linkage.partial package org.jetbrains.kotlin.ir.linkage.partial
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin import org.jetbrains.kotlin.ir.declarations.IrDeclarationOriginImpl
@Suppress("KDocUnresolvedReference") @Suppress("KDocUnresolvedReference")
enum class PartiallyLinkedDeclarationOrigin : IrDeclarationOrigin { object PartiallyLinkedDeclarationOrigin {
/** The unresolved (missing) declaration */ /** The unresolved (missing) declaration */
MISSING_DECLARATION, val MISSING_DECLARATION by IrDeclarationOriginImpl
/** The abstract callable member that needs to be implemented in non-abstract class */ /** The abstract callable member that needs to be implemented in non-abstract class */
UNIMPLEMENTED_ABSTRACT_CALLABLE_MEMBER, val UNIMPLEMENTED_ABSTRACT_CALLABLE_MEMBER by IrDeclarationOriginImpl
/** The callable member is not implemented and inherit several implementations from interfaces, but no implementation from class */ /** The callable member is not implemented and inherit several implementations from interfaces, but no implementation from class */
AMBIGUOUS_NON_OVERRIDDEN_CALLABLE_MEMBER, val AMBIGUOUS_NON_OVERRIDDEN_CALLABLE_MEMBER by IrDeclarationOriginImpl
/** Auxiliary declaration generated by [PartiallyLinkedIrTreePatcher] */ /** Auxiliary declaration generated by [PartiallyLinkedIrTreePatcher] */
AUXILIARY_GENERATED_DECLARATION; val AUXILIARY_GENERATED_DECLARATION by IrDeclarationOriginImpl
val entries: Set<IrDeclarationOriginImpl> = setOf(
MISSING_DECLARATION,
UNIMPLEMENTED_ABSTRACT_CALLABLE_MEMBER,
AMBIGUOUS_NON_OVERRIDDEN_CALLABLE_MEMBER,
AUXILIARY_GENERATED_DECLARATION,
)
} }
@@ -100,7 +100,7 @@ internal class PartialLinkageSupportForLoweringsImpl(
startOffset startOffset
} }
else -> if (origin is PartiallyLinkedDeclarationOrigin) { else -> if (origin in PartiallyLinkedDeclarationOrigin.entries) {
// There is no sense to take coordinates from the declaration that does not exist in the code. // There is no sense to take coordinates from the declaration that does not exist in the code.
// Let's take the coordinates of the parent. // Let's take the coordinates of the parent.
parent.startOffsetOfFirstDenotableIrElement() parent.startOffsetOfFirstDenotableIrElement()
@@ -17,7 +17,7 @@ import org.jetbrains.kotlin.ir.IrStatement
import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.declarations.*
import org.jetbrains.kotlin.ir.declarations.lazy.IrLazyDeclarationBase import org.jetbrains.kotlin.ir.declarations.lazy.IrLazyDeclarationBase
import org.jetbrains.kotlin.ir.expressions.* import org.jetbrains.kotlin.ir.expressions.*
import org.jetbrains.kotlin.ir.expressions.IrStatementOrigin.PARTIAL_LINKAGE_RUNTIME_ERROR import org.jetbrains.kotlin.ir.expressions.IrStatementOrigin.Companion.PARTIAL_LINKAGE_RUNTIME_ERROR
import org.jetbrains.kotlin.ir.expressions.impl.IrCompositeImpl import org.jetbrains.kotlin.ir.expressions.impl.IrCompositeImpl
import org.jetbrains.kotlin.ir.linkage.partial.* import org.jetbrains.kotlin.ir.linkage.partial.*
import org.jetbrains.kotlin.ir.linkage.partial.PartialLinkageCase.* import org.jetbrains.kotlin.ir.linkage.partial.PartialLinkageCase.*
@@ -457,7 +457,7 @@ internal class PartiallyLinkedIrTreePatcher(
override fun visitDeclaration(declaration: IrDeclarationBase): IrStatement { override fun visitDeclaration(declaration: IrDeclarationBase): IrStatement {
// Optimization: Don't patch expressions under generated synthetic declarations. // Optimization: Don't patch expressions under generated synthetic declarations.
return if (declaration.origin is PartiallyLinkedDeclarationOrigin) return if (declaration.origin in PartiallyLinkedDeclarationOrigin.entries)
declaration // There are neither expressions nor annotations to patch. declaration // There are neither expressions nor annotations to patch.
else { else {
declaration.filterUnusableAnnotations() declaration.filterUnusableAnnotations()
@@ -25,6 +25,7 @@ import org.jetbrains.kotlin.ir.types.*
import org.jetbrains.kotlin.ir.types.impl.* import org.jetbrains.kotlin.ir.types.impl.*
import org.jetbrains.kotlin.ir.util.parentAsClass import org.jetbrains.kotlin.ir.util.parentAsClass
import org.jetbrains.kotlin.utils.memoryOptimizedMap import org.jetbrains.kotlin.utils.memoryOptimizedMap
import kotlin.reflect.full.declaredMemberProperties
import org.jetbrains.kotlin.backend.common.serialization.proto.IrBlock as ProtoBlock import org.jetbrains.kotlin.backend.common.serialization.proto.IrBlock as ProtoBlock
import org.jetbrains.kotlin.backend.common.serialization.proto.IrBlockBody as ProtoBlockBody import org.jetbrains.kotlin.backend.common.serialization.proto.IrBlockBody as ProtoBlockBody
import org.jetbrains.kotlin.backend.common.serialization.proto.IrBranch as ProtoBranch import org.jetbrains.kotlin.backend.common.serialization.proto.IrBranch as ProtoBranch
@@ -857,11 +858,10 @@ class IrBodyDeserializer(
code: () -> Long code: () -> Long
): S? = if (condition) deserializeTypedSymbol(code(), fallbackSymbolKind, remap = true) else null ): S? = if (condition) deserializeTypedSymbol(code(), fallbackSymbolKind, remap = true) else null
companion object { private companion object {
private val statementOriginIndex = IrStatementOrigin.Companion::class
private val allKnownStatementOrigins = IrStatementOrigin::class.nestedClasses.toList() .declaredMemberProperties
.mapNotNull { it.get(IrStatementOrigin.Companion) as? IrStatementOrigin }
private val statementOriginIndex = .associateBy { it.debugName }
allKnownStatementOrigins.mapNotNull { it.objectInstance as? IrStatementOriginImpl }.associateBy { it.debugName }
} }
} }
@@ -34,6 +34,7 @@ import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.types.Variance import org.jetbrains.kotlin.types.Variance
import org.jetbrains.kotlin.utils.* import org.jetbrains.kotlin.utils.*
import kotlin.collections.set import kotlin.collections.set
import kotlin.reflect.full.declaredMemberProperties
import org.jetbrains.kotlin.backend.common.serialization.proto.IrAnonymousInit as ProtoAnonymousInit import org.jetbrains.kotlin.backend.common.serialization.proto.IrAnonymousInit as ProtoAnonymousInit
import org.jetbrains.kotlin.backend.common.serialization.proto.IrClass as ProtoClass import org.jetbrains.kotlin.backend.common.serialization.proto.IrClass as ProtoClass
import org.jetbrains.kotlin.backend.common.serialization.proto.IrConstructor as ProtoConstructor import org.jetbrains.kotlin.backend.common.serialization.proto.IrConstructor as ProtoConstructor
@@ -252,7 +253,7 @@ class IrDeclarationDeserializer(
private inline fun <T> withDeserializedIrDeclarationBase( private inline fun <T> withDeserializedIrDeclarationBase(
proto: ProtoDeclarationBase, proto: ProtoDeclarationBase,
setParent: Boolean = true, setParent: Boolean = true,
block: (IrSymbol, IdSignature, Int, Int, IrDeclarationOrigin, Long) -> T block: (IrSymbol, IdSignature, Int, Int, IrDeclarationOrigin, Long) -> T,
): T where T : IrDeclaration, T : IrSymbolOwner { ): T where T : IrDeclaration, T : IrSymbolOwner {
val (s, uid) = symbolDeserializer.deserializeIrSymbolToDeclare(proto.symbol) val (s, uid) = symbolDeserializer.deserializeIrSymbolToDeclare(proto.symbol)
val coordinates = BinaryCoordinates.decode(proto.coordinates) val coordinates = BinaryCoordinates.decode(proto.coordinates)
@@ -556,7 +557,7 @@ class IrDeclarationDeserializer(
proto: ProtoFunctionBase, proto: ProtoFunctionBase,
setParent: Boolean = true, setParent: Boolean = true,
fallbackSymbolKind: SymbolKind, fallbackSymbolKind: SymbolKind,
block: (S, IdSignature, Int, Int, IrDeclarationOrigin, Long) -> T block: (S, IdSignature, Int, Int, IrDeclarationOrigin, Long) -> T,
): T = withDeserializedIrDeclarationBase(proto.base, setParent) { symbol, idSig, startOffset, endOffset, origin, fcode -> ): T = withDeserializedIrDeclarationBase(proto.base, setParent) { symbol, idSig, startOffset, endOffset, origin, fcode ->
val functionSymbol: S = symbol.checkSymbolType(fallbackSymbolKind) val functionSymbol: S = symbol.checkSymbolType(fallbackSymbolKind)
symbolTable.withScope(functionSymbol) { symbolTable.withScope(functionSymbol) {
@@ -621,7 +622,8 @@ class IrDeclarationDeserializer(
isFakeOverride = flags.isFakeOverride, isFakeOverride = flags.isFakeOverride,
) )
}.apply { }.apply {
overriddenSymbols = proto.overriddenList.memoryOptimizedMap { deserializeIrSymbolAndRemap(it).checkSymbolType(FUNCTION_SYMBOL) } overriddenSymbols =
proto.overriddenList.memoryOptimizedMap { deserializeIrSymbolAndRemap(it).checkSymbolType(FUNCTION_SYMBOL) }
} }
} }
@@ -726,7 +728,7 @@ class IrDeclarationDeserializer(
private fun deserializeIrLocalDelegatedProperty( private fun deserializeIrLocalDelegatedProperty(
proto: ProtoLocalDelegatedProperty, proto: ProtoLocalDelegatedProperty,
setParent: Boolean = true setParent: Boolean = true,
): IrLocalDelegatedProperty = ): IrLocalDelegatedProperty =
withDeserializedIrDeclarationBase(proto.base, setParent) { symbol, _, startOffset, endOffset, origin, fcode -> withDeserializedIrDeclarationBase(proto.base, setParent) { symbol, _, startOffset, endOffset, origin, fcode ->
val flags = LocalVariableFlags.decode(fcode) val flags = LocalVariableFlags.decode(fcode)
@@ -794,17 +796,20 @@ class IrDeclarationDeserializer(
} }
} }
companion object { private companion object {
private val allKnownDeclarationOrigins = IrDeclarationOrigin::class.nestedClasses.toList() private val declarationOriginIndex by lazy {
private val declarationOriginIndex = IrDeclarationOrigin.Companion::class
allKnownDeclarationOrigins.mapNotNull { it.objectInstance as? IrDeclarationOriginImpl }.associateBy { it.name } .declaredMemberProperties
.mapNotNull { it.get(IrDeclarationOrigin.Companion) as? IrDeclarationOriginImpl }
.associateBy { it.name }
}
} }
private fun deserializeIrDeclarationOrigin(protoName: Int): IrDeclarationOrigin { private fun deserializeIrDeclarationOrigin(protoName: Int): IrDeclarationOrigin {
val originName = libraryFile.string(protoName) val originName = libraryFile.string(protoName)
return IrDeclarationOrigin.GeneratedByPlugin.fromSerializedString(originName) return IrDeclarationOrigin.GeneratedByPlugin.fromSerializedString(originName)
?: declarationOriginIndex[originName] ?: declarationOriginIndex[originName]
?: object : IrDeclarationOriginImpl(originName) {} ?: IrDeclarationOriginImpl(originName)
} }
fun deserializeDeclaration(proto: ProtoDeclaration, setParent: Boolean = true): IrDeclaration { fun deserializeDeclaration(proto: ProtoDeclaration, setParent: Boolean = true): IrDeclaration {
@@ -92,7 +92,7 @@ class FileDeserializationState(
linker.fakeOverrideBuilder, linker.fakeOverrideBuilder,
compatibilityMode = moduleDeserializer.compatibilityMode, compatibilityMode = moduleDeserializer.compatibilityMode,
linker.partialLinkageSupport.isEnabled, linker.partialLinkageSupport.isEnabled,
internationService = linker.internationService internationService = linker.internationService,
) )
val fileDeserializer = IrFileDeserializer(file, fileReader, fileProto, symbolDeserializer, declarationDeserializer) val fileDeserializer = IrFileDeserializer(file, fileReader, fileProto, symbolDeserializer, declarationDeserializer)
@@ -183,7 +183,7 @@ open class IrFileSerializer(
private fun serializeIrDeclarationOrigin(origin: IrDeclarationOrigin): Int = serializeString(origin.name) private fun serializeIrDeclarationOrigin(origin: IrDeclarationOrigin): Int = serializeString(origin.name)
private fun serializeIrStatementOrigin(origin: IrStatementOrigin): Int = private fun serializeIrStatementOrigin(origin: IrStatementOrigin): Int =
serializeString((origin as? IrStatementOriginImpl)?.debugName ?: error("Unable to serialize origin ${origin.javaClass.name}")) serializeString(origin.debugName)
private fun serializeCoordinates(start: Int, end: Int): Long = if (skipPrivateApi) { private fun serializeCoordinates(start: Int, end: Int): Long = if (skipPrivateApi) {
0L 0L
@@ -8,16 +8,18 @@ package org.jetbrains.kotlin.ir.backend.js
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOriginImpl import org.jetbrains.kotlin.ir.declarations.IrDeclarationOriginImpl
import org.jetbrains.kotlin.ir.expressions.IrStatementOriginImpl import org.jetbrains.kotlin.ir.expressions.IrStatementOriginImpl
interface JsStatementOrigins { object JsStatementOrigins {
object BIND_CALL : IrStatementOriginImpl("BIND_CALL") val BIND_CALL by IrStatementOriginImpl
object STATEMENT_ORIGIN_COROUTINE_IMPL : IrStatementOriginImpl("COROUTINE_IMPL") val STATEMENT_ORIGIN_COROUTINE_IMPL = IrStatementOriginImpl("COROUTINE_IMPL")
object SYNTHESIZED_STATEMENT : IrStatementOriginImpl("SYNTHESIZED_STATEMENT") val SYNTHESIZED_STATEMENT by IrStatementOriginImpl
object CALLABLE_REFERENCE_CREATE : IrStatementOriginImpl("CALLABLE_REFERENCE_CREATE") val CALLABLE_REFERENCE_CREATE by IrStatementOriginImpl
object CALLABLE_REFERENCE_INVOKE : IrStatementOriginImpl("CALLABLE_REFERENCE_INVOKE") val CALLABLE_REFERENCE_INVOKE by IrStatementOriginImpl
object EXPLICIT_INVOKE : IrStatementOriginImpl("EXPLICIT_INVOKE") val EXPLICIT_INVOKE by IrStatementOriginImpl
object FACTORY_ORIGIN : IrDeclarationOriginImpl("FACTORY_ORIGIN")
object COROUTINE_ROOT_LOOP : IrStatementOriginImpl("COROUTINE_ROOT_LOOP") val FACTORY_ORIGIN by IrDeclarationOriginImpl
object COROUTINE_SWITCH : IrStatementOriginImpl("COROUTINE_SWITCH")
object CLASS_REFERENCE : IrStatementOriginImpl("CLASS_REFERENCE") val COROUTINE_ROOT_LOOP by IrStatementOriginImpl
object IMPLEMENTATION_DELEGATION_CALL : IrStatementOriginImpl("IMPLEMENTATION_DELEGATION_CALL") val COROUTINE_SWITCH by IrStatementOriginImpl
val CLASS_REFERENCE by IrStatementOriginImpl
val IMPLEMENTATION_DELEGATION_CALL by IrStatementOriginImpl
} }
@@ -44,7 +44,7 @@ private fun Context.getTypeConversionImpl(
}.symbol }.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) = private fun IrClass.defaultOrNullableType(hasQuestionMark: Boolean) =
if (hasQuestionMark) this.defaultType.makeNullable() else this.defaultType 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.types.KotlinType
import org.jetbrains.kotlin.util.OperatorNameConventions 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) @OptIn(ObsoleteDescriptorBasedAPI::class)
val IrPackageFragment.isFunctionInterfaceFile get() = packageFragmentDescriptor is FunctionInterfacePackageFragment 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.ir.util.SYNTHETIC_OFFSET
import org.jetbrains.kotlin.name.Name 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 { internal fun makeEntryPoint(generationState: NativeGenerationState): IrFunction {
val context = generationState.context 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 { private fun IrBuilderWithScope.createKotlinFunctionObject(blockPointer: IrExpression): IrExpression {
val constructor = generateKotlinFunctionClass() val constructor = generateKotlinFunctionClass()
@@ -151,7 +151,7 @@ internal class KotlinCBridgeBuilder(
isKotlinToC: Boolean, isKotlinToC: Boolean,
foreignExceptionMode: ForeignExceptionMode.Mode = ForeignExceptionMode.default 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 kotlinBridgeBuilder = KotlinBridgeBuilder(startOffset, endOffset, cName, stubs, isExternal = isKotlinToC, foreignExceptionMode, origin)
private val cBridgeBuilder = CFunctionBuilder() private val cBridgeBuilder = CFunctionBuilder()
@@ -261,7 +261,7 @@ internal class CCallBuilder {
} }
} }
sealed class CBridgeOrigin(name: String): IrDeclarationOriginImpl(name, isSynthetic = true) { object CBridgeOrigin {
object KOTLIN_TO_C_BRIDGE: CBridgeOrigin("KOTLIN_TO_C_BRIDGE") val KOTLIN_TO_C_BRIDGE by IrDeclarationOriginImpl.Synthetic
object C_TO_KOTLIN_BRIDGE: CBridgeOrigin("C_TO_KOTLIN_BRIDGE") 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. * 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. * 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 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.builders.declarations.buildFun
import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.declarations.*
import org.jetbrains.kotlin.ir.expressions.* 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.symbols.IrClassSymbol
import org.jetbrains.kotlin.ir.types.classifierOrNull import org.jetbrains.kotlin.ir.types.classifierOrNull
import org.jetbrains.kotlin.ir.types.typeWith 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) { internal class NativeEnumWhenLowering constructor(context: Context) : EnumWhenLowering(context) {
override fun mapConstEnumEntry(entry: IrEnumEntry): Int { override fun mapConstEnumEntry(entry: IrEnumEntry): Int {
@@ -61,9 +61,9 @@ import org.jetbrains.kotlin.name.Name
* ``` * ```
*/ */
internal class FunctionReferenceLowering(val generationState: NativeGenerationState) : FileLoweringPass { internal class FunctionReferenceLowering(val generationState: NativeGenerationState) : FileLoweringPass {
private object DECLARATION_ORIGIN_FUNCTION_REFERENCE_IMPL : IrDeclarationOriginImpl("FUNCTION_REFERENCE_IMPL")
companion object { companion object {
private val DECLARATION_ORIGIN_FUNCTION_REFERENCE_IMPL = IrDeclarationOriginImpl("FUNCTION_REFERENCE_IMPL")
fun isLoweredFunctionReference(declaration: IrDeclaration): Boolean = fun isLoweredFunctionReference(declaration: IrDeclaration): Boolean =
declaration.origin == DECLARATION_ORIGIN_FUNCTION_REFERENCE_IMPL 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 import org.jetbrains.kotlin.ir.visitors.transformChildrenVoid
internal class InitializersLowering(val context: CommonBackendContext) : ClassLoweringPass { internal class InitializersLowering(val context: CommonBackendContext) : ClassLoweringPass {
companion object {
object STATEMENT_ORIGIN_ANONYMOUS_INITIALIZER : IrStatementOriginImpl("ANONYMOUS_INITIALIZER") val STATEMENT_ORIGIN_ANONYMOUS_INITIALIZER = IrStatementOriginImpl("ANONYMOUS_INITIALIZER")
val DECLARATION_ORIGIN_ANONYMOUS_INITIALIZER = IrDeclarationOriginImpl("ANONYMOUS_INITIALIZER")
object DECLARATION_ORIGIN_ANONYMOUS_INITIALIZER : IrDeclarationOriginImpl("ANONYMOUS_INITIALIZER") }
override fun lower(irClass: IrClass) { override fun lower(irClass: IrClass) {
if (irClass.isInterface) return if (irClass.isInterface) return
@@ -312,8 +312,9 @@ private class InteropLoweringPart1(val generationState: NativeGenerationState) :
} }
} }
private object OVERRIDING_INITIALIZER_BY_CONSTRUCTOR : private companion object {
IrDeclarationOriginImpl("OVERRIDING_INITIALIZER_BY_CONSTRUCTOR") private val OVERRIDING_INITIALIZER_BY_CONSTRUCTOR by IrDeclarationOriginImpl
}
private fun IrConstructor.overridesConstructor(other: IrConstructor): Boolean { private fun IrConstructor.overridesConstructor(other: IrConstructor): Boolean {
return this.descriptor.valueParameters.size == other.descriptor.valueParameters.size && 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 companion object {
object IrStatementOriginFieldPreInit : IrStatementOriginImpl("FIELD_PRE_INIT") // 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.ir.visitors.acceptVoid
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
internal object DECLARATION_ORIGIN_STATIC_GLOBAL_INITIALIZER : IrDeclarationOriginImpl("STATIC_GLOBAL_INITIALIZER") internal val DECLARATION_ORIGIN_STATIC_GLOBAL_INITIALIZER = IrDeclarationOriginImpl("STATIC_GLOBAL_INITIALIZER")
internal object DECLARATION_ORIGIN_STATIC_THREAD_LOCAL_INITIALIZER : IrDeclarationOriginImpl("STATIC_THREAD_LOCAL_INITIALIZER") internal val 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_STANDALONE_THREAD_LOCAL_INITIALIZER = IrDeclarationOriginImpl("STATIC_STANDALONE_THREAD_LOCAL_INITIALIZER")
internal val IrFunction.isStaticInitializer: Boolean internal val IrFunction.isStaticInitializer: Boolean
get() = origin == DECLARATION_ORIGIN_STATIC_GLOBAL_INITIALIZER get() = origin == DECLARATION_ORIGIN_STATIC_GLOBAL_INITIALIZER
@@ -45,11 +45,10 @@ import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.resolve.descriptorUtil.module import org.jetbrains.kotlin.resolve.descriptorUtil.module
internal class TestProcessor (val context: Context) { 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 { companion object {
val TEST_SUITE_CLASS by IrDeclarationOriginImpl
val TEST_SUITE_GENERATED_MEMBER by IrDeclarationOriginImpl
val COMPANION_GETTER_NAME = Name.identifier("getCompanion") val COMPANION_GETTER_NAME = Name.identifier("getCompanion")
val INSTANCE_GETTER_NAME = Name.identifier("createInstance") 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.util.capitalizeDecapitalize.*
import org.jetbrains.kotlin.ir.util.* 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 { internal class VolatileFieldsLowering(val context: Context) : FileLoweringPass {
private val symbols = context.ir.symbols 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 publicFunctions: Map<Long, DataFlowIR.FunctionSymbol.Public>,
val functionDFGs: Map<DataFlowIR.FunctionSymbol, DataFlowIR.Function>) val functionDFGs: Map<DataFlowIR.FunctionSymbol, DataFlowIR.Function>)
internal object STATEMENT_ORIGIN_PRODUCER_INVOCATION : IrStatementOriginImpl("PRODUCER_INVOCATION") internal val STATEMENT_ORIGIN_PRODUCER_INVOCATION = IrStatementOriginImpl("PRODUCER_INVOCATION")
internal object STATEMENT_ORIGIN_JOB_INVOCATION : IrStatementOriginImpl("JOB_INVOCATION") internal val STATEMENT_ORIGIN_JOB_INVOCATION = IrStatementOriginImpl("JOB_INVOCATION")
private fun IrTypeOperator.isCast() = private fun IrTypeOperator.isCast() =
this == IrTypeOperator.CAST || this == IrTypeOperator.IMPLICIT_CAST || this == IrTypeOperator.SAFE_CAST this == IrTypeOperator.CAST || this == IrTypeOperator.IMPLICIT_CAST || this == IrTypeOperator.SAFE_CAST
@@ -36,7 +36,7 @@ internal class KonanForwardDeclarationModuleDeserializer(
} }
companion object { 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>() private val declaredDeclaration = mutableMapOf<IdSignature, IrClass>()
@@ -113,11 +113,13 @@ abstract class AbstractAtomicSymbols(
annotations = emptyList() annotations = emptyList()
) )
object ATOMICFU_GENERATED_CLASS : IrDeclarationOriginImpl("ATOMICFU_GENERATED_CLASS", isSynthetic = true) companion object {
object ATOMICFU_GENERATED_FUNCTION : IrDeclarationOriginImpl("ATOMICFU_GENERATED_FUNCTION", isSynthetic = true) val ATOMICFU_GENERATED_CLASS by IrDeclarationOriginImpl.Synthetic
object ATOMICFU_GENERATED_FIELD : IrDeclarationOriginImpl("ATOMICFU_GENERATED_FIELD", isSynthetic = true) val ATOMICFU_GENERATED_FUNCTION by IrDeclarationOriginImpl.Synthetic
object ATOMICFU_GENERATED_PROPERTY : IrDeclarationOriginImpl("ATOMICFU_GENERATED_PROPERTY", isSynthetic = true) val ATOMICFU_GENERATED_FIELD by IrDeclarationOriginImpl.Synthetic
object ATOMICFU_GENERATED_PROPERTY_ACCESSOR : IrDeclarationOriginImpl("ATOMICFU_GENERATED_PROPERTY_ACCESSOR", isSynthetic = true) val ATOMICFU_GENERATED_PROPERTY by IrDeclarationOriginImpl.Synthetic
val ATOMICFU_GENERATED_PROPERTY_ACCESSOR by IrDeclarationOriginImpl.Synthetic
}
protected fun createPackage(packageName: String): IrPackageFragment = protected fun createPackage(packageName: String): IrPackageFragment =
IrExternalPackageFragmentImpl.createEmptyExternalPackageFragment( IrExternalPackageFragmentImpl.createEmptyExternalPackageFragment(
@@ -46,7 +46,7 @@ import org.jetbrains.kotlinx.serialization.compiler.resolve.SerialEntityNames.UN
import org.jetbrains.kotlinx.serialization.compiler.resolve.SerializationPackages import org.jetbrains.kotlinx.serialization.compiler.resolve.SerializationPackages
import org.jetbrains.kotlinx.serialization.compiler.resolve.bitMaskSlotCount import org.jetbrains.kotlinx.serialization.compiler.resolve.bitMaskSlotCount
object SERIALIZATION_PLUGIN_ORIGIN : IrDeclarationOriginImpl("KOTLINX_SERIALIZATION", true) val SERIALIZATION_PLUGIN_ORIGIN = IrDeclarationOriginImpl("KOTLINX_SERIALIZATION", true)
internal typealias FunctionWithArgs = Pair<IrFunctionSymbol, List<IrExpression>> internal typealias FunctionWithArgs = Pair<IrFunctionSymbol, List<IrExpression>>