diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/FunctionCodegen.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/FunctionCodegen.java index 5fe7c2de27b..39fce5ed5b9 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/FunctionCodegen.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/FunctionCodegen.java @@ -754,7 +754,7 @@ public class FunctionCodegen { @NotNull List destructuredParametersForSuspendLambda, int shiftForDestructuringVariables ) { - if (functionDescriptor.isSuspend()) { + if (functionDescriptor.isSuspend() && !(functionDescriptor instanceof AnonymousFunctionDescriptor)) { FunctionDescriptor unwrapped = CoroutineCodegenUtilKt.unwrapInitialDescriptorForSuspendFunction( functionDescriptor ); diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/binding/CodegenAnnotatingVisitor.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/binding/CodegenAnnotatingVisitor.java index 131f631fee4..c308a5baab1 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/binding/CodegenAnnotatingVisitor.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/binding/CodegenAnnotatingVisitor.java @@ -611,7 +611,7 @@ class CodegenAnnotatingVisitor extends KtVisitorVoid { nameStack.push(name); if (functionDescriptor instanceof SimpleFunctionDescriptor && functionDescriptor.isSuspend()) { - createAndRecordSuspendFunctionView(closure, (SimpleFunctionDescriptor) functionDescriptor,true); + createAndRecordSuspendFunctionView(closure, (SimpleFunctionDescriptor) functionDescriptor, true); } functionsStack.push(functionDescriptor); diff --git a/compiler/frontend/src/org/jetbrains/kotlin/descriptors/impl/AnonymousFunctionDescriptor.java b/compiler/frontend/src/org/jetbrains/kotlin/descriptors/impl/AnonymousFunctionDescriptor.java index 0f76f9c623f..6ed6cdfde8a 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/descriptors/impl/AnonymousFunctionDescriptor.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/descriptors/impl/AnonymousFunctionDescriptor.java @@ -25,8 +25,7 @@ public class AnonymousFunctionDescriptor extends SimpleFunctionDescriptorImpl { @NotNull SourceElement source, boolean isSuspend ) { - super(containingDeclaration, null, annotations, SpecialNames.ANONYMOUS_FUNCTION, kind, source); - this.isSuspend = isSuspend; + this(containingDeclaration, null, annotations, SpecialNames.ANONYMOUS_FUNCTION, kind, source, isSuspend); } private AnonymousFunctionDescriptor( @@ -35,10 +34,11 @@ public class AnonymousFunctionDescriptor extends SimpleFunctionDescriptorImpl { @NotNull Annotations annotations, @NotNull Name name, @NotNull Kind kind, - @NotNull SourceElement source + @NotNull SourceElement source, + boolean isSuspend ) { super(declarationDescriptor, original, annotations, name, kind, source); - this.isSuspend = false; + this.isSuspend = isSuspend; } @NotNull @@ -57,7 +57,8 @@ public class AnonymousFunctionDescriptor extends SimpleFunctionDescriptorImpl { annotations, newName != null ? newName : getName(), kind, - source + source, + isSuspend ); } diff --git a/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/FunctionDescriptorImpl.java b/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/FunctionDescriptorImpl.java index f9382f422c3..c0218396d0f 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/FunctionDescriptorImpl.java +++ b/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/FunctionDescriptorImpl.java @@ -365,7 +365,6 @@ public abstract class FunctionDescriptorImpl extends DeclarationDescriptorNonRoo private Map, Object> userDataMap = new LinkedHashMap, Object>(); private Boolean newHasSynthesizedParameterNames = null; protected boolean justForTypeSubstitution = false; - private boolean isSuspend; public CopyConfiguration( @NotNull TypeSubstitution substitution, @@ -376,8 +375,7 @@ public abstract class FunctionDescriptorImpl extends DeclarationDescriptorNonRoo @NotNull List newValueParameterDescriptors, @Nullable KotlinType newExtensionReceiverParameterType, @NotNull KotlinType newReturnType, - @Nullable Name name, - boolean isSuspend + @Nullable Name name ) { this.substitution = substitution; this.newOwner = newOwner; @@ -388,7 +386,6 @@ public abstract class FunctionDescriptorImpl extends DeclarationDescriptorNonRoo this.newExtensionReceiverParameterType = newExtensionReceiverParameterType; this.newReturnType = newReturnType; this.name = name; - this.isSuspend = isSuspend; } @Override @@ -570,7 +567,7 @@ public abstract class FunctionDescriptorImpl extends DeclarationDescriptorNonRoo return new CopyConfiguration( substitutor.getSubstitution(), getContainingDeclaration(), getModality(), getVisibility(), getKind(), getValueParameters(), - getExtensionReceiverParameterType(), getReturnType(), null, isSuspend); + getExtensionReceiverParameterType(), getReturnType(), null); } @Nullable @@ -660,7 +657,7 @@ public abstract class FunctionDescriptorImpl extends DeclarationDescriptorNonRoo substitutedDescriptor.setExternal(isExternal); substitutedDescriptor.setInline(isInline); substitutedDescriptor.setTailrec(isTailrec); - substitutedDescriptor.setSuspend(configuration.isSuspend); + substitutedDescriptor.setSuspend(isSuspend); substitutedDescriptor.setExpect(isExpect); substitutedDescriptor.setActual(isActual); substitutedDescriptor.setHasStableParameterNames(hasStableParameterNames);