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) +}