From 4351f5235b1cdb79a057f10f5da260176897dc9a Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Wed, 22 Jul 2020 21:46:03 +0200 Subject: [PATCH] IR: make IrExpression and subtypes classes --- .../lower/coroutines/StateMachineBuilder.kt | 2 +- .../kotlin/ir/expressions/IrBlock.kt | 31 +++++++++++----- .../kotlin/ir/expressions/IrBreakContinue.kt | 11 +++--- .../kotlin/ir/expressions/IrConst.kt | 9 +++-- .../ir/expressions/IrDeclarationReference.kt | 3 +- .../ir/expressions/IrDynamicExpression.kt | 19 +++++----- .../ir/expressions/IrErrorExpression.kt | 11 +++--- .../kotlin/ir/expressions/IrExpression.kt | 17 +++++++-- .../ir/expressions/IrFunctionExpression.kt | 9 ++--- .../kotlin/ir/expressions/IrGetClass.kt | 6 ++-- .../expressions/IrInstanceInitializerCall.kt | 4 +-- .../jetbrains/kotlin/ir/expressions/IrLoop.kt | 15 ++++---- .../kotlin/ir/expressions/IrReturn.kt | 6 ++-- .../ir/expressions/IrStringConcatenation.kt | 8 ++--- .../kotlin/ir/expressions/IrSuspend.kt | 15 ++++---- .../kotlin/ir/expressions/IrThrow.kt | 6 ++-- .../jetbrains/kotlin/ir/expressions/IrTry.kt | 8 ++--- .../ir/expressions/IrTypeOperatorCall.kt | 20 ++++++++--- .../kotlin/ir/expressions/IrVararg.kt | 9 +++-- .../jetbrains/kotlin/ir/expressions/IrWhen.kt | 20 +++++++++-- .../kotlin/ir/expressions/impl/IrBlockImpl.kt | 4 +-- .../expressions/impl/IrBreakContinueBase.kt | 23 ------------ .../kotlin/ir/expressions/impl/IrBreakImpl.kt | 2 +- .../ir/expressions/impl/IrCompositeImpl.kt | 2 +- .../kotlin/ir/expressions/impl/IrConstImpl.kt | 2 +- .../impl/IrContainerExpressionBase.kt | 36 ------------------- .../ir/expressions/impl/IrContinueImpl.kt | 2 +- .../ir/expressions/impl/IrDoWhileLoopImpl.kt | 2 +- .../impl/IrDynamicMemberExpressionImpl.kt | 2 +- .../impl/IrDynamicOperatorExpressionImpl.kt | 2 +- .../impl/IrErrorCallExpressionImpl.kt | 2 +- .../expressions/impl/IrErrorExpressionImpl.kt | 2 +- .../ir/expressions/impl/IrExpressionBase.kt | 36 ------------------- .../impl/IrFunctionExpressionImpl.kt | 2 +- .../ir/expressions/impl/IrGetClassImpl.kt | 2 +- .../ir/expressions/impl/IrIfThenElseImpl.kt | 3 +- .../impl/IrInstanceInitializerCallImpl.kt | 2 +- .../kotlin/ir/expressions/impl/IrLoopBase.kt | 28 --------------- .../ir/expressions/impl/IrReturnImpl.kt | 2 +- .../impl/IrStringConcatenationImpl.kt | 2 +- .../ir/expressions/impl/IrSuspendImpl.kt | 5 ++- .../kotlin/ir/expressions/impl/IrThrowImpl.kt | 2 +- .../kotlin/ir/expressions/impl/IrTryImpl.kt | 2 +- .../impl/IrTypeOperatorCallImpl.kt | 2 +- .../ir/expressions/impl/IrVarargImpl.kt | 2 +- .../kotlin/ir/expressions/impl/IrWhenImpl.kt | 17 +-------- .../ir/expressions/impl/IrWhileLoopImpl.kt | 2 +- 47 files changed, 164 insertions(+), 255 deletions(-) delete mode 100644 compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrBreakContinueBase.kt delete mode 100644 compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrContainerExpressionBase.kt delete mode 100644 compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrExpressionBase.kt delete mode 100644 compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrLoopBase.kt diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/coroutines/StateMachineBuilder.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/coroutines/StateMachineBuilder.kt index c43d3bc24f1..a385f139f65 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/coroutines/StateMachineBuilder.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/coroutines/StateMachineBuilder.kt @@ -42,7 +42,7 @@ data class LoopBounds(val headState: SuspendState, val exitState: SuspendState) data class TryState(val tryState: SuspendState, val catchState: SuspendState) -class IrDispatchPoint(val target: SuspendState) : IrExpressionBase() { +class IrDispatchPoint(val target: SuspendState) : IrExpression() { override val startOffset: Int get() = UNDEFINED_OFFSET override val endOffset: Int get() = UNDEFINED_OFFSET 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 ffd26761fdf..d2392847bf3 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,31 +16,46 @@ 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.file +import org.jetbrains.kotlin.ir.util.transform +import org.jetbrains.kotlin.ir.visitors.IrElementTransformer +import org.jetbrains.kotlin.ir.visitors.IrElementVisitor -interface IrContainerExpression : IrExpression, IrStatementContainer { - val origin: IrStatementOrigin? - val isTransparentScope: Boolean +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.transform { it.transform(transformer, data) } + } } -interface IrBlock : IrContainerExpression { +abstract class IrBlock : IrContainerExpression() { override val isTransparentScope: Boolean get() = false } -interface IrComposite : IrContainerExpression { +abstract class IrComposite : IrContainerExpression() { override val isTransparentScope: Boolean get() = true } -interface IrReturnableBlock : IrBlock, IrSymbolOwner, IrReturnTarget { - override val symbol: IrReturnableBlockSymbol - val inlineFunctionSymbol: IrFunctionSymbol? +abstract class IrReturnableBlock : IrBlock(), IrSymbolOwner, IrReturnTarget { + abstract override val symbol: IrReturnableBlockSymbol + + abstract val inlineFunctionSymbol: IrFunctionSymbol? } val IrReturnableBlock.sourceFileSymbol: IrFileSymbol? 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 7ddb76cddc4..887a5e94d9a 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 @@ -16,11 +16,12 @@ package org.jetbrains.kotlin.ir.expressions -interface IrBreakContinue : IrExpression { - var loop: IrLoop - val label: String? +abstract class IrBreakContinue : IrExpression() { + abstract var loop: IrLoop + + var label: String? = null } -interface IrBreak : IrBreakContinue +abstract class IrBreak : IrBreakContinue() -interface IrContinue : IrBreakContinue +abstract class IrContinue : IrBreakContinue() 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 879d5e85daf..c29a8d3422b 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 @@ -16,11 +16,11 @@ package org.jetbrains.kotlin.ir.expressions -interface IrConst : IrExpression, IrExpressionWithCopy { - val kind: IrConstKind - val value: T +abstract class IrConst : IrExpression(), IrExpressionWithCopy { + abstract val kind: IrConstKind + abstract val value: T - override fun copy(): IrConst + abstract override fun copy(): IrConst } sealed class IrConstKind(val asString: kotlin.String) { @@ -41,4 +41,3 @@ sealed class IrConstKind(val asString: kotlin.String) { override fun toString() = asString } - 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 06e60767d88..494d19052d3 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,13 +16,12 @@ package org.jetbrains.kotlin.ir.expressions -import org.jetbrains.kotlin.ir.expressions.impl.IrExpressionBase 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 : IrExpressionBase() { +abstract class IrDeclarationReference : IrExpression() { abstract val symbol: IrSymbol } 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 index 771742c91ac..fd0ba59fba9 100644 --- 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 @@ -5,14 +5,14 @@ package org.jetbrains.kotlin.ir.expressions -interface IrDynamicExpression : IrExpression +abstract class IrDynamicExpression : IrExpression() -interface IrDynamicOperatorExpression : IrDynamicExpression { - val operator: IrDynamicOperator +abstract class IrDynamicOperatorExpression : IrDynamicExpression() { + abstract val operator: IrDynamicOperator - var receiver: IrExpression + abstract var receiver: IrExpression - val arguments: MutableList + abstract val arguments: MutableList } var IrDynamicOperatorExpression.left: IrExpression @@ -30,9 +30,10 @@ var IrDynamicOperatorExpression.right: IrExpression arguments[0] = value } -interface IrDynamicMemberExpression : IrDynamicExpression { - val memberName: String - var receiver: IrExpression +abstract class IrDynamicMemberExpression : IrDynamicExpression() { + abstract val memberName: String + + abstract var receiver: IrExpression } enum class IrDynamicOperator(val image: String, val isAssignmentOperator: Boolean = false) { @@ -69,4 +70,4 @@ enum class IrDynamicOperator(val image: String, val isAssignmentOperator: Boolea ARRAY_ACCESS("[]"), INVOKE("()") -} \ No newline at end of file +} 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 3b0be2b8891..f1daebf5a45 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 @@ -16,12 +16,11 @@ package org.jetbrains.kotlin.ir.expressions -interface IrErrorExpression : IrExpression { - val description: String +abstract class IrErrorExpression : IrExpression() { + abstract val description: String } -interface IrErrorCallExpression : IrErrorExpression { - var explicitReceiver: IrExpression? - val arguments: MutableList +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/IrExpression.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrExpression.kt index 0eb33e206ee..7edc0bb7cee 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrExpression.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrExpression.kt @@ -16,16 +16,29 @@ package org.jetbrains.kotlin.ir.expressions +import org.jetbrains.kotlin.ir.IrElementBase import org.jetbrains.kotlin.ir.IrStatement import org.jetbrains.kotlin.ir.declarations.IrAttributeContainer import org.jetbrains.kotlin.ir.types.IrType import org.jetbrains.kotlin.ir.visitors.IrElementTransformer +import org.jetbrains.kotlin.ir.visitors.IrElementVisitor -interface IrExpression : IrStatement, IrVarargElement, IrAttributeContainer { - val type: IrType +abstract class IrExpression : IrElementBase(), IrStatement, IrVarargElement, IrAttributeContainer { + @Suppress("LeakingThis") + override var attributeOwnerId: IrAttributeContainer = this + + abstract val type: IrType override fun transform(transformer: IrElementTransformer, data: D): IrExpression = accept(transformer, data) as IrExpression + + override fun acceptChildren(visitor: IrElementVisitor, data: D) { + // No children by default + } + + override fun transformChildren(transformer: IrElementTransformer, data: D) { + // No children by default + } } interface IrExpressionWithCopy { diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrFunctionExpression.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrFunctionExpression.kt index b28365a200f..3f83058a4e6 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrFunctionExpression.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrFunctionExpression.kt @@ -7,7 +7,8 @@ package org.jetbrains.kotlin.ir.expressions import org.jetbrains.kotlin.ir.declarations.IrSimpleFunction -interface IrFunctionExpression : IrExpression { - val origin: IrStatementOrigin - var function: IrSimpleFunction -} \ No newline at end of file +abstract class IrFunctionExpression : IrExpression() { + abstract val origin: IrStatementOrigin + + abstract var function: IrSimpleFunction +} diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrGetClass.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrGetClass.kt index eb8046958da..030a11e9a30 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrGetClass.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrGetClass.kt @@ -16,8 +16,6 @@ package org.jetbrains.kotlin.ir.expressions - -interface IrGetClass : IrExpression { - var argument: IrExpression +abstract class IrGetClass : IrExpression() { + abstract var argument: IrExpression } - diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrInstanceInitializerCall.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrInstanceInitializerCall.kt index 81a4bfb62db..f61445b28c7 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrInstanceInitializerCall.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrInstanceInitializerCall.kt @@ -18,6 +18,6 @@ package org.jetbrains.kotlin.ir.expressions import org.jetbrains.kotlin.ir.symbols.IrClassSymbol -interface IrInstanceInitializerCall : IrExpression { - val classSymbol: IrClassSymbol +abstract class IrInstanceInitializerCall : IrExpression() { + abstract val classSymbol: IrClassSymbol } 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 2f8bb06dfe9..ff67c43d0f2 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 @@ -16,13 +16,14 @@ package org.jetbrains.kotlin.ir.expressions -interface IrLoop : IrExpression { - val origin: IrStatementOrigin? - var body: IrExpression? - var condition: IrExpression - var label: String? +abstract class IrLoop : IrExpression() { + abstract val origin: IrStatementOrigin? + + var body: IrExpression? = null + lateinit var condition: IrExpression + var label: String? = null } -interface IrWhileLoop : IrLoop +abstract class IrWhileLoop : IrLoop() -interface IrDoWhileLoop : IrLoop +abstract class IrDoWhileLoop : IrLoop() diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrReturn.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrReturn.kt index 4a6123817eb..8d066ea906f 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrReturn.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrReturn.kt @@ -18,7 +18,7 @@ package org.jetbrains.kotlin.ir.expressions import org.jetbrains.kotlin.ir.symbols.IrReturnTargetSymbol -interface IrReturn : IrExpression { - var value: IrExpression - val returnTargetSymbol: IrReturnTargetSymbol +abstract class IrReturn : IrExpression() { + abstract var value: IrExpression + abstract val returnTargetSymbol: IrReturnTargetSymbol } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrStringConcatenation.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrStringConcatenation.kt index 2e745eeab6c..2ab13dfde47 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrStringConcatenation.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrStringConcatenation.kt @@ -16,8 +16,8 @@ package org.jetbrains.kotlin.ir.expressions -interface IrStringConcatenation : IrExpression { - val arguments: List - fun addArgument(argument: IrExpression) -} +abstract class IrStringConcatenation : IrExpression() { + abstract val arguments: List + abstract fun addArgument(argument: 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/IrSuspend.kt index 32842479bb3..ace48381431 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/IrSuspend.kt @@ -7,14 +7,13 @@ package org.jetbrains.kotlin.ir.expressions import org.jetbrains.kotlin.ir.declarations.IrVariable - -interface IrSuspensionPoint : IrExpression { - var suspensionPointIdParameter: IrVariable - var result: IrExpression - var resumeResult: IrExpression +abstract class IrSuspensionPoint : IrExpression() { + abstract var suspensionPointIdParameter: IrVariable + abstract var result: IrExpression + abstract var resumeResult: IrExpression } -interface IrSuspendableExpression : IrExpression { - var suspensionPointId: IrExpression - var result: 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/IrThrow.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrThrow.kt index d59944d9135..363ada5813e 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrThrow.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrThrow.kt @@ -16,8 +16,6 @@ package org.jetbrains.kotlin.ir.expressions - -interface IrThrow : IrExpression { - var value: IrExpression +abstract class IrThrow : IrExpression() { + abstract var value: IrExpression } - 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 64db28eee89..939127505b4 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 @@ -20,12 +20,12 @@ import org.jetbrains.kotlin.ir.IrElement import org.jetbrains.kotlin.ir.declarations.IrVariable import org.jetbrains.kotlin.ir.visitors.IrElementTransformer -interface IrTry : IrExpression { - var tryResult: IrExpression +abstract class IrTry : IrExpression() { + abstract var tryResult: IrExpression - val catches: List + abstract val catches: List - var finallyExpression: IrExpression? + abstract var finallyExpression: IrExpression? } interface IrCatch : IrElement { 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 index 368415b192b..99d784da3b6 100644 --- 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 @@ -22,43 +22,53 @@ import org.jetbrains.kotlin.ir.types.IrType enum class IrTypeOperator { /** Explicit cast: `e as Type` */ CAST, + /** Implicit cast: value of type `A` is used where a value of type `B` is expected */ IMPLICIT_CAST, + /** Implicit cast from a value of nullability flexible type `A!` to non-null type `B`, `B :> A` */ IMPLICIT_NOTNULL, + /** Implicit coercion to Unit: expression of type `A, !(A <: kotlin.Unit)` is used where `kotlin.Unit` is expected */ IMPLICIT_COERCION_TO_UNIT, + /** * Implicit integer coercion: expression of integer type `A` (`kotlin.Int`, `kotlin.Byte`, ...) * is used where another integer type `B` (`kotlin.Int`, `kotlin.Byte`, ...) is expected. * This mostly happens for constant expressions. */ IMPLICIT_INTEGER_COERCION, + /** Safe cast: `e as? Type` */ SAFE_CAST, + /** Instance-of check: `a is Type` */ INSTANCEOF, + /** Instance-of check: `a !is Type` */ NOT_INSTANCEOF, // TODO drop and replace with `INSTANCEOF(x).not()`? + /** * SAM conversion: value of functional type F is used where Single Abstract Method interface value is expected. * Currently this is possible in Kotlin/JVM only, however, there's a big demand for SAM conversion for Kotlin interfaces. */ SAM_CONVERSION, + /** * Implicit dynamic cast: implicit cast from `dynamic` to `T`. * This currently can happen in Kotlin/JS only. */ IMPLICIT_DYNAMIC_CAST, + /** * C-like reinterpret_cast using as primitive type operation in JS */ REINTERPRET_CAST; } -interface IrTypeOperatorCall : IrExpression { - val operator: IrTypeOperator - var argument: IrExpression - val typeOperand: IrType - val typeOperandClassifier: IrClassifierSymbol +abstract class IrTypeOperatorCall : IrExpression() { + abstract val operator: IrTypeOperator + abstract var argument: IrExpression + abstract val typeOperand: IrType + abstract val typeOperandClassifier: IrClassifierSymbol } 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 6fee83b17aa..783b208b732 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 @@ -22,12 +22,12 @@ import org.jetbrains.kotlin.ir.visitors.IrElementTransformer interface IrVarargElement : IrElement -interface IrVararg : IrExpression { - val varargElementType: IrType +abstract class IrVararg : IrExpression() { + abstract val varargElementType: IrType - val elements: List + abstract val elements: List - fun putElement(i: Int, element: IrVarargElement) + abstract fun putElement(i: Int, element: IrVarargElement) } interface IrSpreadElement : IrVarargElement { @@ -36,4 +36,3 @@ interface IrSpreadElement : IrVarargElement { 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/IrWhen.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrWhen.kt index fb5451b0c95..875db48d8a2 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 @@ -18,11 +18,25 @@ package org.jetbrains.kotlin.ir.expressions import org.jetbrains.kotlin.ir.IrElement import org.jetbrains.kotlin.ir.visitors.IrElementTransformer +import org.jetbrains.kotlin.ir.visitors.IrElementVisitor -interface IrWhen : IrExpression { - val origin: IrStatementOrigin? +abstract class IrWhen : IrExpression() { + abstract val origin: IrStatementOrigin? - val branches: MutableList + abstract val branches: MutableList + + override fun accept(visitor: IrElementVisitor, data: D): R = + visitor.visitWhen(this, data) + + override fun acceptChildren(visitor: IrElementVisitor, data: D) { + branches.forEach { it.accept(visitor, data) } + } + + override fun transformChildren(transformer: IrElementTransformer, data: D) { + branches.forEachIndexed { i, irBranch -> + branches[i] = irBranch.transform(transformer, data) + } + } } interface IrBranch : IrElement { diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrBlockImpl.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrBlockImpl.kt index 5af25fe499d..72e7be5a000 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrBlockImpl.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrBlockImpl.kt @@ -33,7 +33,7 @@ class IrBlockImpl( override val endOffset: Int, override val type: IrType, override val origin: IrStatementOrigin? = null, -) : IrContainerExpressionBase(), IrBlock { +) : IrBlock() { constructor( startOffset: Int, endOffset: Int, @@ -67,7 +67,7 @@ class IrReturnableBlockImpl( override val symbol: IrReturnableBlockSymbol, override val origin: IrStatementOrigin? = null, override val inlineFunctionSymbol: IrFunctionSymbol? = null -) : IrContainerExpressionBase(), IrReturnableBlock { +) : IrReturnableBlock() { @ObsoleteDescriptorBasedAPI override val descriptor: FunctionDescriptor get() = symbol.descriptor diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrBreakContinueBase.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrBreakContinueBase.kt deleted file mode 100644 index 3c26a32e746..00000000000 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrBreakContinueBase.kt +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Copyright 2010-2016 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.jetbrains.kotlin.ir.expressions.impl - -import org.jetbrains.kotlin.ir.expressions.IrBreakContinue - -abstract class IrBreakContinueBase : IrExpressionBase(), IrBreakContinue { - override var label: String? = null -} diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrBreakImpl.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrBreakImpl.kt index a07927dcb57..a00a708b19d 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrBreakImpl.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrBreakImpl.kt @@ -26,7 +26,7 @@ class IrBreakImpl( override val endOffset: Int, override val type: IrType, override var loop: IrLoop, -) : IrBreakContinueBase(), IrBreak { +) : IrBreak() { override fun accept(visitor: IrElementVisitor, data: D): R = visitor.visitBreak(this, data) } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrCompositeImpl.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrCompositeImpl.kt index 1929fb5f505..bbe2c7dd3d3 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrCompositeImpl.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrCompositeImpl.kt @@ -27,7 +27,7 @@ class IrCompositeImpl( override val endOffset: Int, override val type: IrType, override val origin: IrStatementOrigin? = null, -) : IrContainerExpressionBase(), IrComposite { +) : IrComposite() { constructor( startOffset: Int, endOffset: Int, diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrConstImpl.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrConstImpl.kt index 7d4fc0162b6..dd3e1e45c89 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrConstImpl.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrConstImpl.kt @@ -27,7 +27,7 @@ class IrConstImpl( override val type: IrType, override val kind: IrConstKind, override val value: T -) : IrExpressionBase(), IrConst { +) : IrConst() { override fun accept(visitor: IrElementVisitor, data: D): R = visitor.visitConst(this, data) diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrContainerExpressionBase.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrContainerExpressionBase.kt deleted file mode 100644 index 3cfc93c3ee8..00000000000 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrContainerExpressionBase.kt +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright 2010-2016 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.jetbrains.kotlin.ir.expressions.impl - -import org.jetbrains.kotlin.ir.IrStatement -import org.jetbrains.kotlin.ir.expressions.IrContainerExpression -import org.jetbrains.kotlin.ir.util.transform -import org.jetbrains.kotlin.ir.visitors.IrElementTransformer -import org.jetbrains.kotlin.ir.visitors.IrElementVisitor -import java.util.* - -abstract class IrContainerExpressionBase : IrExpressionBase(), IrContainerExpression { - 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.transform { it.transform(transformer, data) } - } -} diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrContinueImpl.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrContinueImpl.kt index 128c428f486..f0cca35d6da 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrContinueImpl.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrContinueImpl.kt @@ -26,7 +26,7 @@ class IrContinueImpl( override val endOffset: Int, override val type: IrType, override var loop: IrLoop, -) : IrBreakContinueBase(), IrContinue { +) : IrContinue() { override fun accept(visitor: IrElementVisitor, data: D): R = visitor.visitContinue(this, data) } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrDoWhileLoopImpl.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrDoWhileLoopImpl.kt index f0764aca17a..a17c16be797 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrDoWhileLoopImpl.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrDoWhileLoopImpl.kt @@ -27,7 +27,7 @@ class IrDoWhileLoopImpl( override val endOffset: Int, override val type: IrType, override val origin: IrStatementOrigin?, -) : IrLoopBase(), IrDoWhileLoop { +) : IrDoWhileLoop() { override fun accept(visitor: IrElementVisitor, data: D): R { return visitor.visitDoWhileLoop(this, data) } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrDynamicMemberExpressionImpl.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrDynamicMemberExpressionImpl.kt index ff44ff36279..8c55ebbe0f1 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrDynamicMemberExpressionImpl.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrDynamicMemberExpressionImpl.kt @@ -17,7 +17,7 @@ class IrDynamicMemberExpressionImpl( override val type: IrType, override val memberName: String, override var receiver: IrExpression -) : IrExpressionBase(), IrDynamicMemberExpression { +) : IrDynamicMemberExpression() { override fun accept(visitor: IrElementVisitor, data: D): R = visitor.visitDynamicMemberExpression(this, data) diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrDynamicOperatorExpressionImpl.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrDynamicOperatorExpressionImpl.kt index 2e8c45adbba..ba6b4198f86 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrDynamicOperatorExpressionImpl.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrDynamicOperatorExpressionImpl.kt @@ -18,7 +18,7 @@ class IrDynamicOperatorExpressionImpl( override val endOffset: Int, override val type: IrType, override val operator: IrDynamicOperator -) : IrExpressionBase(), IrDynamicOperatorExpression { +) : IrDynamicOperatorExpression() { override lateinit var receiver: IrExpression override val arguments: MutableList = SmartList() diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrErrorCallExpressionImpl.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrErrorCallExpressionImpl.kt index 0784feb4e98..0b3917c9b32 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrErrorCallExpressionImpl.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrErrorCallExpressionImpl.kt @@ -28,7 +28,7 @@ class IrErrorCallExpressionImpl( override val endOffset: Int, override val type: IrType, override val description: String -) : IrExpressionBase(), IrErrorCallExpression { +) : IrErrorCallExpression() { override var explicitReceiver: IrExpression? = null override val arguments: MutableList = SmartList() diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrErrorExpressionImpl.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrErrorExpressionImpl.kt index c5aa4efbfbc..ef58a20fd4a 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrErrorExpressionImpl.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrErrorExpressionImpl.kt @@ -26,7 +26,7 @@ class IrErrorExpressionImpl( override val endOffset: Int, override val type: IrType, override val description: String -) : IrExpressionBase(), IrExpressionWithCopy, IrErrorExpression { +) : IrErrorExpression(), IrExpressionWithCopy { override fun accept(visitor: IrElementVisitor, data: D): R = visitor.visitErrorExpression(this, data) diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrExpressionBase.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrExpressionBase.kt deleted file mode 100644 index d8a2840cdc4..00000000000 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrExpressionBase.kt +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright 2010-2016 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.jetbrains.kotlin.ir.expressions.impl - -import org.jetbrains.kotlin.ir.IrElementBase -import org.jetbrains.kotlin.ir.declarations.IrAttributeContainer -import org.jetbrains.kotlin.ir.expressions.IrExpression -import org.jetbrains.kotlin.ir.visitors.IrElementTransformer -import org.jetbrains.kotlin.ir.visitors.IrElementVisitor - -abstract class IrExpressionBase : IrElementBase(), IrExpression { - @Suppress("LeakingThis") - override var attributeOwnerId: IrAttributeContainer = this - - override fun acceptChildren(visitor: IrElementVisitor, data: D) { - // No children by default - } - - override fun transformChildren(transformer: IrElementTransformer, data: D) { - // No children by default - } -} diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrFunctionExpressionImpl.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrFunctionExpressionImpl.kt index d6af8b53ade..a1ac20bf7eb 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrFunctionExpressionImpl.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrFunctionExpressionImpl.kt @@ -18,7 +18,7 @@ class IrFunctionExpressionImpl( override val type: IrType, override var function: IrSimpleFunction, override val origin: IrStatementOrigin -) : IrExpressionBase(), IrFunctionExpression { +) : IrFunctionExpression() { override fun accept(visitor: IrElementVisitor, data: D): R { return visitor.visitFunctionExpression(this, data) } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrGetClassImpl.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrGetClassImpl.kt index 26fac6e69ea..98f17304365 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrGetClassImpl.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrGetClassImpl.kt @@ -27,7 +27,7 @@ class IrGetClassImpl( override val endOffset: Int, override val type: IrType, override var argument: IrExpression, -) : IrExpressionBase(), IrGetClass { +) : IrGetClass() { override fun accept(visitor: IrElementVisitor, data: D): R { return visitor.visitGetClass(this, data) } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrIfThenElseImpl.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrIfThenElseImpl.kt index cbfcc69ea3c..6904875fb6c 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrIfThenElseImpl.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrIfThenElseImpl.kt @@ -18,6 +18,7 @@ package org.jetbrains.kotlin.ir.expressions.impl import org.jetbrains.kotlin.ir.expressions.IrBranch import org.jetbrains.kotlin.ir.expressions.IrStatementOrigin +import org.jetbrains.kotlin.ir.expressions.IrWhen import org.jetbrains.kotlin.ir.types.IrType import org.jetbrains.kotlin.utils.SmartList @@ -26,6 +27,6 @@ class IrIfThenElseImpl( override val endOffset: Int, override val type: IrType, override val origin: IrStatementOrigin? = null -) : IrWhenBase() { +) : IrWhen() { override val branches: MutableList = SmartList() } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrInstanceInitializerCallImpl.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrInstanceInitializerCallImpl.kt index 9c519e4a00e..f0dbf5d0db1 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrInstanceInitializerCallImpl.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrInstanceInitializerCallImpl.kt @@ -26,7 +26,7 @@ class IrInstanceInitializerCallImpl( override val endOffset: Int, override val classSymbol: IrClassSymbol, override val type: IrType, -) : IrExpressionBase(), IrInstanceInitializerCall { +) : IrInstanceInitializerCall() { override fun accept(visitor: IrElementVisitor, data: D): R { return visitor.visitInstanceInitializerCall(this, data) } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrLoopBase.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrLoopBase.kt deleted file mode 100644 index 800c6ccd6ef..00000000000 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrLoopBase.kt +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Copyright 2010-2016 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.jetbrains.kotlin.ir.expressions.impl - -import org.jetbrains.kotlin.ir.expressions.IrExpression -import org.jetbrains.kotlin.ir.expressions.IrLoop - -abstract class IrLoopBase : IrExpressionBase(), IrLoop { - override var label: String? = null - - override lateinit var condition: IrExpression - - override var body: IrExpression? = null -} diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrReturnImpl.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrReturnImpl.kt index 5b2919be603..4a153c1a2ec 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrReturnImpl.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrReturnImpl.kt @@ -29,7 +29,7 @@ class IrReturnImpl( override val type: IrType, override val returnTargetSymbol: IrReturnTargetSymbol, override var value: IrExpression -) : IrExpressionBase(), IrReturn { +) : IrReturn() { override fun accept(visitor: IrElementVisitor, data: D): R = visitor.visitReturn(this, data) diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrStringConcatenationImpl.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrStringConcatenationImpl.kt index 6a0b1cd700d..4e18b2c4a34 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrStringConcatenationImpl.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrStringConcatenationImpl.kt @@ -27,7 +27,7 @@ class IrStringConcatenationImpl( override val startOffset: Int, override val endOffset: Int, override val type: IrType -) : IrExpressionBase(), IrStringConcatenation { +) : IrStringConcatenation() { constructor( startOffset: Int, endOffset: Int, diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrSuspendImpl.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrSuspendImpl.kt index a607c7516d4..35c9f81c758 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrSuspendImpl.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrSuspendImpl.kt @@ -20,7 +20,7 @@ class IrSuspensionPointImpl( override var suspensionPointIdParameter: IrVariable, override var result: IrExpression, override var resumeResult: IrExpression -) : IrExpressionBase(), IrSuspensionPoint { +) : IrSuspensionPoint() { override fun accept(visitor: IrElementVisitor, data: D): R = visitor.visitSuspensionPoint(this, data) @@ -43,8 +43,7 @@ class IrSuspendableExpressionImpl( override val type: IrType, override var suspensionPointId: IrExpression, override var result: IrExpression -) : IrExpressionBase(), IrSuspendableExpression { - +) : IrSuspendableExpression() { override fun accept(visitor: IrElementVisitor, data: D): R = visitor.visitSuspendableExpression(this, data) diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrThrowImpl.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrThrowImpl.kt index db494ff7d1a..74db5c0d76b 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrThrowImpl.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrThrowImpl.kt @@ -27,7 +27,7 @@ class IrThrowImpl( override val endOffset: Int, override val type: IrType, override var value: IrExpression, -) : IrExpressionBase(), IrThrow { +) : IrThrow() { override fun accept(visitor: IrElementVisitor, data: D): R = visitor.visitThrow(this, data) diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrTryImpl.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrTryImpl.kt index db2cf8e8f3b..83bdefb2831 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrTryImpl.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrTryImpl.kt @@ -30,7 +30,7 @@ class IrTryImpl( override val startOffset: Int, override val endOffset: Int, override val type: IrType, -) : IrExpressionBase(), IrTry { +) : IrTry() { constructor( startOffset: Int, endOffset: Int, diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrTypeOperatorCallImpl.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrTypeOperatorCallImpl.kt index a1c85677737..d673a100fec 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrTypeOperatorCallImpl.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrTypeOperatorCallImpl.kt @@ -32,7 +32,7 @@ class IrTypeOperatorCallImpl( override val operator: IrTypeOperator, override val typeOperand: IrType, override var argument: IrExpression, -) : IrExpressionBase(), IrTypeOperatorCall { +) : IrTypeOperatorCall() { override val typeOperandClassifier: IrClassifierSymbol get() = typeOperand.classifierOrFail diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrVarargImpl.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrVarargImpl.kt index 807bb58caad..bf2fb94190e 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrVarargImpl.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrVarargImpl.kt @@ -28,7 +28,7 @@ class IrVarargImpl( override val endOffset: Int, override val type: IrType, override val varargElementType: IrType -) : IrExpressionBase(), IrVararg { +) : IrVararg() { constructor( startOffset: Int, endOffset: Int, diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrWhenImpl.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrWhenImpl.kt index c31a65948f9..a12e1e1cf70 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrWhenImpl.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrWhenImpl.kt @@ -23,27 +23,12 @@ import org.jetbrains.kotlin.ir.visitors.IrElementTransformer import org.jetbrains.kotlin.ir.visitors.IrElementVisitor import java.util.* -abstract class IrWhenBase : IrExpressionBase(), IrWhen { - override fun accept(visitor: IrElementVisitor, data: D): R = - visitor.visitWhen(this, data) - - override fun acceptChildren(visitor: IrElementVisitor, data: D) { - branches.forEach { it.accept(visitor, data) } - } - - override fun transformChildren(transformer: IrElementTransformer, data: D) { - branches.forEachIndexed { i, irBranch -> - branches[i] = irBranch.transform(transformer, data) - } - } -} - class IrWhenImpl( override val startOffset: Int, override val endOffset: Int, override val type: IrType, override val origin: IrStatementOrigin? = null -) : IrWhenBase() { +) : IrWhen() { constructor( startOffset: Int, endOffset: Int, diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrWhileLoopImpl.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrWhileLoopImpl.kt index 78e61f715bf..cc6ca876e68 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrWhileLoopImpl.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrWhileLoopImpl.kt @@ -27,7 +27,7 @@ class IrWhileLoopImpl( override val endOffset: Int, override val type: IrType, override val origin: IrStatementOrigin?, -) : IrLoopBase(), IrWhileLoop { +) : IrWhileLoop() { override fun accept(visitor: IrElementVisitor, data: D): R { return visitor.visitWhileLoop(this, data) }