From 3817aa32a18cc97ecf43a967be5da1d9f546b672 Mon Sep 17 00:00:00 2001 From: Mads Ager Date: Tue, 6 Oct 2020 18:14:45 +0200 Subject: [PATCH] [IR] Move isAssignable to IrValueDeclaration. --- .../kotlin/ir/declarations/IrValueDeclaration.kt | 2 ++ .../kotlin/ir/declarations/IrValueParameter.kt | 5 ----- .../kotlin/ir/declarations/impl/IrVariableImpl.kt | 6 ++++++ .../kotlin/ir/expressions/impl/IrSetValueImpl.kt | 15 +-------------- 4 files changed, 9 insertions(+), 19 deletions(-) diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrValueDeclaration.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrValueDeclaration.kt index ce773fb723f..f23789cb353 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrValueDeclaration.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrValueDeclaration.kt @@ -16,4 +16,6 @@ abstract class IrValueDeclaration : IrDeclarationBase(), IrDeclarationWithName, abstract override val symbol: IrValueSymbol abstract var type: IrType + + abstract val isAssignable: Boolean } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrValueParameter.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrValueParameter.kt index aca9cb2fd47..dd3db5a6a42 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrValueParameter.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrValueParameter.kt @@ -39,11 +39,6 @@ abstract class IrValueParameter : IrValueDeclaration(), IrSymbolDeclaration accept(visitor: IrElementVisitor, data: D): R = diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrVariableImpl.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrVariableImpl.kt index c2608d8b440..c8bc603f878 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrVariableImpl.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrVariableImpl.kt @@ -61,6 +61,12 @@ class IrVariableImpl( override var initializer: IrExpression? = null + // Variables are assignable by default. This means that they can be used in IrSetValue. + // Variables are assigned in the IR even though they are not 'var' in the input. Hence + // the separate assignability flag. + override val isAssignable: Boolean + get() = true + override val factory: IrFactory get() = error("Create IrVariableImpl directly") diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrSetValueImpl.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrSetValueImpl.kt index f83d28b03bf..e6f15579c51 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrSetValueImpl.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrSetValueImpl.kt @@ -34,21 +34,8 @@ class IrSetValueImpl( override val origin: IrStatementOrigin? ) : IrSetValue() { - companion object { - private fun isVariableOrAssignable(symbol: IrValueSymbol): Boolean { - val declaration = symbol.owner - return if (declaration is IrValueParameter) { - declaration.isAssignable - } else { - true - } - } - } - init { - assert(isVariableOrAssignable(symbol)) { - "Only IrVariables and assignable IrValueParameters can be set" - } + assert(symbol.owner.isAssignable) { "Only assignable IrValues can be set" } } override fun accept(visitor: IrElementVisitor, data: D): R {