From 5065b1a4c61e57d08e183d0f57a76523e1f988e4 Mon Sep 17 00:00:00 2001 From: Georgy Bronnikov Date: Thu, 10 Sep 2020 15:15:53 +0300 Subject: [PATCH] Make IrValueDeclaration.type mutable --- .../backend/common/lower/inline/FunctionInlining.kt | 6 +++++- .../js/lower/coroutines/StateMachineBuilder.kt | 6 +++++- .../ir/declarations/impl/IrValueParameterImpl.kt | 2 +- .../persistent/PersistentIrValueParameter.kt | 13 ++++++++++++- .../persistent/carriers/ValueParameterCarrier.kt | 9 +++++++-- .../kotlin/ir/declarations/IrValueDeclaration.kt | 2 +- .../kotlin/ir/declarations/impl/IrVariableImpl.kt | 2 +- 7 files changed, 32 insertions(+), 8 deletions(-) diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/inline/FunctionInlining.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/inline/FunctionInlining.kt index 96f5a382ed3..5ebae654906 100644 --- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/inline/FunctionInlining.kt +++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/inline/FunctionInlining.kt @@ -542,7 +542,11 @@ class FunctionInlining( override val startOffset: Int get() = UNDEFINED_OFFSET override val endOffset: Int get() = UNDEFINED_OFFSET - override val type: IrType get() = symbol.owner.type + override var type: IrType + get() = symbol.owner.type + set(value) { + symbol.owner.type = value + } override fun accept(visitor: IrElementVisitor, data: D) = visitor.visitGetValue(this, data) 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 a385f139f65..7a88069039b 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 @@ -46,7 +46,11 @@ class IrDispatchPoint(val target: SuspendState) : IrExpression() { override val startOffset: Int get() = UNDEFINED_OFFSET override val endOffset: Int get() = UNDEFINED_OFFSET - override val type: IrType get() = target.entryBlock.type + override var type: IrType + get() = target.entryBlock.type + set(value) { + target.entryBlock.type = value + } override fun accept(visitor: IrElementVisitor, data: D) = visitor.visitExpression(this, data) diff --git a/compiler/ir/ir.tree.impl/src/org/jetbrains/kotlin/ir/declarations/impl/IrValueParameterImpl.kt b/compiler/ir/ir.tree.impl/src/org/jetbrains/kotlin/ir/declarations/impl/IrValueParameterImpl.kt index da3370ea42c..2b229a752c6 100644 --- a/compiler/ir/ir.tree.impl/src/org/jetbrains/kotlin/ir/declarations/impl/IrValueParameterImpl.kt +++ b/compiler/ir/ir.tree.impl/src/org/jetbrains/kotlin/ir/declarations/impl/IrValueParameterImpl.kt @@ -35,7 +35,7 @@ class IrValueParameterImpl( override val symbol: IrValueParameterSymbol, override val name: Name, override val index: Int, - override val type: IrType, + override var type: IrType, override val varargElementType: IrType?, override val isCrossinline: Boolean, override val isNoinline: Boolean, diff --git a/compiler/ir/ir.tree.persistent/src/org/jetbrains/kotlin/ir/declarations/persistent/PersistentIrValueParameter.kt b/compiler/ir/ir.tree.persistent/src/org/jetbrains/kotlin/ir/declarations/persistent/PersistentIrValueParameter.kt index e732cace35e..08d3f914e13 100644 --- a/compiler/ir/ir.tree.persistent/src/org/jetbrains/kotlin/ir/declarations/persistent/PersistentIrValueParameter.kt +++ b/compiler/ir/ir.tree.persistent/src/org/jetbrains/kotlin/ir/declarations/persistent/PersistentIrValueParameter.kt @@ -37,7 +37,7 @@ internal class PersistentIrValueParameter( override val symbol: IrValueParameterSymbol, override val name: Name, override val index: Int, - override val type: IrType, + type: IrType, override val varargElementType: IrType?, override val isCrossinline: Boolean, override val isNoinline: Boolean, @@ -76,4 +76,15 @@ internal class PersistentIrValueParameter( setCarrier().defaultValueField = v } } + + override var typeField: IrType = type + + override var type: IrType + get() = getCarrier().typeField + set(v) { + if (type !== v) { + setCarrier().typeField = v + } + } + } diff --git a/compiler/ir/ir.tree.persistent/src/org/jetbrains/kotlin/ir/declarations/persistent/carriers/ValueParameterCarrier.kt b/compiler/ir/ir.tree.persistent/src/org/jetbrains/kotlin/ir/declarations/persistent/carriers/ValueParameterCarrier.kt index a6ba33a51ef..aaf1d351651 100644 --- a/compiler/ir/ir.tree.persistent/src/org/jetbrains/kotlin/ir/declarations/persistent/carriers/ValueParameterCarrier.kt +++ b/compiler/ir/ir.tree.persistent/src/org/jetbrains/kotlin/ir/declarations/persistent/carriers/ValueParameterCarrier.kt @@ -9,12 +9,16 @@ import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin import org.jetbrains.kotlin.ir.declarations.IrDeclarationParent import org.jetbrains.kotlin.ir.expressions.IrConstructorCall import org.jetbrains.kotlin.ir.expressions.IrExpressionBody +import org.jetbrains.kotlin.ir.types.IrType internal interface ValueParameterCarrier : DeclarationCarrier { var defaultValueField: IrExpressionBody? + var typeField: IrType override fun clone(): ValueParameterCarrier { - return ValueParameterCarrierImpl(lastModified, parentField, originField, annotationsField, defaultValueField) + return ValueParameterCarrierImpl( + lastModified, parentField, originField, annotationsField, defaultValueField, typeField + ) } } @@ -23,5 +27,6 @@ internal class ValueParameterCarrierImpl( override var parentField: IrDeclarationParent?, override var originField: IrDeclarationOrigin, override var annotationsField: List, - override var defaultValueField: IrExpressionBody? + override var defaultValueField: IrExpressionBody?, + override var typeField: IrType, ) : ValueParameterCarrier 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 0a2275380ef..ce773fb723f 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 @@ -15,5 +15,5 @@ abstract class IrValueDeclaration : IrDeclarationBase(), IrDeclarationWithName, abstract override val descriptor: ValueDescriptor abstract override val symbol: IrValueSymbol - abstract val type: IrType + abstract var type: IrType } 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 fbd5b9bf612..c2608d8b440 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 @@ -36,7 +36,7 @@ class IrVariableImpl( override var origin: IrDeclarationOrigin, override val symbol: IrVariableSymbol, override val name: Name, - override val type: IrType, + override var type: IrType, override val isVar: Boolean, override val isConst: Boolean, override val isLateinit: Boolean