Use IrFactory to create IrFunction in interpreter

This commit is contained in:
Ivan Kylchik
2021-07-28 19:54:11 +03:00
committed by TeamCityServer
parent 1002d076b3
commit 0af918be4f
2 changed files with 7 additions and 9 deletions
@@ -133,7 +133,7 @@ internal fun createTempFunction(
origin: IrDeclarationOrigin = TEMP_FUNCTION_FOR_INTERPRETER, origin: IrDeclarationOrigin = TEMP_FUNCTION_FOR_INTERPRETER,
visibility: DescriptorVisibility = DescriptorVisibilities.PUBLIC visibility: DescriptorVisibility = DescriptorVisibilities.PUBLIC
): IrSimpleFunction { ): IrSimpleFunction {
return IrFunctionImpl( return IrFactoryImpl.createFunction(
SYNTHETIC_OFFSET, SYNTHETIC_OFFSET, origin, IrSimpleFunctionSymbolImpl(), name, visibility, Modality.FINAL, type, SYNTHETIC_OFFSET, SYNTHETIC_OFFSET, origin, IrSimpleFunctionSymbolImpl(), name, visibility, Modality.FINAL, type,
isInline = false, isExternal = false, isTailrec = false, isSuspend = false, isOperator = true, isInfix = false, isExpect = false isInline = false, isExternal = false, isTailrec = false, isSuspend = false, isOperator = true, isInfix = false, isExpect = false
) )
@@ -5,10 +5,7 @@
package org.jetbrains.kotlin.ir.interpreter.state.reflection package org.jetbrains.kotlin.ir.interpreter.state.reflection
import org.jetbrains.kotlin.ir.declarations.IrClass import org.jetbrains.kotlin.ir.declarations.*
import org.jetbrains.kotlin.ir.declarations.IrConstructor
import org.jetbrains.kotlin.ir.declarations.IrFunction
import org.jetbrains.kotlin.ir.declarations.IrSimpleFunction
import org.jetbrains.kotlin.ir.expressions.IrCall import org.jetbrains.kotlin.ir.expressions.IrCall
import org.jetbrains.kotlin.ir.expressions.IrFunctionReference import org.jetbrains.kotlin.ir.expressions.IrFunctionReference
import org.jetbrains.kotlin.ir.expressions.putArgument import org.jetbrains.kotlin.ir.expressions.putArgument
@@ -68,7 +65,7 @@ internal class KFunctionState(
overriddenSymbols = listOf(invokeFunction.symbol) overriddenSymbols = listOf(invokeFunction.symbol)
dispatchReceiverParameter = invokeFunction.dispatchReceiverParameter?.deepCopyWithSymbols(initialParent = this) dispatchReceiverParameter = invokeFunction.dispatchReceiverParameter?.deepCopyWithSymbols(initialParent = this)
valueParameters = mutableListOf() val newValueParameters = mutableListOf<IrValueParameter>()
val call = when (irFunction) { val call = when (irFunction) {
is IrSimpleFunction -> irFunction.createCall() is IrSimpleFunction -> irFunction.createCall()
@@ -80,16 +77,17 @@ internal class KFunctionState(
if (dispatchParameter != null) { if (dispatchParameter != null) {
dispatchReceiver = dispatchParameter.createGetValue() dispatchReceiver = dispatchParameter.createGetValue()
if (!hasDispatchReceiver) (this@impl.valueParameters as MutableList) += dispatchParameter if (!hasDispatchReceiver) newValueParameters += dispatchParameter
} }
if (extensionParameter != null) { if (extensionParameter != null) {
extensionReceiver = extensionParameter.createGetValue() extensionReceiver = extensionParameter.createGetValue()
if (!hasExtensionReceiver) (this@impl.valueParameters as MutableList) += extensionParameter if (!hasExtensionReceiver) newValueParameters += extensionParameter
} }
irFunction.valueParameters.forEach { irFunction.valueParameters.forEach {
putArgument(it, it.createGetValue()) putArgument(it, it.createGetValue())
(this@impl.valueParameters as MutableList) += it newValueParameters += it
} }
this@impl.valueParameters = newValueParameters
} }
body = listOf(this.createReturn(call)).wrapWithBlockBody() body = listOf(this.createReturn(call)).wrapWithBlockBody()