From f17fc676835fe9af5ade5ec2fdf8d4c31375c925 Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Wed, 12 Jan 2022 02:04:56 +0100 Subject: [PATCH] IR: split files containing multiple classes/functions This change only moves code around, no behavior is changed. Specifically, ir.tree sources containing several declarations are split into several files: one file per class, and one file for all extension functions per package (IrDeclarations.kt, IrExpressions.kt, IrVisitors.kt, IrConstructorCallTypeArguments.kt). This is useful because after introducing IR tree generator, we can easily see how generated sources are different from those which were written manually, since Git will recognize file moves. Also, it will keep Git history for sources which consisted of one big class + a couple of extension functions (e.g. IrElementVisitorVoid.kt). --- .../ir/declarations/IrAttributeContainer.kt | 6 -- .../kotlin/ir/declarations/IrClass.kt | 15 ---- .../kotlin/ir/declarations/IrDeclaration.kt | 43 ----------- .../ir/declarations/IrDeclarationBase.kt | 10 +++ .../ir/declarations/IrDeclarationContainer.kt | 4 -- .../ir/declarations/IrDeclarationParent.kt | 10 +++ .../ir/declarations/IrDeclarationWithName.kt | 12 ++++ .../IrDeclarationWithVisibility.kt | 12 ++++ .../kotlin/ir/declarations/IrDeclarations.kt | 56 +++++++++++++++ .../declarations/IrExternalPackageFragment.kt | 14 ++++ .../kotlin/ir/declarations/IrFile.kt | 24 ------- .../kotlin/ir/declarations/IrFunction.kt | 20 ------ .../IrMemberWithContainerSource.kt | 12 ++++ .../ir/declarations/IrMetadataSourceOwner.kt | 12 ++++ .../declarations/IrOverridableDeclaration.kt | 14 ++++ .../ir/declarations/IrOverridableMember.kt | 12 ++++ .../ir/declarations/IrPackageFragment.kt | 20 ++++++ .../IrPossiblyExternalDeclaration.kt | 10 +++ .../ir/declarations/IrSimpleFunction.kt | 3 - .../kotlin/ir/declarations/IrSymbolOwner.kt | 13 ++++ .../kotlin/ir/expressions/IrBlock.kt | 40 ----------- .../kotlin/ir/expressions/IrBlockBody.kt | 28 ++++++++ .../jetbrains/kotlin/ir/expressions/IrBody.kt | 49 ------------- .../kotlin/ir/expressions/IrBranch.kt | 27 +++++++ .../kotlin/ir/expressions/IrBreak.kt | 8 +++ .../kotlin/ir/expressions/IrBreakContinue.kt | 4 -- .../ir/expressions/IrCallableReference.kt | 30 +------- .../kotlin/ir/expressions/IrCatch.kt | 18 +++++ .../kotlin/ir/expressions/IrComposite.kt | 11 +++ .../kotlin/ir/expressions/IrConst.kt | 19 ----- .../kotlin/ir/expressions/IrConstKind.kt | 25 +++++++ .../kotlin/ir/expressions/IrConstantArray.kt | 10 +++ .../kotlin/ir/expressions/IrConstantObject.kt | 13 ---- .../ir/expressions/IrConstantPrimitive.kt | 10 +++ .../kotlin/ir/expressions/IrConstantValue.kt | 11 +++ .../ir/expressions/IrConstructorCall.kt | 65 ----------------- .../IrConstructorCallTypeArguments.kt | 72 +++++++++++++++++++ .../ir/expressions/IrContainerExpression.kt | 26 +++++++ .../kotlin/ir/expressions/IrContinue.kt | 8 +++ .../ir/expressions/IrDeclarationReference.kt | 23 ------ .../kotlin/ir/expressions/IrDoWhileLoop.kt | 8 +++ .../ir/expressions/IrDynamicExpression.kt | 8 +++ .../expressions/IrDynamicMemberExpression.kt | 12 ++++ .../ir/expressions/IrDynamicOperator.kt | 31 -------- .../IrDynamicOperatorExpression.kt | 14 ++++ .../kotlin/ir/expressions/IrElseBranch.kt | 8 +++ .../ir/expressions/IrErrorCallExpression.kt | 11 +++ .../ir/expressions/IrErrorExpression.kt | 5 -- .../kotlin/ir/expressions/IrExpressionBody.kt | 30 ++++++++ .../kotlin/ir/expressions/IrExpressions.kt | 38 ++++++++++ .../ir/expressions/IrFieldAccessExpression.kt | 6 -- .../expressions/IrFunctionAccessExpression.kt | 4 -- .../ir/expressions/IrFunctionReference.kt | 12 ++++ .../kotlin/ir/expressions/IrGetEnumValue.kt | 12 ++++ .../kotlin/ir/expressions/IrGetField.kt | 8 +++ .../kotlin/ir/expressions/IrGetObjectValue.kt | 12 ++++ .../ir/expressions/IrGetSingletonValue.kt | 8 +++ .../kotlin/ir/expressions/IrGetValue.kt | 10 +++ .../IrLocalDelegatedPropertyReference.kt | 19 +++++ .../jetbrains/kotlin/ir/expressions/IrLoop.kt | 4 -- .../ir/expressions/IrPropertyReference.kt | 19 +++++ .../ir/expressions/IrRawFunctionReference.kt | 18 +++++ .../ir/expressions/IrReturnableBlock.kt | 17 +++++ .../kotlin/ir/expressions/IrSetField.kt | 10 +++ .../kotlin/ir/expressions/IrSetValue.kt | 13 ++++ .../kotlin/ir/expressions/IrSpreadElement.kt | 17 +++++ .../ir/expressions/IrSuspendableExpression.kt | 11 +++ .../{IrSuspend.kt => IrSuspensionPoint.kt} | 5 -- .../kotlin/ir/expressions/IrSyntheticBody.kt | 10 +++ .../ir/expressions/IrSyntheticBodyKind.kt | 11 +++ .../jetbrains/kotlin/ir/expressions/IrTry.kt | 12 ---- .../kotlin/ir/expressions/IrTypeOperator.kt | 10 --- .../ir/expressions/IrTypeOperatorCall.kt | 16 +++++ .../ir/expressions/IrValueAccessExpression.kt | 9 --- .../kotlin/ir/expressions/IrVararg.kt | 12 ---- .../kotlin/ir/expressions/IrVarargElement.kt | 10 +++ .../jetbrains/kotlin/ir/expressions/IrWhen.kt | 20 ------ .../kotlin/ir/expressions/IrWhileLoop.kt | 8 +++ .../ir/visitors/IrElementVisitorVoid.kt | 8 --- .../kotlin/ir/visitors/IrVisitors.kt | 16 +++++ 80 files changed, 848 insertions(+), 483 deletions(-) create mode 100644 compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrDeclarationBase.kt create mode 100644 compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrDeclarationParent.kt create mode 100644 compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrDeclarationWithName.kt create mode 100644 compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrDeclarationWithVisibility.kt create mode 100644 compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrDeclarations.kt create mode 100644 compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrExternalPackageFragment.kt create mode 100644 compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrMemberWithContainerSource.kt create mode 100644 compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrMetadataSourceOwner.kt create mode 100644 compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrOverridableDeclaration.kt create mode 100644 compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrOverridableMember.kt create mode 100644 compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrPackageFragment.kt create mode 100644 compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrPossiblyExternalDeclaration.kt create mode 100644 compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrSymbolOwner.kt create mode 100644 compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrBlockBody.kt create mode 100644 compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrBranch.kt create mode 100644 compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrBreak.kt create mode 100644 compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrCatch.kt create mode 100644 compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrComposite.kt create mode 100644 compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrConstKind.kt create mode 100644 compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrConstantArray.kt create mode 100644 compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrConstantPrimitive.kt create mode 100644 compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrConstantValue.kt create mode 100644 compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrConstructorCallTypeArguments.kt create mode 100644 compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrContainerExpression.kt create mode 100644 compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrContinue.kt create mode 100644 compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrDoWhileLoop.kt create mode 100644 compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrDynamicExpression.kt create mode 100644 compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrDynamicMemberExpression.kt create mode 100644 compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrDynamicOperatorExpression.kt create mode 100644 compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrElseBranch.kt create mode 100644 compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrErrorCallExpression.kt create mode 100644 compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrExpressionBody.kt create mode 100644 compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrExpressions.kt create mode 100644 compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrFunctionReference.kt create mode 100644 compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrGetEnumValue.kt create mode 100644 compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrGetField.kt create mode 100644 compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrGetObjectValue.kt create mode 100644 compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrGetSingletonValue.kt create mode 100644 compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrGetValue.kt create mode 100644 compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrLocalDelegatedPropertyReference.kt create mode 100644 compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrPropertyReference.kt create mode 100644 compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrRawFunctionReference.kt create mode 100644 compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrReturnableBlock.kt create mode 100644 compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrSetField.kt create mode 100644 compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrSetValue.kt create mode 100644 compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrSpreadElement.kt create mode 100644 compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrSuspendableExpression.kt rename compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/{IrSuspend.kt => IrSuspensionPoint.kt} (77%) create mode 100644 compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrSyntheticBody.kt create mode 100644 compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrSyntheticBodyKind.kt create mode 100644 compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrTypeOperatorCall.kt create mode 100644 compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrVarargElement.kt create mode 100644 compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrWhileLoop.kt create mode 100644 compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/visitors/IrVisitors.kt diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrAttributeContainer.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrAttributeContainer.kt index 74bbb8cd2d5..b52581f38c5 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrAttributeContainer.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrAttributeContainer.kt @@ -17,9 +17,3 @@ interface IrAttributeContainer : IrElement { */ var attributeOwnerId: IrAttributeContainer } - -fun D.copyAttributes(other: IrAttributeContainer?): D = apply { - if (other != null) { - attributeOwnerId = other.attributeOwnerId - } -} diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrClass.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrClass.kt index 22b262f158f..31764cd5d57 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrClass.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrClass.kt @@ -21,7 +21,6 @@ import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI import org.jetbrains.kotlin.ir.symbols.IrClassSymbol import org.jetbrains.kotlin.ir.types.IrSimpleType import org.jetbrains.kotlin.ir.types.IrType -import org.jetbrains.kotlin.ir.util.primaryConstructor import org.jetbrains.kotlin.ir.util.transformIfNeeded import org.jetbrains.kotlin.ir.util.transformInPlace import org.jetbrains.kotlin.ir.visitors.IrElementTransformer @@ -69,17 +68,3 @@ abstract class IrClass : declarations.transformInPlace(transformer, data) } } - -val IrClass.isSingleFieldValueClass - get() = this.isValue && (this.inlineClassRepresentation != null || this.primaryConstructor?.valueParameters?.size == 1) - -val IrClass.isMultiFieldValueClass - get() = this.isValue && !isSingleFieldValueClass - -fun IrClass.addMember(member: IrDeclaration) { - declarations.add(member) -} - -fun IrClass.addAll(members: List) { - declarations.addAll(members) -} diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrDeclaration.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrDeclaration.kt index 416cd8b7d15..0682c1a2e2f 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrDeclaration.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrDeclaration.kt @@ -17,23 +17,8 @@ package org.jetbrains.kotlin.ir.declarations import org.jetbrains.kotlin.descriptors.DeclarationDescriptor -import org.jetbrains.kotlin.descriptors.DescriptorVisibility -import org.jetbrains.kotlin.descriptors.Modality -import org.jetbrains.kotlin.ir.IrElement -import org.jetbrains.kotlin.ir.IrElementBase import org.jetbrains.kotlin.ir.IrStatement import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI -import org.jetbrains.kotlin.ir.symbols.IrSymbol -import org.jetbrains.kotlin.name.Name -import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedContainerSource - -interface IrSymbolOwner : IrElement { - val symbol: IrSymbol -} - -interface IrMetadataSourceOwner : IrElement { - var metadata: MetadataSource? -} interface IrDeclaration : IrStatement, IrSymbolOwner, IrMutableAnnotationContainer { @ObsoleteDescriptorBasedAPI @@ -45,31 +30,3 @@ interface IrDeclaration : IrStatement, IrSymbolOwner, IrMutableAnnotationContain val factory: IrFactory } - -abstract class IrDeclarationBase : IrElementBase(), IrDeclaration - -interface IrOverridableDeclaration : IrOverridableMember { - override val symbol: S - val isFakeOverride: Boolean - var overriddenSymbols: List -} - -interface IrDeclarationWithVisibility : IrDeclaration { - var visibility: DescriptorVisibility -} - -interface IrDeclarationWithName : IrDeclaration { - val name: Name -} - -interface IrPossiblyExternalDeclaration : IrDeclarationWithName { - val isExternal: Boolean -} - -interface IrOverridableMember : IrDeclarationWithVisibility, IrDeclarationWithName, IrSymbolOwner { - val modality: Modality -} - -interface IrMemberWithContainerSource : IrDeclarationWithName { - val containerSource: DeserializedContainerSource? -} diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrDeclarationBase.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrDeclarationBase.kt new file mode 100644 index 00000000000..2a34018debc --- /dev/null +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrDeclarationBase.kt @@ -0,0 +1,10 @@ +/* + * Copyright 2010-2022 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.ir.declarations + +import org.jetbrains.kotlin.ir.IrElementBase + +abstract class IrDeclarationBase : IrElementBase(), IrDeclaration diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrDeclarationContainer.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrDeclarationContainer.kt index 3ae16bb58db..8e796f7a6fb 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrDeclarationContainer.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrDeclarationContainer.kt @@ -16,10 +16,6 @@ package org.jetbrains.kotlin.ir.declarations -import org.jetbrains.kotlin.ir.IrElement - -interface IrDeclarationParent : IrElement - interface IrDeclarationContainer : IrDeclarationParent { val declarations: MutableList } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrDeclarationParent.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrDeclarationParent.kt new file mode 100644 index 00000000000..8969cb0a915 --- /dev/null +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrDeclarationParent.kt @@ -0,0 +1,10 @@ +/* + * Copyright 2010-2022 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.ir.declarations + +import org.jetbrains.kotlin.ir.IrElement + +interface IrDeclarationParent : IrElement diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrDeclarationWithName.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrDeclarationWithName.kt new file mode 100644 index 00000000000..2b6a2156414 --- /dev/null +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrDeclarationWithName.kt @@ -0,0 +1,12 @@ +/* + * Copyright 2010-2022 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.ir.declarations + +import org.jetbrains.kotlin.name.Name + +interface IrDeclarationWithName : IrDeclaration { + val name: Name +} diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrDeclarationWithVisibility.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrDeclarationWithVisibility.kt new file mode 100644 index 00000000000..af8be92dfec --- /dev/null +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrDeclarationWithVisibility.kt @@ -0,0 +1,12 @@ +/* + * Copyright 2010-2022 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.ir.declarations + +import org.jetbrains.kotlin.descriptors.DescriptorVisibility + +interface IrDeclarationWithVisibility : IrDeclaration { + var visibility: DescriptorVisibility +} diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrDeclarations.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrDeclarations.kt new file mode 100644 index 00000000000..8de7d002239 --- /dev/null +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrDeclarations.kt @@ -0,0 +1,56 @@ +/* + * Copyright 2010-2021 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.ir.declarations + +import org.jetbrains.kotlin.descriptors.ValueParameterDescriptor +import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI +import org.jetbrains.kotlin.ir.expressions.IrExpressionBody +import org.jetbrains.kotlin.ir.util.primaryConstructor +import java.io.File + +fun D.copyAttributes(other: IrAttributeContainer?): D = apply { + if (other != null) { + attributeOwnerId = other.attributeOwnerId + } +} + +val IrClass.isSingleFieldValueClass: Boolean + get() = this.isValue && (this.inlineClassRepresentation != null || this.primaryConstructor?.valueParameters?.size == 1) + +val IrClass.isMultiFieldValueClass: Boolean + get() = this.isValue && !isSingleFieldValueClass + +fun IrClass.addMember(member: IrDeclaration) { + declarations.add(member) +} + +fun IrClass.addAll(members: List) { + declarations.addAll(members) +} + +val IrFile.path: String get() = fileEntry.name +val IrFile.name: String get() = File(path).name + +@ObsoleteDescriptorBasedAPI +fun IrFunction.getIrValueParameter(parameter: ValueParameterDescriptor): IrValueParameter = + valueParameters.getOrElse(parameter.index) { + throw AssertionError("No IrValueParameter for $parameter") + }.also { found -> + assert(found.descriptor == parameter) { + "Parameter indices mismatch at $descriptor: $parameter != ${found.descriptor}" + } + } + +@ObsoleteDescriptorBasedAPI +fun IrFunction.putDefault(parameter: ValueParameterDescriptor, expressionBody: IrExpressionBody) { + getIrValueParameter(parameter).defaultValue = expressionBody +} + +val IrFunction.isStaticMethodOfClass: Boolean + get() = this is IrSimpleFunction && parent is IrClass && dispatchReceiverParameter == null + +val IrFunction.isPropertyAccessor: Boolean + get() = this is IrSimpleFunction && correspondingPropertySymbol != null diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrExternalPackageFragment.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrExternalPackageFragment.kt new file mode 100644 index 00000000000..5bf94b8e042 --- /dev/null +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrExternalPackageFragment.kt @@ -0,0 +1,14 @@ +/* + * Copyright 2010-2021 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.ir.declarations + +import org.jetbrains.kotlin.ir.symbols.IrExternalPackageFragmentSymbol +import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedContainerSource + +abstract class IrExternalPackageFragment : IrPackageFragment() { + abstract override val symbol: IrExternalPackageFragmentSymbol + abstract val containerSource: DeserializedContainerSource? +} diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrFile.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrFile.kt index 909beb8bdba..89dcc5a31f4 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrFile.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrFile.kt @@ -16,30 +16,9 @@ package org.jetbrains.kotlin.ir.declarations -import org.jetbrains.kotlin.descriptors.PackageFragmentDescriptor -import org.jetbrains.kotlin.ir.IrElementBase import org.jetbrains.kotlin.ir.IrFileEntry -import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI -import org.jetbrains.kotlin.ir.symbols.IrExternalPackageFragmentSymbol import org.jetbrains.kotlin.ir.symbols.IrFileSymbol -import org.jetbrains.kotlin.ir.symbols.IrPackageFragmentSymbol import org.jetbrains.kotlin.ir.visitors.IrElementTransformer -import org.jetbrains.kotlin.name.FqName -import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedContainerSource -import java.io.File - -abstract class IrPackageFragment : IrElementBase(), IrDeclarationContainer, IrSymbolOwner { - @ObsoleteDescriptorBasedAPI - abstract val packageFragmentDescriptor: PackageFragmentDescriptor - abstract override val symbol: IrPackageFragmentSymbol - - abstract val fqName: FqName -} - -abstract class IrExternalPackageFragment : IrPackageFragment() { - abstract override val symbol: IrExternalPackageFragmentSymbol - abstract val containerSource: DeserializedContainerSource? -} abstract class IrFile : IrPackageFragment(), IrMutableAnnotationContainer, IrMetadataSourceOwner { abstract override val symbol: IrFileSymbol @@ -51,6 +30,3 @@ abstract class IrFile : IrPackageFragment(), IrMutableAnnotationContainer, IrMet override fun transform(transformer: IrElementTransformer, data: D): IrFile = accept(transformer, data) as IrFile } - -val IrFile.path: String get() = fileEntry.name -val IrFile.name: String get() = File(path).name diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrFunction.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrFunction.kt index 06ac42e0585..1db5a4d4068 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrFunction.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrFunction.kt @@ -17,10 +17,8 @@ package org.jetbrains.kotlin.ir.declarations import org.jetbrains.kotlin.descriptors.FunctionDescriptor -import org.jetbrains.kotlin.descriptors.ValueParameterDescriptor import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI import org.jetbrains.kotlin.ir.expressions.IrBody -import org.jetbrains.kotlin.ir.expressions.IrExpressionBody import org.jetbrains.kotlin.ir.symbols.IrFunctionSymbol import org.jetbrains.kotlin.ir.types.IrType import org.jetbrains.kotlin.ir.util.transformIfNeeded @@ -73,21 +71,3 @@ abstract class IrFunction : body = body?.transform(transformer, data) } } - -@ObsoleteDescriptorBasedAPI -fun IrFunction.getIrValueParameter(parameter: ValueParameterDescriptor): IrValueParameter = - valueParameters.getOrElse(parameter.index) { - throw AssertionError("No IrValueParameter for $parameter") - }.also { found -> - assert(found.descriptor == parameter) { - "Parameter indices mismatch at $descriptor: $parameter != ${found.descriptor}" - } - } - -@ObsoleteDescriptorBasedAPI -fun IrFunction.putDefault(parameter: ValueParameterDescriptor, expressionBody: IrExpressionBody) { - getIrValueParameter(parameter).defaultValue = expressionBody -} - -val IrFunction.isStaticMethodOfClass: Boolean - get() = this is IrSimpleFunction && parent is IrClass && dispatchReceiverParameter == null diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrMemberWithContainerSource.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrMemberWithContainerSource.kt new file mode 100644 index 00000000000..d40849d0a87 --- /dev/null +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrMemberWithContainerSource.kt @@ -0,0 +1,12 @@ +/* + * Copyright 2010-2022 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.ir.declarations + +import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedContainerSource + +interface IrMemberWithContainerSource : IrDeclarationWithName { + val containerSource: DeserializedContainerSource? +} diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrMetadataSourceOwner.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrMetadataSourceOwner.kt new file mode 100644 index 00000000000..b6d122bb1d6 --- /dev/null +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrMetadataSourceOwner.kt @@ -0,0 +1,12 @@ +/* + * Copyright 2010-2022 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.ir.declarations + +import org.jetbrains.kotlin.ir.IrElement + +interface IrMetadataSourceOwner : IrElement { + var metadata: MetadataSource? +} diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrOverridableDeclaration.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrOverridableDeclaration.kt new file mode 100644 index 00000000000..937cda58b03 --- /dev/null +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrOverridableDeclaration.kt @@ -0,0 +1,14 @@ +/* + * Copyright 2010-2022 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.ir.declarations + +import org.jetbrains.kotlin.ir.symbols.IrSymbol + +interface IrOverridableDeclaration : IrOverridableMember { + override val symbol: S + val isFakeOverride: Boolean + var overriddenSymbols: List +} diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrOverridableMember.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrOverridableMember.kt new file mode 100644 index 00000000000..a3cea11fd6f --- /dev/null +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrOverridableMember.kt @@ -0,0 +1,12 @@ +/* + * Copyright 2010-2022 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.ir.declarations + +import org.jetbrains.kotlin.descriptors.Modality + +interface IrOverridableMember : IrDeclarationWithVisibility, IrDeclarationWithName, IrSymbolOwner { + val modality: Modality +} diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrPackageFragment.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrPackageFragment.kt new file mode 100644 index 00000000000..d0ddc35caf4 --- /dev/null +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrPackageFragment.kt @@ -0,0 +1,20 @@ +/* + * Copyright 2010-2021 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.ir.declarations + +import org.jetbrains.kotlin.descriptors.PackageFragmentDescriptor +import org.jetbrains.kotlin.ir.IrElementBase +import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI +import org.jetbrains.kotlin.ir.symbols.IrPackageFragmentSymbol +import org.jetbrains.kotlin.name.FqName + +abstract class IrPackageFragment : IrElementBase(), IrDeclarationContainer, IrSymbolOwner { + @ObsoleteDescriptorBasedAPI + abstract val packageFragmentDescriptor: PackageFragmentDescriptor + abstract override val symbol: IrPackageFragmentSymbol + + abstract val fqName: FqName +} diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrPossiblyExternalDeclaration.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrPossiblyExternalDeclaration.kt new file mode 100644 index 00000000000..996d12d0e17 --- /dev/null +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrPossiblyExternalDeclaration.kt @@ -0,0 +1,10 @@ +/* + * Copyright 2010-2022 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.ir.declarations + +interface IrPossiblyExternalDeclaration : IrDeclarationWithName { + val isExternal: Boolean +} diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrSimpleFunction.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrSimpleFunction.kt index 0acfc3918bb..80b3c3eedb5 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrSimpleFunction.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrSimpleFunction.kt @@ -27,6 +27,3 @@ abstract class IrSimpleFunction : override fun accept(visitor: IrElementVisitor, data: D): R = visitor.visitSimpleFunction(this, data) } - -val IrFunction.isPropertyAccessor: Boolean - get() = this is IrSimpleFunction && correspondingPropertySymbol != null diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrSymbolOwner.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrSymbolOwner.kt new file mode 100644 index 00000000000..68afee9b97d --- /dev/null +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrSymbolOwner.kt @@ -0,0 +1,13 @@ +/* + * Copyright 2010-2022 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.ir.declarations + +import org.jetbrains.kotlin.ir.IrElement +import org.jetbrains.kotlin.ir.symbols.IrSymbol + +interface IrSymbolOwner : IrElement { + val symbol: IrSymbol +} diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrBlock.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrBlock.kt index f4fd9b9820e..92219c9bc61 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrBlock.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrBlock.kt @@ -16,47 +16,7 @@ package org.jetbrains.kotlin.ir.expressions -import org.jetbrains.kotlin.ir.IrStatement -import org.jetbrains.kotlin.ir.declarations.IrReturnTarget -import org.jetbrains.kotlin.ir.declarations.IrSymbolOwner -import org.jetbrains.kotlin.ir.symbols.IrFileSymbol -import org.jetbrains.kotlin.ir.symbols.IrFunctionSymbol -import org.jetbrains.kotlin.ir.symbols.IrReturnableBlockSymbol -import org.jetbrains.kotlin.ir.util.fileOrNull -import org.jetbrains.kotlin.ir.util.transformInPlace -import org.jetbrains.kotlin.ir.visitors.IrElementTransformer -import org.jetbrains.kotlin.ir.visitors.IrElementVisitor - -abstract class IrContainerExpression : IrExpression(), IrStatementContainer { - abstract val origin: IrStatementOrigin? - abstract val isTransparentScope: Boolean - - override val statements: MutableList = ArrayList(2) - - override fun acceptChildren(visitor: IrElementVisitor, data: D) { - statements.forEach { it.accept(visitor, data) } - } - - override fun transformChildren(transformer: IrElementTransformer, data: D) { - statements.transformInPlace(transformer, data) - } -} - abstract class IrBlock : IrContainerExpression() { override val isTransparentScope: Boolean get() = false } - -abstract class IrComposite : IrContainerExpression() { - override val isTransparentScope: Boolean - get() = true -} - -abstract class IrReturnableBlock : IrBlock(), IrSymbolOwner, IrReturnTarget { - abstract override val symbol: IrReturnableBlockSymbol - - abstract val inlineFunctionSymbol: IrFunctionSymbol? -} - -val IrReturnableBlock.sourceFileSymbol: IrFileSymbol? - get() = inlineFunctionSymbol?.owner?.fileOrNull?.symbol diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrBlockBody.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrBlockBody.kt new file mode 100644 index 00000000000..be2ace3bf85 --- /dev/null +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrBlockBody.kt @@ -0,0 +1,28 @@ +/* + * Copyright 2010-2021 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.ir.expressions + +import org.jetbrains.kotlin.ir.IrStatement +import org.jetbrains.kotlin.ir.declarations.IrFactory +import org.jetbrains.kotlin.ir.visitors.IrElementTransformer +import org.jetbrains.kotlin.ir.visitors.IrElementVisitor + +abstract class IrBlockBody : IrBody(), IrStatementContainer { + abstract val factory: IrFactory + + override fun accept(visitor: IrElementVisitor, data: D): R = + visitor.visitBlockBody(this, data) + + override fun acceptChildren(visitor: IrElementVisitor, data: D) { + statements.forEach { it.accept(visitor, data) } + } + + override fun transformChildren(transformer: IrElementTransformer, data: D) { + statements.forEachIndexed { i, irStatement -> + statements[i] = irStatement.transform(transformer, data) as IrStatement + } + } +} diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrBody.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrBody.kt index 8e47f184810..02c3e50faff 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrBody.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrBody.kt @@ -17,58 +17,9 @@ package org.jetbrains.kotlin.ir.expressions import org.jetbrains.kotlin.ir.IrElementBase -import org.jetbrains.kotlin.ir.IrStatement -import org.jetbrains.kotlin.ir.declarations.IrFactory import org.jetbrains.kotlin.ir.visitors.IrElementTransformer -import org.jetbrains.kotlin.ir.visitors.IrElementVisitor abstract class IrBody : IrElementBase() { override fun transform(transformer: IrElementTransformer, data: D): IrBody = accept(transformer, data) as IrBody } - -abstract class IrExpressionBody : IrBody() { - abstract val factory: IrFactory - - abstract var expression: IrExpression - - override fun accept(visitor: IrElementVisitor, data: D): R = - visitor.visitExpressionBody(this, data) - - override fun transform(transformer: IrElementTransformer, data: D): IrExpressionBody = - accept(transformer, data) as IrExpressionBody - - override fun acceptChildren(visitor: IrElementVisitor, data: D) { - expression.accept(visitor, data) - } - - override fun transformChildren(transformer: IrElementTransformer, data: D) { - expression = expression.transform(transformer, data) - } -} - -abstract class IrBlockBody : IrBody(), IrStatementContainer { - abstract val factory: IrFactory - - override fun accept(visitor: IrElementVisitor, data: D): R = - visitor.visitBlockBody(this, data) - - override fun acceptChildren(visitor: IrElementVisitor, data: D) { - statements.forEach { it.accept(visitor, data) } - } - - override fun transformChildren(transformer: IrElementTransformer, data: D) { - statements.forEachIndexed { i, irStatement -> - statements[i] = irStatement.transform(transformer, data) as IrStatement - } - } -} - -abstract class IrSyntheticBody : IrBody() { - abstract val kind: IrSyntheticBodyKind -} - -enum class IrSyntheticBodyKind { - ENUM_VALUES, - ENUM_VALUEOF -} diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrBranch.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrBranch.kt new file mode 100644 index 00000000000..13923d01b6d --- /dev/null +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrBranch.kt @@ -0,0 +1,27 @@ +/* + * Copyright 2010-2021 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.ir.expressions + +import org.jetbrains.kotlin.ir.IrElementBase +import org.jetbrains.kotlin.ir.visitors.IrElementTransformer +import org.jetbrains.kotlin.ir.visitors.IrElementVisitor + +abstract class IrBranch : IrElementBase() { + abstract var condition: IrExpression + abstract var result: IrExpression + + abstract override fun transform(transformer: IrElementTransformer, data: D): IrBranch + + override fun acceptChildren(visitor: IrElementVisitor, data: D) { + condition.accept(visitor, data) + result.accept(visitor, data) + } + + override fun transformChildren(transformer: IrElementTransformer, data: D) { + condition = condition.transform(transformer, data) + result = result.transform(transformer, data) + } +} diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrBreak.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrBreak.kt new file mode 100644 index 00000000000..a5947751143 --- /dev/null +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrBreak.kt @@ -0,0 +1,8 @@ +/* + * Copyright 2010-2021 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.ir.expressions + +abstract class IrBreak : IrBreakContinue() diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrBreakContinue.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrBreakContinue.kt index 887a5e94d9a..3dc072998a7 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrBreakContinue.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrBreakContinue.kt @@ -21,7 +21,3 @@ abstract class IrBreakContinue : IrExpression() { var label: String? = null } - -abstract class IrBreak : IrBreakContinue() - -abstract class IrContinue : IrBreakContinue() diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrCallableReference.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrCallableReference.kt index dd9a498be7c..f9afa70fa9e 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrCallableReference.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrCallableReference.kt @@ -16,37 +16,9 @@ package org.jetbrains.kotlin.ir.expressions -import org.jetbrains.kotlin.ir.symbols.* +import org.jetbrains.kotlin.ir.symbols.IrSymbol import org.jetbrains.kotlin.name.Name abstract class IrCallableReference(typeArgumentsCount: Int) : IrMemberAccessExpression(typeArgumentsCount) { abstract val referencedName: Name } - -abstract class IrFunctionReference(typeArgumentsCount: Int) : IrCallableReference(typeArgumentsCount) { - abstract val reflectionTarget: IrFunctionSymbol? -} - -val IrFunctionReference.isWithReflection: Boolean - get() = reflectionTarget != null - -val IrFunctionReference.isAdapterWithReflection: Boolean - get() = reflectionTarget != null && reflectionTarget != symbol - -abstract class IrPropertyReference(typeArgumentsCount: Int) : IrCallableReference(typeArgumentsCount) { - abstract val field: IrFieldSymbol? - abstract val getter: IrSimpleFunctionSymbol? - abstract val setter: IrSimpleFunctionSymbol? - - override val valueArgumentsCount: Int - get() = 0 -} - -abstract class IrLocalDelegatedPropertyReference : IrCallableReference(0) { - abstract val delegate: IrVariableSymbol - abstract val getter: IrSimpleFunctionSymbol - abstract val setter: IrSimpleFunctionSymbol? - - override val valueArgumentsCount: Int - get() = 0 -} diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrCatch.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrCatch.kt new file mode 100644 index 00000000000..cbcdfde56c6 --- /dev/null +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrCatch.kt @@ -0,0 +1,18 @@ +/* + * Copyright 2010-2021 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.ir.expressions + +import org.jetbrains.kotlin.ir.IrElementBase +import org.jetbrains.kotlin.ir.declarations.IrVariable +import org.jetbrains.kotlin.ir.visitors.IrElementTransformer + +abstract class IrCatch : IrElementBase() { + abstract var catchParameter: IrVariable + abstract var result: IrExpression + + override fun transform(transformer: IrElementTransformer, data: D): IrCatch = + super.transform(transformer, data) as IrCatch +} diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrComposite.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrComposite.kt new file mode 100644 index 00000000000..1169c34602e --- /dev/null +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrComposite.kt @@ -0,0 +1,11 @@ +/* + * Copyright 2010-2021 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.ir.expressions + +abstract class IrComposite : IrContainerExpression() { + override val isTransparentScope: Boolean + get() = true +} diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrConst.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrConst.kt index 072dd40ea59..45cb4c9d5a5 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrConst.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrConst.kt @@ -22,22 +22,3 @@ abstract class IrConst : IrExpression() { abstract fun copyWithOffsets(startOffset: Int, endOffset: Int): IrConst } - -sealed class IrConstKind(val asString: kotlin.String) { - @Suppress("UNCHECKED_CAST") - fun valueOf(aConst: IrConst<*>) = - (aConst as IrConst).value - - object Null : IrConstKind("Null") - object Boolean : IrConstKind("Boolean") - object Char : IrConstKind("Char") - object Byte : IrConstKind("Byte") - object Short : IrConstKind("Short") - object Int : IrConstKind("Int") - object Long : IrConstKind("Long") - object String : IrConstKind("String") - object Float : IrConstKind("Float") - object Double : IrConstKind("Double") - - override fun toString() = asString -} diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrConstKind.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrConstKind.kt new file mode 100644 index 00000000000..633e806ff10 --- /dev/null +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrConstKind.kt @@ -0,0 +1,25 @@ +/* + * Copyright 2010-2021 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.ir.expressions + +sealed class IrConstKind(val asString: kotlin.String) { + @Suppress("UNCHECKED_CAST") + fun valueOf(aConst: IrConst<*>) = + (aConst as IrConst).value + + object Null : IrConstKind("Null") + object Boolean : IrConstKind("Boolean") + object Char : IrConstKind("Char") + object Byte : IrConstKind("Byte") + object Short : IrConstKind("Short") + object Int : IrConstKind("Int") + object Long : IrConstKind("Long") + object String : IrConstKind("String") + object Float : IrConstKind("Float") + object Double : IrConstKind("Double") + + override fun toString() = asString +} diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrConstantArray.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrConstantArray.kt new file mode 100644 index 00000000000..d18ab324a1a --- /dev/null +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrConstantArray.kt @@ -0,0 +1,10 @@ +/* + * Copyright 2010-2021 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.ir.expressions + +abstract class IrConstantArray : IrConstantValue() { + abstract val elements: MutableList +} diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrConstantObject.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrConstantObject.kt index cb0e23b6a06..4549bb4b895 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrConstantObject.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrConstantObject.kt @@ -8,21 +8,8 @@ package org.jetbrains.kotlin.ir.expressions import org.jetbrains.kotlin.ir.symbols.IrConstructorSymbol import org.jetbrains.kotlin.ir.types.IrType -abstract class IrConstantValue : IrExpression() { - abstract fun contentEquals(other: IrConstantValue) : Boolean - abstract fun contentHashCode(): Int -} - -abstract class IrConstantPrimitive : IrConstantValue() { - abstract var value: IrConst<*> -} - abstract class IrConstantObject : IrConstantValue() { abstract val constructor: IrConstructorSymbol abstract val valueArguments: MutableList abstract val typeArguments: List } - -abstract class IrConstantArray : IrConstantValue() { - abstract val elements: MutableList -} diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrConstantPrimitive.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrConstantPrimitive.kt new file mode 100644 index 00000000000..916eb63d966 --- /dev/null +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrConstantPrimitive.kt @@ -0,0 +1,10 @@ +/* + * Copyright 2010-2021 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.ir.expressions + +abstract class IrConstantPrimitive : IrConstantValue() { + abstract var value: IrConst<*> +} diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrConstantValue.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrConstantValue.kt new file mode 100644 index 00000000000..632cf1930b3 --- /dev/null +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrConstantValue.kt @@ -0,0 +1,11 @@ +/* + * Copyright 2010-2021 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.ir.expressions + +abstract class IrConstantValue : IrExpression() { + abstract fun contentEquals(other: IrConstantValue): Boolean + abstract fun contentHashCode(): Int +} diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrConstructorCall.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrConstructorCall.kt index 7bcffbb3377..99de850151f 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrConstructorCall.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrConstructorCall.kt @@ -6,7 +6,6 @@ package org.jetbrains.kotlin.ir.expressions import org.jetbrains.kotlin.ir.symbols.IrConstructorSymbol -import org.jetbrains.kotlin.ir.types.IrType abstract class IrConstructorCall( typeArgumentsCount: Int, @@ -15,68 +14,4 @@ abstract class IrConstructorCall( abstract override val symbol: IrConstructorSymbol abstract val constructorTypeArgumentsCount: Int - - class ConstructorTypeArguments(internal val irConstructorCall: IrConstructorCall) : AbstractList() { - override val size: Int - get() = irConstructorCall.constructorTypeArgumentsCount - - override fun get(index: Int): IrType? = - if (index >= size) - throw IndexOutOfBoundsException("index: $index, size: $size") - else - irConstructorCall.getConstructorTypeArgument(index) - } - - class ClassTypeArguments(internal val irConstructorCall: IrConstructorCall) : AbstractList() { - override val size: Int - get() = irConstructorCall.classTypeArgumentsCount - - override fun get(index: Int): IrType? = - if (index >= size) - throw IndexOutOfBoundsException("index: $index, size: $size") - else - irConstructorCall.getTypeArgument(index) - } } - -fun IrConstructorCall.getConstructorTypeArgumentIndex(constructorTypeArgumentIndex: Int) = - typeArgumentsCount - constructorTypeArgumentsCount + constructorTypeArgumentIndex - -fun IrConstructorCall.getConstructorTypeArgument(index: Int): IrType? = - getTypeArgument(getConstructorTypeArgumentIndex(index)) - -fun IrConstructorCall.putConstructorTypeArgument(index: Int, type: IrType?) { - putTypeArgument(getConstructorTypeArgumentIndex(index), type) -} - -operator fun IrConstructorCall.ConstructorTypeArguments.set(index: Int, type: IrType?) { - if (index >= size) throw IndexOutOfBoundsException("index: $index, size: $size") - irConstructorCall.putConstructorTypeArgument(index, type) -} - -val IrConstructorCall.classTypeArgumentsCount: Int - get() = typeArgumentsCount - constructorTypeArgumentsCount - -fun IrConstructorCall.getClassTypeArgument(index: Int): IrType? = - getTypeArgument(index) - -fun IrConstructorCall.putClassTypeArgument(index: Int, type: IrType?) { - putTypeArgument(index, type) -} - -operator fun IrConstructorCall.ClassTypeArguments.set(index: Int, type: IrType?) { - if (index >= size) throw IndexOutOfBoundsException("index: $index, size: $size") - irConstructorCall.putClassTypeArgument(index, type) -} - -fun IrConstructorCall.getConstructorTypeArguments() = - IrConstructorCall.ConstructorTypeArguments(this) - -fun IrConstructorCall.getClassTypeArguments() = - IrConstructorCall.ClassTypeArguments(this) - -var IrConstructorCall.outerClassReceiver: IrExpression? - get() = dispatchReceiver - set(value) { - dispatchReceiver = value - } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrConstructorCallTypeArguments.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrConstructorCallTypeArguments.kt new file mode 100644 index 00000000000..4b704f2ad88 --- /dev/null +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrConstructorCallTypeArguments.kt @@ -0,0 +1,72 @@ +/* + * Copyright 2010-2022 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.ir.expressions + +import org.jetbrains.kotlin.ir.types.IrType + +class ConstructorTypeArguments(internal val irConstructorCall: IrConstructorCall) : AbstractList() { + override val size: Int + get() = irConstructorCall.constructorTypeArgumentsCount + + override fun get(index: Int): IrType? = + if (index >= size) + throw IndexOutOfBoundsException("index: $index, size: $size") + else + irConstructorCall.getConstructorTypeArgument(index) +} + +class ClassTypeArguments(internal val irConstructorCall: IrConstructorCall) : AbstractList() { + override val size: Int + get() = irConstructorCall.classTypeArgumentsCount + + override fun get(index: Int): IrType? = + if (index >= size) + throw IndexOutOfBoundsException("index: $index, size: $size") + else + irConstructorCall.getTypeArgument(index) +} + +fun IrConstructorCall.getConstructorTypeArgumentIndex(constructorTypeArgumentIndex: Int) = + typeArgumentsCount - constructorTypeArgumentsCount + constructorTypeArgumentIndex + +fun IrConstructorCall.getConstructorTypeArgument(index: Int): IrType? = + getTypeArgument(getConstructorTypeArgumentIndex(index)) + +fun IrConstructorCall.putConstructorTypeArgument(index: Int, type: IrType?) { + putTypeArgument(getConstructorTypeArgumentIndex(index), type) +} + +operator fun ConstructorTypeArguments.set(index: Int, type: IrType?) { + if (index >= size) throw IndexOutOfBoundsException("index: $index, size: $size") + irConstructorCall.putConstructorTypeArgument(index, type) +} + +val IrConstructorCall.classTypeArgumentsCount: Int + get() = typeArgumentsCount - constructorTypeArgumentsCount + +fun IrConstructorCall.getClassTypeArgument(index: Int): IrType? = + getTypeArgument(index) + +fun IrConstructorCall.putClassTypeArgument(index: Int, type: IrType?) { + putTypeArgument(index, type) +} + +operator fun ClassTypeArguments.set(index: Int, type: IrType?) { + if (index >= size) throw IndexOutOfBoundsException("index: $index, size: $size") + irConstructorCall.putClassTypeArgument(index, type) +} + +fun IrConstructorCall.getConstructorTypeArguments() = + ConstructorTypeArguments(this) + +fun IrConstructorCall.getClassTypeArguments() = + ClassTypeArguments(this) + +var IrConstructorCall.outerClassReceiver: IrExpression? + get() = dispatchReceiver + set(value) { + dispatchReceiver = value + } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrContainerExpression.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrContainerExpression.kt new file mode 100644 index 00000000000..f982c9ddbc0 --- /dev/null +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrContainerExpression.kt @@ -0,0 +1,26 @@ +/* + * Copyright 2010-2021 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.ir.expressions + +import org.jetbrains.kotlin.ir.IrStatement +import org.jetbrains.kotlin.ir.util.transformInPlace +import org.jetbrains.kotlin.ir.visitors.IrElementTransformer +import org.jetbrains.kotlin.ir.visitors.IrElementVisitor + +abstract class IrContainerExpression : IrExpression(), IrStatementContainer { + abstract val origin: IrStatementOrigin? + abstract val isTransparentScope: Boolean + + override val statements: MutableList = ArrayList(2) + + override fun acceptChildren(visitor: IrElementVisitor, data: D) { + statements.forEach { it.accept(visitor, data) } + } + + override fun transformChildren(transformer: IrElementTransformer, data: D) { + statements.transformInPlace(transformer, data) + } +} diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrContinue.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrContinue.kt new file mode 100644 index 00000000000..205462c3f8d --- /dev/null +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrContinue.kt @@ -0,0 +1,8 @@ +/* + * Copyright 2010-2021 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.ir.expressions + +abstract class IrContinue : IrBreakContinue() diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrDeclarationReference.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrDeclarationReference.kt index 8536230156d..371ee67e2fb 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrDeclarationReference.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrDeclarationReference.kt @@ -16,31 +16,8 @@ package org.jetbrains.kotlin.ir.expressions -import org.jetbrains.kotlin.ir.symbols.IrClassSymbol -import org.jetbrains.kotlin.ir.symbols.IrEnumEntrySymbol -import org.jetbrains.kotlin.ir.symbols.IrFunctionSymbol import org.jetbrains.kotlin.ir.symbols.IrSymbol abstract class IrDeclarationReference : IrExpression() { abstract val symbol: IrSymbol } - -abstract class IrGetSingletonValue : IrDeclarationReference() - -abstract class IrGetObjectValue : IrGetSingletonValue() { - abstract override val symbol: IrClassSymbol -} - -abstract class IrGetEnumValue : IrGetSingletonValue() { - abstract override val symbol: IrEnumEntrySymbol -} - -/** - * Platform-specific low-level reference to function. - * - * On JS platform it represents a plain reference to JavaScript function. - * On JVM platform it represents a MethodHandle constant. - */ -abstract class IrRawFunctionReference : IrDeclarationReference() { - abstract override val symbol: IrFunctionSymbol -} diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrDoWhileLoop.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrDoWhileLoop.kt new file mode 100644 index 00000000000..6ce69b4645c --- /dev/null +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrDoWhileLoop.kt @@ -0,0 +1,8 @@ +/* + * Copyright 2010-2021 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.ir.expressions + +abstract class IrDoWhileLoop : IrLoop() diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrDynamicExpression.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrDynamicExpression.kt new file mode 100644 index 00000000000..9979eaa27aa --- /dev/null +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrDynamicExpression.kt @@ -0,0 +1,8 @@ +/* + * Copyright 2010-2021 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.ir.expressions + +abstract class IrDynamicExpression : IrExpression() diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrDynamicMemberExpression.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrDynamicMemberExpression.kt new file mode 100644 index 00000000000..9c5ca9e8831 --- /dev/null +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrDynamicMemberExpression.kt @@ -0,0 +1,12 @@ +/* + * Copyright 2010-2021 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.ir.expressions + +abstract class IrDynamicMemberExpression : IrDynamicExpression() { + abstract val memberName: String + + abstract var receiver: IrExpression +} diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrDynamicOperator.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrDynamicOperator.kt index fd0ba59fba9..3f0146cf366 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrDynamicOperator.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrDynamicOperator.kt @@ -5,37 +5,6 @@ package org.jetbrains.kotlin.ir.expressions -abstract class IrDynamicExpression : IrExpression() - -abstract class IrDynamicOperatorExpression : IrDynamicExpression() { - abstract val operator: IrDynamicOperator - - abstract var receiver: IrExpression - - abstract val arguments: MutableList -} - -var IrDynamicOperatorExpression.left: IrExpression - get() = receiver - set(value) { - receiver = value - } - -var IrDynamicOperatorExpression.right: IrExpression - get() = arguments[0] - set(value) { - if (arguments.isEmpty()) - arguments.add(value) - else - arguments[0] = value - } - -abstract class IrDynamicMemberExpression : IrDynamicExpression() { - abstract val memberName: String - - abstract var receiver: IrExpression -} - enum class IrDynamicOperator(val image: String, val isAssignmentOperator: Boolean = false) { UNARY_PLUS("+"), UNARY_MINUS("-"), diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrDynamicOperatorExpression.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrDynamicOperatorExpression.kt new file mode 100644 index 00000000000..67b0177653f --- /dev/null +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrDynamicOperatorExpression.kt @@ -0,0 +1,14 @@ +/* + * Copyright 2010-2021 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.ir.expressions + +abstract class IrDynamicOperatorExpression : IrDynamicExpression() { + abstract val operator: IrDynamicOperator + + abstract var receiver: IrExpression + + abstract val arguments: MutableList +} diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrElseBranch.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrElseBranch.kt new file mode 100644 index 00000000000..f82b0b2328c --- /dev/null +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrElseBranch.kt @@ -0,0 +1,8 @@ +/* + * Copyright 2010-2021 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.ir.expressions + +abstract class IrElseBranch : IrBranch() diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrErrorCallExpression.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrErrorCallExpression.kt new file mode 100644 index 00000000000..5759aa5ebd2 --- /dev/null +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrErrorCallExpression.kt @@ -0,0 +1,11 @@ +/* + * Copyright 2010-2021 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.ir.expressions + +abstract class IrErrorCallExpression : IrErrorExpression() { + abstract var explicitReceiver: IrExpression? + abstract val arguments: MutableList +} diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrErrorExpression.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrErrorExpression.kt index f1daebf5a45..efb0d88076a 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrErrorExpression.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrErrorExpression.kt @@ -19,8 +19,3 @@ package org.jetbrains.kotlin.ir.expressions abstract class IrErrorExpression : IrExpression() { abstract val description: String } - -abstract class IrErrorCallExpression : IrErrorExpression() { - abstract var explicitReceiver: IrExpression? - abstract val arguments: MutableList -} diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrExpressionBody.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrExpressionBody.kt new file mode 100644 index 00000000000..11de31b0336 --- /dev/null +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrExpressionBody.kt @@ -0,0 +1,30 @@ +/* + * Copyright 2010-2021 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.ir.expressions + +import org.jetbrains.kotlin.ir.declarations.IrFactory +import org.jetbrains.kotlin.ir.visitors.IrElementTransformer +import org.jetbrains.kotlin.ir.visitors.IrElementVisitor + +abstract class IrExpressionBody : IrBody() { + abstract val factory: IrFactory + + abstract var expression: IrExpression + + override fun accept(visitor: IrElementVisitor, data: D): R = + visitor.visitExpressionBody(this, data) + + override fun transform(transformer: IrElementTransformer, data: D): IrExpressionBody = + accept(transformer, data) as IrExpressionBody + + override fun acceptChildren(visitor: IrElementVisitor, data: D) { + expression.accept(visitor, data) + } + + override fun transformChildren(transformer: IrElementTransformer, data: D) { + expression = expression.transform(transformer, data) + } +} diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrExpressions.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrExpressions.kt new file mode 100644 index 00000000000..63532fb4a72 --- /dev/null +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrExpressions.kt @@ -0,0 +1,38 @@ +/* + * Copyright 2010-2021 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.ir.expressions + +import org.jetbrains.kotlin.ir.declarations.IrValueParameter +import org.jetbrains.kotlin.ir.symbols.IrFileSymbol +import org.jetbrains.kotlin.ir.util.fileOrNull + +@Suppress("unused") // Used in kotlin-native +val IrReturnableBlock.sourceFileSymbol: IrFileSymbol? + get() = inlineFunctionSymbol?.owner?.fileOrNull?.symbol + +val IrFunctionReference.isWithReflection: Boolean + get() = reflectionTarget != null + +val IrFunctionReference.isAdapterWithReflection: Boolean + get() = reflectionTarget != null && reflectionTarget != symbol + +var IrDynamicOperatorExpression.left: IrExpression + get() = receiver + set(value) { + receiver = value + } + +var IrDynamicOperatorExpression.right: IrExpression + get() = arguments[0] + set(value) { + if (arguments.isEmpty()) + arguments.add(value) + else + arguments[0] = value + } + +fun IrFunctionAccessExpression.putArgument(parameter: IrValueParameter, argument: IrExpression): Unit = + putArgument(symbol.owner, parameter, argument) diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrFieldAccessExpression.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrFieldAccessExpression.kt index 44d8ff48268..3ed22195615 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrFieldAccessExpression.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrFieldAccessExpression.kt @@ -27,9 +27,3 @@ abstract class IrFieldAccessExpression : IrDeclarationReference() { var receiver: IrExpression? = null abstract val origin: IrStatementOrigin? } - -abstract class IrGetField : IrFieldAccessExpression() - -abstract class IrSetField : IrFieldAccessExpression() { - abstract var value: IrExpression -} diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrFunctionAccessExpression.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrFunctionAccessExpression.kt index 925709b59de..df19147f4c3 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrFunctionAccessExpression.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrFunctionAccessExpression.kt @@ -5,7 +5,6 @@ package org.jetbrains.kotlin.ir.expressions -import org.jetbrains.kotlin.ir.declarations.IrValueParameter import org.jetbrains.kotlin.ir.symbols.IrFunctionSymbol import org.jetbrains.kotlin.ir.visitors.IrElementTransformer import org.jetbrains.kotlin.ir.visitors.IrElementVisitor @@ -51,6 +50,3 @@ abstract class IrFunctionAccessExpression( } } } - -fun IrFunctionAccessExpression.putArgument(parameter: IrValueParameter, argument: IrExpression) = - putArgument(symbol.owner, parameter, argument) diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrFunctionReference.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrFunctionReference.kt new file mode 100644 index 00000000000..eb3ce7908fa --- /dev/null +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrFunctionReference.kt @@ -0,0 +1,12 @@ +/* + * Copyright 2010-2021 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.ir.expressions + +import org.jetbrains.kotlin.ir.symbols.IrFunctionSymbol + +abstract class IrFunctionReference(typeArgumentsCount: Int) : IrCallableReference(typeArgumentsCount) { + abstract val reflectionTarget: IrFunctionSymbol? +} diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrGetEnumValue.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrGetEnumValue.kt new file mode 100644 index 00000000000..1a05cd98b99 --- /dev/null +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrGetEnumValue.kt @@ -0,0 +1,12 @@ +/* + * Copyright 2010-2021 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.ir.expressions + +import org.jetbrains.kotlin.ir.symbols.IrEnumEntrySymbol + +abstract class IrGetEnumValue : IrGetSingletonValue() { + abstract override val symbol: IrEnumEntrySymbol +} diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrGetField.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrGetField.kt new file mode 100644 index 00000000000..3807a7c9cac --- /dev/null +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrGetField.kt @@ -0,0 +1,8 @@ +/* + * Copyright 2010-2021 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.ir.expressions + +abstract class IrGetField : IrFieldAccessExpression() diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrGetObjectValue.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrGetObjectValue.kt new file mode 100644 index 00000000000..c3ac6bcd457 --- /dev/null +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrGetObjectValue.kt @@ -0,0 +1,12 @@ +/* + * Copyright 2010-2021 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.ir.expressions + +import org.jetbrains.kotlin.ir.symbols.IrClassSymbol + +abstract class IrGetObjectValue : IrGetSingletonValue() { + abstract override val symbol: IrClassSymbol +} diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrGetSingletonValue.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrGetSingletonValue.kt new file mode 100644 index 00000000000..5783e90abfb --- /dev/null +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrGetSingletonValue.kt @@ -0,0 +1,8 @@ +/* + * Copyright 2010-2021 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.ir.expressions + +abstract class IrGetSingletonValue : IrDeclarationReference() diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrGetValue.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrGetValue.kt new file mode 100644 index 00000000000..30eb6299aff --- /dev/null +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrGetValue.kt @@ -0,0 +1,10 @@ +/* + * Copyright 2010-2021 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.ir.expressions + +abstract class IrGetValue : IrValueAccessExpression() { + abstract fun copyWithOffsets(newStartOffset: Int, newEndOffset: Int): IrGetValue +} diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrLocalDelegatedPropertyReference.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrLocalDelegatedPropertyReference.kt new file mode 100644 index 00000000000..56e73f4fe6e --- /dev/null +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrLocalDelegatedPropertyReference.kt @@ -0,0 +1,19 @@ +/* + * Copyright 2010-2021 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.ir.expressions + +import org.jetbrains.kotlin.ir.symbols.IrLocalDelegatedPropertySymbol +import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol +import org.jetbrains.kotlin.ir.symbols.IrVariableSymbol + +abstract class IrLocalDelegatedPropertyReference : IrCallableReference(0) { + abstract val delegate: IrVariableSymbol + abstract val getter: IrSimpleFunctionSymbol + abstract val setter: IrSimpleFunctionSymbol? + + override val valueArgumentsCount: Int + get() = 0 +} diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrLoop.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrLoop.kt index ff67c43d0f2..2fefd123765 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrLoop.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrLoop.kt @@ -23,7 +23,3 @@ abstract class IrLoop : IrExpression() { lateinit var condition: IrExpression var label: String? = null } - -abstract class IrWhileLoop : IrLoop() - -abstract class IrDoWhileLoop : IrLoop() diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrPropertyReference.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrPropertyReference.kt new file mode 100644 index 00000000000..344f373638d --- /dev/null +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrPropertyReference.kt @@ -0,0 +1,19 @@ +/* + * Copyright 2010-2021 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.ir.expressions + +import org.jetbrains.kotlin.ir.symbols.IrFieldSymbol +import org.jetbrains.kotlin.ir.symbols.IrPropertySymbol +import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol + +abstract class IrPropertyReference(typeArgumentsCount: Int) : IrCallableReference(typeArgumentsCount) { + abstract val field: IrFieldSymbol? + abstract val getter: IrSimpleFunctionSymbol? + abstract val setter: IrSimpleFunctionSymbol? + + override val valueArgumentsCount: Int + get() = 0 +} diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrRawFunctionReference.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrRawFunctionReference.kt new file mode 100644 index 00000000000..afd71f289a6 --- /dev/null +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrRawFunctionReference.kt @@ -0,0 +1,18 @@ +/* + * Copyright 2010-2021 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.ir.expressions + +import org.jetbrains.kotlin.ir.symbols.IrFunctionSymbol + +/** + * Platform-specific low-level reference to function. + * + * On JS platform it represents a plain reference to JavaScript function. + * On JVM platform it represents a MethodHandle constant. + */ +abstract class IrRawFunctionReference : IrDeclarationReference() { + abstract override val symbol: IrFunctionSymbol +} diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrReturnableBlock.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrReturnableBlock.kt new file mode 100644 index 00000000000..6c214f0e75c --- /dev/null +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrReturnableBlock.kt @@ -0,0 +1,17 @@ +/* + * Copyright 2010-2021 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.ir.expressions + +import org.jetbrains.kotlin.ir.declarations.IrReturnTarget +import org.jetbrains.kotlin.ir.declarations.IrSymbolOwner +import org.jetbrains.kotlin.ir.symbols.IrFunctionSymbol +import org.jetbrains.kotlin.ir.symbols.IrReturnableBlockSymbol + +abstract class IrReturnableBlock : IrBlock(), IrSymbolOwner, IrReturnTarget { + abstract override val symbol: IrReturnableBlockSymbol + + abstract val inlineFunctionSymbol: IrFunctionSymbol? +} diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrSetField.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrSetField.kt new file mode 100644 index 00000000000..ae041eaddf0 --- /dev/null +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrSetField.kt @@ -0,0 +1,10 @@ +/* + * Copyright 2010-2021 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.ir.expressions + +abstract class IrSetField : IrFieldAccessExpression() { + abstract var value: IrExpression +} diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrSetValue.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrSetValue.kt new file mode 100644 index 00000000000..9f68bea6603 --- /dev/null +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrSetValue.kt @@ -0,0 +1,13 @@ +/* + * Copyright 2010-2021 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.ir.expressions + +import org.jetbrains.kotlin.ir.symbols.IrValueSymbol + +abstract class IrSetValue : IrValueAccessExpression() { + abstract override val symbol: IrValueSymbol + abstract var value: IrExpression +} diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrSpreadElement.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrSpreadElement.kt new file mode 100644 index 00000000000..79179fec432 --- /dev/null +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrSpreadElement.kt @@ -0,0 +1,17 @@ +/* + * Copyright 2010-2021 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.ir.expressions + +import org.jetbrains.kotlin.ir.IrElement +import org.jetbrains.kotlin.ir.IrElementBase +import org.jetbrains.kotlin.ir.visitors.IrElementTransformer + +abstract class IrSpreadElement : IrElementBase(), IrVarargElement { + abstract var expression: IrExpression + + override fun transform(transformer: IrElementTransformer, data: D): IrElement = + accept(transformer, data) as IrSpreadElement +} diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrSuspendableExpression.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrSuspendableExpression.kt new file mode 100644 index 00000000000..5b63ff76d08 --- /dev/null +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrSuspendableExpression.kt @@ -0,0 +1,11 @@ +/* + * Copyright 2010-2021 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.ir.expressions + +abstract class IrSuspendableExpression : IrExpression() { + abstract var suspensionPointId: IrExpression + abstract var result: IrExpression +} diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrSuspend.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrSuspensionPoint.kt similarity index 77% rename from compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrSuspend.kt rename to compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrSuspensionPoint.kt index ace48381431..a71cea4140d 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrSuspend.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrSuspensionPoint.kt @@ -12,8 +12,3 @@ abstract class IrSuspensionPoint : IrExpression() { abstract var result: IrExpression abstract var resumeResult: IrExpression } - -abstract class IrSuspendableExpression : IrExpression() { - abstract var suspensionPointId: IrExpression - abstract var result: IrExpression -} diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrSyntheticBody.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrSyntheticBody.kt new file mode 100644 index 00000000000..0faa852b399 --- /dev/null +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrSyntheticBody.kt @@ -0,0 +1,10 @@ +/* + * Copyright 2010-2021 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.ir.expressions + +abstract class IrSyntheticBody : IrBody() { + abstract val kind: IrSyntheticBodyKind +} diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrSyntheticBodyKind.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrSyntheticBodyKind.kt new file mode 100644 index 00000000000..ecc3c7aceff --- /dev/null +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrSyntheticBodyKind.kt @@ -0,0 +1,11 @@ +/* + * Copyright 2010-2021 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.ir.expressions + +enum class IrSyntheticBodyKind { + ENUM_VALUES, + ENUM_VALUEOF +} diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrTry.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrTry.kt index d43471e0b6e..f4d342d90e8 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrTry.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrTry.kt @@ -16,10 +16,6 @@ package org.jetbrains.kotlin.ir.expressions -import org.jetbrains.kotlin.ir.IrElementBase -import org.jetbrains.kotlin.ir.declarations.IrVariable -import org.jetbrains.kotlin.ir.visitors.IrElementTransformer - abstract class IrTry : IrExpression() { abstract var tryResult: IrExpression @@ -27,11 +23,3 @@ abstract class IrTry : IrExpression() { abstract var finallyExpression: IrExpression? } - -abstract class IrCatch : IrElementBase() { - abstract var catchParameter: IrVariable - abstract var result: IrExpression - - override fun transform(transformer: IrElementTransformer, data: D): IrCatch = - super.transform(transformer, data) as IrCatch -} diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrTypeOperator.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrTypeOperator.kt index cd9f97dbdb0..1da61cdf118 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrTypeOperator.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrTypeOperator.kt @@ -16,9 +16,6 @@ package org.jetbrains.kotlin.ir.expressions -import org.jetbrains.kotlin.ir.symbols.IrClassifierSymbol -import org.jetbrains.kotlin.ir.types.IrType - enum class IrTypeOperator { /** Explicit cast: `e as Type` */ CAST, @@ -65,10 +62,3 @@ enum class IrTypeOperator { */ REINTERPRET_CAST; } - -abstract class IrTypeOperatorCall : IrExpression() { - abstract val operator: IrTypeOperator - abstract var argument: IrExpression - abstract var typeOperand: IrType - abstract val typeOperandClassifier: IrClassifierSymbol -} diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrTypeOperatorCall.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrTypeOperatorCall.kt new file mode 100644 index 00000000000..2ca879c1efa --- /dev/null +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrTypeOperatorCall.kt @@ -0,0 +1,16 @@ +/* + * Copyright 2010-2021 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.ir.expressions + +import org.jetbrains.kotlin.ir.symbols.IrClassifierSymbol +import org.jetbrains.kotlin.ir.types.IrType + +abstract class IrTypeOperatorCall : IrExpression() { + abstract val operator: IrTypeOperator + abstract var argument: IrExpression + abstract var typeOperand: IrType + abstract val typeOperandClassifier: IrClassifierSymbol +} diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrValueAccessExpression.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrValueAccessExpression.kt index dd206877663..24a2243d2e6 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrValueAccessExpression.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrValueAccessExpression.kt @@ -22,12 +22,3 @@ abstract class IrValueAccessExpression : IrDeclarationReference() { abstract override val symbol: IrValueSymbol abstract val origin: IrStatementOrigin? } - -abstract class IrGetValue : IrValueAccessExpression() { - abstract fun copyWithOffsets(newStartOffset: Int, newEndOffset: Int): IrGetValue -} - -abstract class IrSetValue : IrValueAccessExpression() { - abstract override val symbol: IrValueSymbol - abstract var value: IrExpression -} diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrVararg.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrVararg.kt index d26b0bca630..148e0015620 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrVararg.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrVararg.kt @@ -16,12 +16,7 @@ package org.jetbrains.kotlin.ir.expressions -import org.jetbrains.kotlin.ir.IrElement -import org.jetbrains.kotlin.ir.IrElementBase import org.jetbrains.kotlin.ir.types.IrType -import org.jetbrains.kotlin.ir.visitors.IrElementTransformer - -interface IrVarargElement : IrElement abstract class IrVararg : IrExpression() { abstract var varargElementType: IrType @@ -30,10 +25,3 @@ abstract class IrVararg : IrExpression() { abstract fun putElement(i: Int, element: IrVarargElement) } - -abstract class IrSpreadElement : IrElementBase(), IrVarargElement { - abstract var expression: IrExpression - - override fun transform(transformer: IrElementTransformer, data: D): IrElement = - accept(transformer, data) as IrSpreadElement -} diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrVarargElement.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrVarargElement.kt new file mode 100644 index 00000000000..6ca1c3dd51a --- /dev/null +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrVarargElement.kt @@ -0,0 +1,10 @@ +/* + * Copyright 2010-2021 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.ir.expressions + +import org.jetbrains.kotlin.ir.IrElement + +interface IrVarargElement : IrElement diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrWhen.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrWhen.kt index 5bf17f0825d..caf6c6fbaca 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrWhen.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrWhen.kt @@ -16,7 +16,6 @@ package org.jetbrains.kotlin.ir.expressions -import org.jetbrains.kotlin.ir.IrElementBase import org.jetbrains.kotlin.ir.visitors.IrElementTransformer import org.jetbrains.kotlin.ir.visitors.IrElementVisitor @@ -38,22 +37,3 @@ abstract class IrWhen : IrExpression() { } } } - -abstract class IrBranch : IrElementBase() { - abstract var condition: IrExpression - abstract var result: IrExpression - - abstract override fun transform(transformer: IrElementTransformer, data: D): IrBranch - - override fun acceptChildren(visitor: IrElementVisitor, data: D) { - condition.accept(visitor, data) - result.accept(visitor, data) - } - - override fun transformChildren(transformer: IrElementTransformer, data: D) { - condition = condition.transform(transformer, data) - result = result.transform(transformer, data) - } -} - -abstract class IrElseBranch : IrBranch() diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrWhileLoop.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrWhileLoop.kt new file mode 100644 index 00000000000..6f586d1d0ae --- /dev/null +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrWhileLoop.kt @@ -0,0 +1,8 @@ +/* + * Copyright 2010-2021 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.ir.expressions + +abstract class IrWhileLoop : IrLoop() diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/visitors/IrElementVisitorVoid.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/visitors/IrElementVisitorVoid.kt index 17a3813ba46..67cfc0efc8e 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/visitors/IrElementVisitorVoid.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/visitors/IrElementVisitorVoid.kt @@ -278,11 +278,3 @@ interface IrElementVisitorVoid : IrElementVisitor { fun visitErrorCallExpression(expression: IrErrorCallExpression) = visitErrorExpression(expression) override fun visitErrorCallExpression(expression: IrErrorCallExpression, data: Nothing?) = visitErrorCallExpression(expression) } - -fun IrElement.acceptVoid(visitor: IrElementVisitorVoid) { - accept(visitor, null) -} - -fun IrElement.acceptChildrenVoid(visitor: IrElementVisitorVoid) { - acceptChildren(visitor, null) -} \ No newline at end of file diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/visitors/IrVisitors.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/visitors/IrVisitors.kt new file mode 100644 index 00000000000..ce87dbebf65 --- /dev/null +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/visitors/IrVisitors.kt @@ -0,0 +1,16 @@ +/* + * Copyright 2010-2022 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.ir.visitors + +import org.jetbrains.kotlin.ir.IrElement + +fun IrElement.acceptVoid(visitor: IrElementVisitorVoid) { + accept(visitor, null) +} + +fun IrElement.acceptChildrenVoid(visitor: IrElementVisitorVoid) { + acceptChildren(visitor, null) +}