[IR] Support isAssignable in builders and serialization.
This commit is contained in:
committed by
Alexander Udalov
parent
37145fb055
commit
af0999ec6f
+2
@@ -18,6 +18,7 @@ class IrValueParameterBuilder : IrDeclarationBuilder() {
|
||||
var isCrossInline = false
|
||||
var isNoinline = false
|
||||
var isHidden = false
|
||||
var isAssignable = false
|
||||
|
||||
fun updateFrom(from: IrValueParameter) {
|
||||
super.updateFrom(from)
|
||||
@@ -28,5 +29,6 @@ class IrValueParameterBuilder : IrDeclarationBuilder() {
|
||||
isCrossInline = from.isCrossinline
|
||||
isNoinline = from.isNoinline
|
||||
isHidden = from.isHidden
|
||||
isAssignable = from.isAssignable
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
|
||||
package org.jetbrains.kotlin.ir.expressions.impl
|
||||
|
||||
import org.jetbrains.kotlin.ir.declarations.IrValueParameter
|
||||
import org.jetbrains.kotlin.ir.expressions.IrExpression
|
||||
import org.jetbrains.kotlin.ir.expressions.IrSetValue
|
||||
import org.jetbrains.kotlin.ir.expressions.IrStatementOrigin
|
||||
@@ -32,6 +33,24 @@ class IrSetValueImpl(
|
||||
override var value: IrExpression,
|
||||
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"
|
||||
}
|
||||
}
|
||||
|
||||
override fun <R, D> accept(visitor: IrElementVisitor<R, D>, data: D): R {
|
||||
return visitor.visitSetValue(this, data)
|
||||
}
|
||||
|
||||
@@ -349,7 +349,7 @@ open class DeepCopyIrTreeWithSymbols(
|
||||
declaration.varargElementType?.remapType(),
|
||||
declaration.isCrossinline,
|
||||
declaration.isNoinline,
|
||||
false
|
||||
declaration.isAssignable
|
||||
).apply {
|
||||
transformAnnotations(declaration)
|
||||
defaultValue = declaration.defaultValue?.transform()
|
||||
|
||||
@@ -525,6 +525,7 @@ class RenderIrElementVisitor(private val normalizeNames: Boolean = false) : IrEl
|
||||
"vararg".takeIf { varargElementType != null },
|
||||
"crossinline".takeIf { isCrossinline },
|
||||
"noinline".takeIf { isNoinline },
|
||||
"assignable".takeIf { isAssignable }
|
||||
)
|
||||
|
||||
override fun visitLocalDelegatedProperty(declaration: IrLocalDelegatedProperty, data: Nothing?): String =
|
||||
|
||||
Reference in New Issue
Block a user