JVM_IR indy-lambdas: minor updates and fixes

KT-44278 KT-26060 KT-42621
This commit is contained in:
Dmitry Petrov
2021-01-29 19:14:45 +03:00
committed by TeamCityServer
parent 088448043a
commit ab20a8ffff
40 changed files with 1209 additions and 324 deletions
@@ -15,6 +15,7 @@ import org.jetbrains.kotlin.backend.jvm.JvmBackendContext
import org.jetbrains.kotlin.backend.jvm.JvmLoweredDeclarationOrigin
import org.jetbrains.kotlin.backend.jvm.ir.*
import org.jetbrains.kotlin.backend.jvm.lower.inlineclasses.InlineClassAbi
import org.jetbrains.kotlin.builtins.functions.BuiltInFunctionArity
import org.jetbrains.kotlin.config.JvmClosureGenerationScheme
import org.jetbrains.kotlin.descriptors.DescriptorVisibilities
import org.jetbrains.kotlin.descriptors.Modality
@@ -101,7 +102,7 @@ internal class FunctionReferenceLowering(private val context: JvmBackendContext)
private fun wrapLambdaReferenceWithIndySamConversion(expression: IrBlock, reference: IrFunctionReference): IrBlock {
expression.statements[expression.statements.size - 1] = wrapWithIndySamConversion(reference.type, reference)
val irLambda = reference.symbol.owner
// JDK LambdaMetafactory can't adapt '(...)V' tp '(...)Lkotlin/Unit;'.
// JDK LambdaMetafactory can't adapt '(...)V' to '(...)Lkotlin/Unit;'.
if (irLambda.returnType.isUnit()) {
irLambda.returnType = irLambda.returnType.makeNullable()
}
@@ -171,7 +172,7 @@ internal class FunctionReferenceLowering(private val context: JvmBackendContext)
if (plainLambda) {
var parametersCount = target.valueParameters.size
if (target.extensionReceiverParameter != null) ++parametersCount
if (parametersCount > 22)
if (parametersCount >= BuiltInFunctionArity.BIG_ARITY)
return false
}