From ade9f5a1e8739243eb356e8f17b7155b55a0c98f Mon Sep 17 00:00:00 2001 From: pyos Date: Mon, 20 Sep 2021 11:51:33 +0200 Subject: [PATCH] JVM: rename a couple ValueKinds to make their purpose clearer --- .../src/org/jetbrains/kotlin/codegen/CallGenerator.kt | 4 ++-- .../kotlin/codegen/inline/AnonymousObjectTransformer.kt | 2 +- .../org/jetbrains/kotlin/codegen/inline/InlineCodegen.kt | 8 ++++---- .../src/org/jetbrains/kotlin/codegen/inline/LambdaInfo.kt | 5 ++--- .../org/jetbrains/kotlin/codegen/inline/MethodInliner.kt | 2 +- .../jetbrains/kotlin/codegen/inline/PsiInlineCodegen.kt | 4 ++-- .../jetbrains/kotlin/codegen/inline/TransformationInfo.kt | 2 +- .../codegen/inline/coroutines/CoroutineTransformer.kt | 4 ++-- .../kotlin/backend/jvm/codegen/IrInlineCodegen.kt | 6 +++--- 9 files changed, 18 insertions(+), 19 deletions(-) diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/CallGenerator.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/CallGenerator.kt index 071792cd6a3..f53e6cb5761 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/CallGenerator.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/CallGenerator.kt @@ -18,8 +18,8 @@ enum class ValueKind { DEFAULT_INLINE_PARAMETER, DEFAULT_MASK, METHOD_HANDLE_IN_DEFAULT, - NON_INLINEABLE_ARGUMENT_FOR_INLINE_PARAMETER_CALLED_IN_SUSPEND, - NON_INLINEABLE_ARGUMENT_FOR_INLINE_SUSPEND_PARAMETER + READ_OF_INLINE_LAMBDA_FOR_INLINE_SUSPEND_PARAMETER, + READ_OF_OBJECT_FOR_INLINE_SUSPEND_PARAMETER } interface CallGenerator { diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/AnonymousObjectTransformer.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/AnonymousObjectTransformer.kt index 0fe46c79bc0..6401b4c1b0a 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/AnonymousObjectTransformer.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/AnonymousObjectTransformer.kt @@ -556,7 +556,7 @@ class AnonymousObjectTransformer( else capturedParamBuilder.addCapturedParam(desc, addUniqueField(desc.fieldName + INLINE_TRANSFORMATION_SUFFIX), false) if (desc.isSuspend) { - recapturedParamInfo.functionalArgument = NonInlineableArgumentForInlineableParameterCalledInSuspend + recapturedParamInfo.functionalArgument = NonInlineArgumentForInlineSuspendParameter.INLINE_LAMBDA_AS_VARIABLE } val composed = StackValue.field( desc.type, 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 3e361c34abe..b24758e1f49 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/InlineCodegen.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/InlineCodegen.kt @@ -233,10 +233,10 @@ abstract class InlineCodegen( val info = invocationParamBuilder.addNextValueParameter(jvmKotlinType.type, false, null, parameterIndex) info.functionalArgument = when (kind) { - ValueKind.NON_INLINEABLE_ARGUMENT_FOR_INLINE_PARAMETER_CALLED_IN_SUSPEND -> - NonInlineableArgumentForInlineableParameterCalledInSuspend - ValueKind.NON_INLINEABLE_ARGUMENT_FOR_INLINE_SUSPEND_PARAMETER -> - NonInlineableArgumentForInlineableSuspendParameter + ValueKind.READ_OF_INLINE_LAMBDA_FOR_INLINE_SUSPEND_PARAMETER -> + NonInlineArgumentForInlineSuspendParameter.INLINE_LAMBDA_AS_VARIABLE + ValueKind.READ_OF_OBJECT_FOR_INLINE_SUSPEND_PARAMETER -> + NonInlineArgumentForInlineSuspendParameter.OTHER ValueKind.DEFAULT_INLINE_PARAMETER -> DefaultValueOfInlineParameter else -> null 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 411882f649b..893dc9a20f2 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/LambdaInfo.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/LambdaInfo.kt @@ -51,7 +51,7 @@ abstract class LambdaInfo : FunctionalArgument { ?: error("Captured field not found: " + info.containingLambdaName + "." + info.fieldName) val recapturedParamInfo = builder.addCapturedParam(field, info.fieldName) if (info.isSuspend) { - recapturedParamInfo.functionalArgument = NonInlineableArgumentForInlineableParameterCalledInSuspend + recapturedParamInfo.functionalArgument = NonInlineArgumentForInlineSuspendParameter.INLINE_LAMBDA_AS_VARIABLE } } @@ -65,8 +65,7 @@ abstract class LambdaInfo : FunctionalArgument { } } -object NonInlineableArgumentForInlineableParameterCalledInSuspend : FunctionalArgument -object NonInlineableArgumentForInlineableSuspendParameter : FunctionalArgument +enum class NonInlineArgumentForInlineSuspendParameter : FunctionalArgument { INLINE_LAMBDA_AS_VARIABLE, OTHER } object DefaultValueOfInlineParameter : FunctionalArgument abstract class ExpressionLambda : LambdaInfo() { 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 36a460429bb..be046fe6d9e 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/MethodInliner.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/MethodInliner.kt @@ -885,7 +885,7 @@ class MethodInliner( insnNode is FieldInsnNode && insnNode.name.startsWith(CAPTURED_FIELD_FOLD_PREFIX) -> findCapturedField(insnNode, nodeRemapper).functionalArgument insnNode is FieldInsnNode && inliningContext.root.sourceCompilerForInline.isSuspendLambdaCapturedByOuterObjectOrLambda(insnNode.name) -> - NonInlineableArgumentForInlineableParameterCalledInSuspend + NonInlineArgumentForInlineSuspendParameter.INLINE_LAMBDA_AS_VARIABLE else -> null } diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/PsiInlineCodegen.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/PsiInlineCodegen.kt index bddb2957c04..c675cddb1e3 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/PsiInlineCodegen.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/PsiInlineCodegen.kt @@ -127,8 +127,8 @@ class PsiInlineCodegen( val value = codegen.gen(argumentExpression) val kind = when { isCallSiteIsSuspend(valueParameterDescriptor) && parameterType.kotlinType?.isSuspendFunctionTypeOrSubtype == true -> - ValueKind.NON_INLINEABLE_ARGUMENT_FOR_INLINE_PARAMETER_CALLED_IN_SUSPEND - isInlineSuspendParameter(valueParameterDescriptor) -> ValueKind.NON_INLINEABLE_ARGUMENT_FOR_INLINE_SUSPEND_PARAMETER + ValueKind.READ_OF_INLINE_LAMBDA_FOR_INLINE_SUSPEND_PARAMETER + isInlineSuspendParameter(valueParameterDescriptor) -> ValueKind.READ_OF_OBJECT_FOR_INLINE_SUSPEND_PARAMETER else -> ValueKind.GENERAL } putValueIfNeeded(parameterType, value, kind, parameterIndex) diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/TransformationInfo.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/TransformationInfo.kt index 23b847547e9..5744e76f3fe 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/TransformationInfo.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/TransformationInfo.kt @@ -97,7 +97,7 @@ class AnonymousObjectTransformationInfo internal constructor( // to map the inner reference to the outer regenerated type and producing an infinite recursion. override fun shouldRegenerate(sameModule: Boolean): Boolean = alreadyRegenerated || !sameModule || capturedOuterRegenerated || needReification || capturesAnonymousObjectThatMustBeRegenerated || - functionalArguments.values.any { it != NonInlineableArgumentForInlineableParameterCalledInSuspend } + functionalArguments.values.any { it != NonInlineArgumentForInlineSuspendParameter.INLINE_LAMBDA_AS_VARIABLE } override fun canRemoveAfterTransformation(): Boolean { // Note: It is unsafe to remove anonymous class that is referenced by GETSTATIC within lambda diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/coroutines/CoroutineTransformer.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/coroutines/CoroutineTransformer.kt index e35af3b31b7..350cda66eae 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/coroutines/CoroutineTransformer.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/coroutines/CoroutineTransformer.kt @@ -177,9 +177,9 @@ private const val NOINLINE_CALL_MARKER = "\$\$\$\$\$NOINLINE_CALL_MARKER\$\$\$\$ fun markNoinlineLambdaIfSuspend(mv: MethodVisitor, info: FunctionalArgument?) { when (info) { - NonInlineableArgumentForInlineableSuspendParameter -> + NonInlineArgumentForInlineSuspendParameter.OTHER -> mv.visitMethodInsn(Opcodes.INVOKESTATIC, NOINLINE_CALL_MARKER, "always", "()V", false) - NonInlineableArgumentForInlineableParameterCalledInSuspend -> + NonInlineArgumentForInlineSuspendParameter.INLINE_LAMBDA_AS_VARIABLE -> // depends on how it's substituted later mv.visitMethodInsn(Opcodes.INVOKESTATIC, NOINLINE_CALL_MARKER, "conditional", "()V", false) } } diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/IrInlineCodegen.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/IrInlineCodegen.kt index f8a63cacaf0..1e267652497 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/IrInlineCodegen.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/IrInlineCodegen.kt @@ -111,9 +111,9 @@ class IrInlineCodegen( ValueKind.DEFAULT_PARAMETER isInlineParameter && irValueParameter.type.isSuspendFunction() -> if (argumentExpression.isReadOfInlineLambda()) - ValueKind.NON_INLINEABLE_ARGUMENT_FOR_INLINE_PARAMETER_CALLED_IN_SUSPEND + ValueKind.READ_OF_INLINE_LAMBDA_FOR_INLINE_SUSPEND_PARAMETER else - ValueKind.NON_INLINEABLE_ARGUMENT_FOR_INLINE_SUSPEND_PARAMETER + ValueKind.READ_OF_OBJECT_FOR_INLINE_SUSPEND_PARAMETER else -> ValueKind.GENERAL } @@ -196,7 +196,7 @@ class IrExpressionLambdaImpl( val captureStart = if (isExtensionLambda) 1 else 0 // extension receiver comes before captures val captureEnd = captureStart + capturedParameters.size capturedVars = capturedParameters.mapIndexed { index, (parameter, _) -> - val isSuspend = parameter.isInlineParameter() && parameter.type.isSuspendFunctionTypeOrSubtype() + val isSuspend = parameter.isInlineParameter() && parameter.type.isSuspendFunction() capturedParamDesc(parameter.name.asString(), asmMethod.argumentTypes[captureStart + index], isSuspend) } // The parameter list should include the continuation if this is a suspend lambda. In the IR backend,