Minor: pass suspend flag to lambda's copy
This commit is contained in:
@@ -754,7 +754,7 @@ public class FunctionCodegen {
|
||||
@NotNull List<ValueParameterDescriptor> destructuredParametersForSuspendLambda,
|
||||
int shiftForDestructuringVariables
|
||||
) {
|
||||
if (functionDescriptor.isSuspend()) {
|
||||
if (functionDescriptor.isSuspend() && !(functionDescriptor instanceof AnonymousFunctionDescriptor)) {
|
||||
FunctionDescriptor unwrapped = CoroutineCodegenUtilKt.unwrapInitialDescriptorForSuspendFunction(
|
||||
functionDescriptor
|
||||
);
|
||||
|
||||
+1
-1
@@ -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);
|
||||
|
||||
+6
-5
@@ -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
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
+3
-6
@@ -365,7 +365,6 @@ public abstract class FunctionDescriptorImpl extends DeclarationDescriptorNonRoo
|
||||
private Map<UserDataKey<?>, Object> userDataMap = new LinkedHashMap<UserDataKey<?>, 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<ValueParameterDescriptor> 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);
|
||||
|
||||
Reference in New Issue
Block a user