diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/ExpressionCodegen.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/ExpressionCodegen.java index ba44c25d6bb..16f03cd2e1e 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/ExpressionCodegen.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/ExpressionCodegen.java @@ -2853,16 +2853,8 @@ public class ExpressionCodegen extends KtVisitor impleme @NotNull ArgumentGenerator argumentGenerator ) { boolean isSuspensionPoint = CoroutineCodegenUtilKt.isSuspensionPointInStateMachine(resolvedCall, bindingContext); - if (isSuspensionPoint) { - // Inline markers are used to spill the stack before coroutine suspension - addInlineMarker(v, true); - } boolean isConstructor = resolvedCall.getResultingDescriptor() instanceof ConstructorDescriptor; - if (!isConstructor) { // otherwise already - receiver = StackValue.receiver(resolvedCall, receiver, this, callableMethod); - receiver.put(receiver.type, v); - callableMethod.afterReceiverGeneration(v); - } + putReceiverAndInlineMarkerIfNeeded(callableMethod, resolvedCall, receiver, isSuspensionPoint, isConstructor); callGenerator.processAndPutHiddenParameters(false); @@ -2913,6 +2905,25 @@ public class ExpressionCodegen extends KtVisitor impleme } } + private void putReceiverAndInlineMarkerIfNeeded( + @NotNull Callable callableMethod, + @NotNull ResolvedCall resolvedCall, + @NotNull StackValue receiver, + boolean isSuspensionPoint, + boolean isConstructor + ) { + if (isSuspensionPoint) { + // Inline markers are used to spill the stack before coroutine suspension + addInlineMarker(v, true); + } + + if (!isConstructor) { // otherwise already + receiver = StackValue.receiver(resolvedCall, receiver, this, callableMethod); + receiver.put(receiver.type, v); + callableMethod.afterReceiverGeneration(v); + } + } + @NotNull private CallGenerator getOrCreateCallGenerator( @NotNull CallableDescriptor descriptor,