[IR] Add IR support for setting parameters.
Use it in the JVM_IR backend for default values code. The parameter local has to be overwritten for the inliner to work.
This commit is contained in:
committed by
Alexander Udalov
parent
db23460fd5
commit
9a93bb3f09
@@ -152,8 +152,8 @@ fun IrBuilderWithScope.irGet(type: IrType, variable: IrValueSymbol) =
|
||||
|
||||
fun IrBuilderWithScope.irGet(variable: IrValueDeclaration) = irGet(variable.type, variable.symbol)
|
||||
|
||||
fun IrBuilderWithScope.irSetVar(variable: IrVariableSymbol, value: IrExpression) =
|
||||
IrSetVariableImpl(startOffset, endOffset, context.irBuiltIns.unitType, variable, value, IrStatementOrigin.EQ)
|
||||
fun IrBuilderWithScope.irSet(variable: IrValueSymbol, value: IrExpression) =
|
||||
IrSetValueImpl(startOffset, endOffset, context.irBuiltIns.unitType, variable, value, IrStatementOrigin.EQ)
|
||||
|
||||
fun IrBuilderWithScope.irGetField(receiver: IrExpression?, field: IrField) =
|
||||
IrGetFieldImpl(startOffset, endOffset, field.symbol, field.type, receiver)
|
||||
|
||||
+3
-2
@@ -16,6 +16,7 @@
|
||||
|
||||
package org.jetbrains.kotlin.ir.expressions
|
||||
|
||||
import org.jetbrains.kotlin.ir.symbols.IrValueParameterSymbol
|
||||
import org.jetbrains.kotlin.ir.symbols.IrValueSymbol
|
||||
import org.jetbrains.kotlin.ir.symbols.IrVariableSymbol
|
||||
|
||||
@@ -28,7 +29,7 @@ abstract class IrGetValue : IrValueAccessExpression(), IrExpressionWithCopy {
|
||||
abstract override fun copy(): IrGetValue
|
||||
}
|
||||
|
||||
abstract class IrSetVariable : IrValueAccessExpression() {
|
||||
abstract override val symbol: IrVariableSymbol
|
||||
abstract class IrSetValue : IrValueAccessExpression() {
|
||||
abstract override val symbol: IrValueSymbol
|
||||
abstract var value: IrExpression
|
||||
}
|
||||
|
||||
+6
-6
@@ -17,23 +17,23 @@
|
||||
package org.jetbrains.kotlin.ir.expressions.impl
|
||||
|
||||
import org.jetbrains.kotlin.ir.expressions.IrExpression
|
||||
import org.jetbrains.kotlin.ir.expressions.IrSetVariable
|
||||
import org.jetbrains.kotlin.ir.expressions.IrSetValue
|
||||
import org.jetbrains.kotlin.ir.expressions.IrStatementOrigin
|
||||
import org.jetbrains.kotlin.ir.symbols.IrVariableSymbol
|
||||
import org.jetbrains.kotlin.ir.symbols.IrValueSymbol
|
||||
import org.jetbrains.kotlin.ir.types.IrType
|
||||
import org.jetbrains.kotlin.ir.visitors.IrElementTransformer
|
||||
import org.jetbrains.kotlin.ir.visitors.IrElementVisitor
|
||||
|
||||
class IrSetVariableImpl(
|
||||
class IrSetValueImpl(
|
||||
override val startOffset: Int,
|
||||
override val endOffset: Int,
|
||||
override var type: IrType,
|
||||
override val symbol: IrVariableSymbol,
|
||||
override val symbol: IrValueSymbol,
|
||||
override var value: IrExpression,
|
||||
override val origin: IrStatementOrigin?
|
||||
) : IrSetVariable() {
|
||||
) : IrSetValue() {
|
||||
override fun <R, D> accept(visitor: IrElementVisitor<R, D>, data: D): R {
|
||||
return visitor.visitSetVariable(this, data)
|
||||
return visitor.visitSetValue(this, data)
|
||||
}
|
||||
|
||||
override fun <D> acceptChildren(visitor: IrElementVisitor<Unit, D>, data: D) {
|
||||
@@ -457,11 +457,11 @@ open class DeepCopyIrTreeWithSymbols(
|
||||
mapStatementOrigin(expression.origin)
|
||||
).copyAttributes(expression)
|
||||
|
||||
override fun visitSetVariable(expression: IrSetVariable): IrSetVariable =
|
||||
IrSetVariableImpl(
|
||||
override fun visitSetValue(expression: IrSetValue): IrSetValue =
|
||||
IrSetValueImpl(
|
||||
expression.startOffset, expression.endOffset,
|
||||
expression.type.remapType(),
|
||||
symbolRemapper.getReferencedVariable(expression.symbol),
|
||||
symbolRemapper.getReferencedValue(expression.symbol),
|
||||
expression.value.transform(),
|
||||
mapStatementOrigin(expression.origin)
|
||||
).copyAttributes(expression)
|
||||
|
||||
@@ -607,7 +607,7 @@ class RenderIrElementVisitor(private val normalizeNames: Boolean = false) : IrEl
|
||||
override fun visitGetValue(expression: IrGetValue, data: Nothing?): String =
|
||||
"GET_VAR '${expression.symbol.renderReference()}' type=${expression.type.render()} origin=${expression.origin}"
|
||||
|
||||
override fun visitSetVariable(expression: IrSetVariable, data: Nothing?): String =
|
||||
override fun visitSetValue(expression: IrSetValue, data: Nothing?): String =
|
||||
"SET_VAR '${expression.symbol.renderReference()}' type=${expression.type.render()} origin=${expression.origin}"
|
||||
|
||||
override fun visitGetField(expression: IrGetField, data: Nothing?): String =
|
||||
|
||||
@@ -98,7 +98,7 @@ interface IrElementTransformer<in D> : IrElementVisitor<IrElement, D> {
|
||||
override fun visitGetEnumValue(expression: IrGetEnumValue, data: D) = visitSingletonReference(expression, data)
|
||||
override fun visitValueAccess(expression: IrValueAccessExpression, data: D) = visitDeclarationReference(expression, data)
|
||||
override fun visitGetValue(expression: IrGetValue, data: D) = visitValueAccess(expression, data)
|
||||
override fun visitSetVariable(expression: IrSetVariable, data: D) = visitValueAccess(expression, data)
|
||||
override fun visitSetValue(expression: IrSetValue, data: D) = visitValueAccess(expression, data)
|
||||
override fun visitFieldAccess(expression: IrFieldAccessExpression, data: D) = visitDeclarationReference(expression, data)
|
||||
override fun visitGetField(expression: IrGetField, data: D) = visitFieldAccess(expression, data)
|
||||
override fun visitSetField(expression: IrSetField, data: D) = visitFieldAccess(expression, data)
|
||||
|
||||
+2
-2
@@ -177,8 +177,8 @@ abstract class IrElementTransformerVoid : IrElementTransformer<Nothing?> {
|
||||
open fun visitGetValue(expression: IrGetValue) = visitValueAccess(expression)
|
||||
final override fun visitGetValue(expression: IrGetValue, data: Nothing?) = visitGetValue(expression)
|
||||
|
||||
open fun visitSetVariable(expression: IrSetVariable) = visitValueAccess(expression)
|
||||
final override fun visitSetVariable(expression: IrSetVariable, data: Nothing?) = visitSetVariable(expression)
|
||||
open fun visitSetValue(expression: IrSetValue) = visitValueAccess(expression)
|
||||
final override fun visitSetValue(expression: IrSetValue, data: Nothing?) = visitSetValue(expression)
|
||||
|
||||
open fun visitFieldAccess(expression: IrFieldAccessExpression) = visitDeclarationReference(expression)
|
||||
final override fun visitFieldAccess(expression: IrFieldAccessExpression, data: Nothing?) = visitFieldAccess(expression)
|
||||
|
||||
@@ -67,7 +67,7 @@ interface IrElementVisitor<out R, in D> {
|
||||
fun visitGetEnumValue(expression: IrGetEnumValue, data: D) = visitSingletonReference(expression, data)
|
||||
fun visitValueAccess(expression: IrValueAccessExpression, data: D) = visitDeclarationReference(expression, data)
|
||||
fun visitGetValue(expression: IrGetValue, data: D) = visitValueAccess(expression, data)
|
||||
fun visitSetVariable(expression: IrSetVariable, data: D) = visitValueAccess(expression, data)
|
||||
fun visitSetValue(expression: IrSetValue, data: D) = visitValueAccess(expression, data)
|
||||
fun visitFieldAccess(expression: IrFieldAccessExpression, data: D) = visitDeclarationReference(expression, data)
|
||||
fun visitGetField(expression: IrGetField, data: D) = visitFieldAccess(expression, data)
|
||||
fun visitSetField(expression: IrSetField, data: D) = visitFieldAccess(expression, data)
|
||||
|
||||
@@ -143,8 +143,8 @@ interface IrElementVisitorVoid : IrElementVisitor<Unit, Nothing?> {
|
||||
fun visitGetValue(expression: IrGetValue) = visitVariableAccess(expression)
|
||||
override fun visitGetValue(expression: IrGetValue, data: Nothing?) = visitGetValue(expression)
|
||||
|
||||
fun visitSetVariable(expression: IrSetVariable) = visitVariableAccess(expression)
|
||||
override fun visitSetVariable(expression: IrSetVariable, data: Nothing?) = visitSetVariable(expression)
|
||||
fun visitSetValue(expression: IrSetValue) = visitVariableAccess(expression)
|
||||
override fun visitSetValue(expression: IrSetValue, data: Nothing?) = visitSetValue(expression)
|
||||
|
||||
fun visitFieldAccess(expression: IrFieldAccessExpression) = visitDeclarationReference(expression)
|
||||
override fun visitFieldAccess(expression: IrFieldAccessExpression, data: Nothing?) = visitFieldAccess(expression)
|
||||
|
||||
Reference in New Issue
Block a user