Use IrFactory to create IrFunction in interpreter
This commit is contained in:
committed by
TeamCityServer
parent
1002d076b3
commit
0af918be4f
+1
-1
@@ -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
|
||||||
)
|
)
|
||||||
|
|||||||
+6
-8
@@ -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()
|
||||||
|
|||||||
Reference in New Issue
Block a user