IR: make IrValueParameter.varargElementType mutable

This commit is contained in:
Georgy Bronnikov
2020-09-09 21:19:55 +03:00
parent a3763e8276
commit a409976d28
4 changed files with 15 additions and 4 deletions
@@ -36,7 +36,7 @@ class IrValueParameterImpl(
override val name: Name,
override val index: Int,
override var type: IrType,
override val varargElementType: IrType?,
override var varargElementType: IrType?,
override val isCrossinline: Boolean,
override val isNoinline: Boolean,
override val isHidden: Boolean = false
@@ -38,7 +38,7 @@ internal class PersistentIrValueParameter(
override val name: Name,
override val index: Int,
type: IrType,
override val varargElementType: IrType?,
varargElementType: IrType?,
override val isCrossinline: Boolean,
override val isNoinline: Boolean,
override val isHidden: Boolean = false
@@ -87,4 +87,13 @@ internal class PersistentIrValueParameter(
}
}
override var varargElementTypeField: IrType? = varargElementType
override var varargElementType: IrType?
get() = getCarrier().varargElementTypeField
set(v) {
if (varargElementType !== v) {
setCarrier().varargElementTypeField = v
}
}
}
@@ -14,10 +14,11 @@ import org.jetbrains.kotlin.ir.types.IrType
internal interface ValueParameterCarrier : DeclarationCarrier {
var defaultValueField: IrExpressionBody?
var typeField: IrType
var varargElementTypeField: IrType?
override fun clone(): ValueParameterCarrier {
return ValueParameterCarrierImpl(
lastModified, parentField, originField, annotationsField, defaultValueField, typeField
lastModified, parentField, originField, annotationsField, defaultValueField, typeField, varargElementTypeField
)
}
}
@@ -29,4 +30,5 @@ internal class ValueParameterCarrierImpl(
override var annotationsField: List<IrConstructorCall>,
override var defaultValueField: IrExpressionBody?,
override var typeField: IrType,
override var varargElementTypeField: IrType?,
) : ValueParameterCarrier
@@ -29,7 +29,7 @@ abstract class IrValueParameter : IrValueDeclaration(), IrSymbolDeclaration<IrVa
abstract override val descriptor: ParameterDescriptor
abstract val index: Int
abstract val varargElementType: IrType?
abstract var varargElementType: IrType?
abstract val isCrossinline: Boolean
abstract val isNoinline: Boolean
// if true parameter is not included into IdSignature.