[PSI2IR, IR] Support functional types and literals for IR

This commit is contained in:
Anastasiya Shadrina
2021-09-16 17:45:26 +07:00
committed by TeamCityServer
parent 910660a083
commit 155e7b211b
6 changed files with 42 additions and 8 deletions
@@ -52,11 +52,15 @@ internal class KFunctionProxy(
// TODO check arity
var index = 0
val dispatchReceiver = state.irFunction.dispatchReceiverParameter?.let { environment.convertToState(args[index++], it.type) }
val contextReceiverParametersCount = state.irFunction.contextReceiverParametersCount
val contextReceivers = state.irFunction.valueParameters.take(contextReceiverParametersCount).map {
environment.convertToState(args[index++], it.type)
}
val extensionReceiver = state.irFunction.extensionReceiverParameter?.let { environment.convertToState(args[index++], it.type) }
val argsVariables = state.irFunction.valueParameters.map { parameter ->
val argsVariables = state.irFunction.valueParameters.drop(contextReceiverParametersCount).map { parameter ->
environment.convertToState(args[index++], parameter.type)
}
val valueArguments = listOfNotNull(dispatchReceiver, extensionReceiver) + argsVariables
val valueArguments = listOfNotNull(dispatchReceiver) + contextReceivers + listOfNotNull(extensionReceiver) + argsVariables
return callInterceptor.interceptProxy(state.irFunction, valueArguments)
}