Make IrValueDeclaration.type mutable

This commit is contained in:
Georgy Bronnikov
2020-09-10 15:15:53 +03:00
parent 1f37795e08
commit 5065b1a4c6
7 changed files with 32 additions and 8 deletions
@@ -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 <R, D> accept(visitor: IrElementVisitor<R, D>, data: D) =
visitor.visitGetValue(this, data)
@@ -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 <R, D> accept(visitor: IrElementVisitor<R, D>, data: D) = visitor.visitExpression(this, data)
@@ -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,
@@ -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
}
}
}
@@ -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<IrConstructorCall>,
override var defaultValueField: IrExpressionBody?
override var defaultValueField: IrExpressionBody?,
override var typeField: IrType,
) : ValueParameterCarrier
@@ -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
}
@@ -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