From 4cae880b44af21985955d5fe30a9aeb492848c0c Mon Sep 17 00:00:00 2001 From: pyos Date: Tue, 25 May 2021 18:12:19 +0200 Subject: [PATCH] JVM: remove unused DefaultLambda.parameterOffsetsInDefault --- .../org/jetbrains/kotlin/codegen/inline/InlineCodegen.kt | 2 -- .../org/jetbrains/kotlin/codegen/inline/LambdaInfo.kt | 9 ++++----- .../org/jetbrains/kotlin/codegen/inline/MethodInliner.kt | 8 ++++---- 3 files changed, 8 insertions(+), 11 deletions(-) diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/InlineCodegen.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/InlineCodegen.kt index 4536948555f..b0309657e52 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/InlineCodegen.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/InlineCodegen.kt @@ -440,8 +440,6 @@ abstract class InlineCodegen( paramIndex, ValueKind.DEFAULT_LAMBDA_CAPTURED_PARAMETER ) - - defaultLambda.parameterOffsetsInDefault.add(invocationParamBuilder.nextParameterOffset) } } diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/LambdaInfo.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/LambdaInfo.kt index 7dd69853f53..5bed790ce32 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/LambdaInfo.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/LambdaInfo.kt @@ -83,12 +83,9 @@ abstract class DefaultLambda( val offset: Int, val needReification: Boolean ) : LambdaInfo(isCrossinline) { - final override var isBoundCallableReference by Delegates.notNull() private set - val parameterOffsetsInDefault: MutableList = arrayListOf() - final override lateinit var invokeMethod: Method private set @@ -113,8 +110,10 @@ abstract class DefaultLambda( } capturedVars = if (isFunctionReference || isPropertyReference) - constructor?.desc?.let { Type.getArgumentTypes(it) }?.singleOrNull()?.let { - originalBoundReceiverType = it + capturedArgs.singleOrNull()?.let { + if (AsmUtil.isPrimitive(it)) { + originalBoundReceiverType = it + } listOf(capturedParamDesc(AsmUtil.RECEIVER_PARAMETER_NAME, AsmUtil.boxType(it), isSuspend = false)) } ?: emptyList() else diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/MethodInliner.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/MethodInliner.kt index 03e5f8ff495..f27c4f21f98 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/MethodInliner.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/MethodInliner.kt @@ -425,10 +425,10 @@ class MethodInliner( if (DEFAULT_LAMBDA_FAKE_CALL == owner) { val index = name.substringAfter(DEFAULT_LAMBDA_FAKE_CALL).toInt() val lambda = getFunctionalArgumentIfExists(index) as DefaultLambda - lambda.parameterOffsetsInDefault.zip(lambda.capturedVars).asReversed().forEach { (_, captured) -> - val originalBoundReceiverType = lambda.originalBoundReceiverType - if (lambda.isBoundCallableReference && AsmUtil.isPrimitive(originalBoundReceiverType)) { - StackValue.onStack(originalBoundReceiverType!!).put(captured.type, InstructionAdapter(this)) + for (captured in lambda.capturedVars.asReversed()) { + lambda.originalBoundReceiverType?.let { + // The receiver is the only captured value; it needs to be boxed. + StackValue.onStack(it).put(captured.type, InstructionAdapter(this)) } super.visitFieldInsn( Opcodes.PUTSTATIC,