From 0af918be4f06a04d6bf98554c4278db23e7c14c8 Mon Sep 17 00:00:00 2001 From: Ivan Kylchik Date: Wed, 28 Jul 2021 19:54:11 +0300 Subject: [PATCH] Use IrFactory to create IrFunction in interpreter --- .../kotlin/ir/interpreter/IrTreeBuildUtils.kt | 2 +- .../interpreter/state/reflection/KFunctionState.kt | 14 ++++++-------- 2 files changed, 7 insertions(+), 9 deletions(-) diff --git a/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/IrTreeBuildUtils.kt b/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/IrTreeBuildUtils.kt index 6a06a1bbe59..756085a175e 100644 --- a/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/IrTreeBuildUtils.kt +++ b/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/IrTreeBuildUtils.kt @@ -133,7 +133,7 @@ internal fun createTempFunction( origin: IrDeclarationOrigin = TEMP_FUNCTION_FOR_INTERPRETER, visibility: DescriptorVisibility = DescriptorVisibilities.PUBLIC ): IrSimpleFunction { - return IrFunctionImpl( + return IrFactoryImpl.createFunction( 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 ) diff --git a/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/state/reflection/KFunctionState.kt b/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/state/reflection/KFunctionState.kt index 47d995fced6..48d5a19a965 100644 --- a/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/state/reflection/KFunctionState.kt +++ b/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/state/reflection/KFunctionState.kt @@ -5,10 +5,7 @@ package org.jetbrains.kotlin.ir.interpreter.state.reflection -import org.jetbrains.kotlin.ir.declarations.IrClass -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.declarations.* import org.jetbrains.kotlin.ir.expressions.IrCall import org.jetbrains.kotlin.ir.expressions.IrFunctionReference import org.jetbrains.kotlin.ir.expressions.putArgument @@ -68,7 +65,7 @@ internal class KFunctionState( overriddenSymbols = listOf(invokeFunction.symbol) dispatchReceiverParameter = invokeFunction.dispatchReceiverParameter?.deepCopyWithSymbols(initialParent = this) - valueParameters = mutableListOf() + val newValueParameters = mutableListOf() val call = when (irFunction) { is IrSimpleFunction -> irFunction.createCall() @@ -80,16 +77,17 @@ internal class KFunctionState( if (dispatchParameter != null) { dispatchReceiver = dispatchParameter.createGetValue() - if (!hasDispatchReceiver) (this@impl.valueParameters as MutableList) += dispatchParameter + if (!hasDispatchReceiver) newValueParameters += dispatchParameter } if (extensionParameter != null) { extensionReceiver = extensionParameter.createGetValue() - if (!hasExtensionReceiver) (this@impl.valueParameters as MutableList) += extensionParameter + if (!hasExtensionReceiver) newValueParameters += extensionParameter } irFunction.valueParameters.forEach { putArgument(it, it.createGetValue()) - (this@impl.valueParameters as MutableList) += it + newValueParameters += it } + this@impl.valueParameters = newValueParameters } body = listOf(this.createReturn(call)).wrapWithBlockBody()