Minor: pass suspend flag to lambda's copy
This commit is contained in:
@@ -754,7 +754,7 @@ public class FunctionCodegen {
|
|||||||
@NotNull List<ValueParameterDescriptor> destructuredParametersForSuspendLambda,
|
@NotNull List<ValueParameterDescriptor> destructuredParametersForSuspendLambda,
|
||||||
int shiftForDestructuringVariables
|
int shiftForDestructuringVariables
|
||||||
) {
|
) {
|
||||||
if (functionDescriptor.isSuspend()) {
|
if (functionDescriptor.isSuspend() && !(functionDescriptor instanceof AnonymousFunctionDescriptor)) {
|
||||||
FunctionDescriptor unwrapped = CoroutineCodegenUtilKt.unwrapInitialDescriptorForSuspendFunction(
|
FunctionDescriptor unwrapped = CoroutineCodegenUtilKt.unwrapInitialDescriptorForSuspendFunction(
|
||||||
functionDescriptor
|
functionDescriptor
|
||||||
);
|
);
|
||||||
|
|||||||
+1
-1
@@ -611,7 +611,7 @@ class CodegenAnnotatingVisitor extends KtVisitorVoid {
|
|||||||
nameStack.push(name);
|
nameStack.push(name);
|
||||||
|
|
||||||
if (functionDescriptor instanceof SimpleFunctionDescriptor && functionDescriptor.isSuspend()) {
|
if (functionDescriptor instanceof SimpleFunctionDescriptor && functionDescriptor.isSuspend()) {
|
||||||
createAndRecordSuspendFunctionView(closure, (SimpleFunctionDescriptor) functionDescriptor,true);
|
createAndRecordSuspendFunctionView(closure, (SimpleFunctionDescriptor) functionDescriptor, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
functionsStack.push(functionDescriptor);
|
functionsStack.push(functionDescriptor);
|
||||||
|
|||||||
+6
-5
@@ -25,8 +25,7 @@ public class AnonymousFunctionDescriptor extends SimpleFunctionDescriptorImpl {
|
|||||||
@NotNull SourceElement source,
|
@NotNull SourceElement source,
|
||||||
boolean isSuspend
|
boolean isSuspend
|
||||||
) {
|
) {
|
||||||
super(containingDeclaration, null, annotations, SpecialNames.ANONYMOUS_FUNCTION, kind, source);
|
this(containingDeclaration, null, annotations, SpecialNames.ANONYMOUS_FUNCTION, kind, source, isSuspend);
|
||||||
this.isSuspend = isSuspend;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private AnonymousFunctionDescriptor(
|
private AnonymousFunctionDescriptor(
|
||||||
@@ -35,10 +34,11 @@ public class AnonymousFunctionDescriptor extends SimpleFunctionDescriptorImpl {
|
|||||||
@NotNull Annotations annotations,
|
@NotNull Annotations annotations,
|
||||||
@NotNull Name name,
|
@NotNull Name name,
|
||||||
@NotNull Kind kind,
|
@NotNull Kind kind,
|
||||||
@NotNull SourceElement source
|
@NotNull SourceElement source,
|
||||||
|
boolean isSuspend
|
||||||
) {
|
) {
|
||||||
super(declarationDescriptor, original, annotations, name, kind, source);
|
super(declarationDescriptor, original, annotations, name, kind, source);
|
||||||
this.isSuspend = false;
|
this.isSuspend = isSuspend;
|
||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
@@ -57,7 +57,8 @@ public class AnonymousFunctionDescriptor extends SimpleFunctionDescriptorImpl {
|
|||||||
annotations,
|
annotations,
|
||||||
newName != null ? newName : getName(),
|
newName != null ? newName : getName(),
|
||||||
kind,
|
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 Map<UserDataKey<?>, Object> userDataMap = new LinkedHashMap<UserDataKey<?>, Object>();
|
||||||
private Boolean newHasSynthesizedParameterNames = null;
|
private Boolean newHasSynthesizedParameterNames = null;
|
||||||
protected boolean justForTypeSubstitution = false;
|
protected boolean justForTypeSubstitution = false;
|
||||||
private boolean isSuspend;
|
|
||||||
|
|
||||||
public CopyConfiguration(
|
public CopyConfiguration(
|
||||||
@NotNull TypeSubstitution substitution,
|
@NotNull TypeSubstitution substitution,
|
||||||
@@ -376,8 +375,7 @@ public abstract class FunctionDescriptorImpl extends DeclarationDescriptorNonRoo
|
|||||||
@NotNull List<ValueParameterDescriptor> newValueParameterDescriptors,
|
@NotNull List<ValueParameterDescriptor> newValueParameterDescriptors,
|
||||||
@Nullable KotlinType newExtensionReceiverParameterType,
|
@Nullable KotlinType newExtensionReceiverParameterType,
|
||||||
@NotNull KotlinType newReturnType,
|
@NotNull KotlinType newReturnType,
|
||||||
@Nullable Name name,
|
@Nullable Name name
|
||||||
boolean isSuspend
|
|
||||||
) {
|
) {
|
||||||
this.substitution = substitution;
|
this.substitution = substitution;
|
||||||
this.newOwner = newOwner;
|
this.newOwner = newOwner;
|
||||||
@@ -388,7 +386,6 @@ public abstract class FunctionDescriptorImpl extends DeclarationDescriptorNonRoo
|
|||||||
this.newExtensionReceiverParameterType = newExtensionReceiverParameterType;
|
this.newExtensionReceiverParameterType = newExtensionReceiverParameterType;
|
||||||
this.newReturnType = newReturnType;
|
this.newReturnType = newReturnType;
|
||||||
this.name = name;
|
this.name = name;
|
||||||
this.isSuspend = isSuspend;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -570,7 +567,7 @@ public abstract class FunctionDescriptorImpl extends DeclarationDescriptorNonRoo
|
|||||||
return new CopyConfiguration(
|
return new CopyConfiguration(
|
||||||
substitutor.getSubstitution(),
|
substitutor.getSubstitution(),
|
||||||
getContainingDeclaration(), getModality(), getVisibility(), getKind(), getValueParameters(),
|
getContainingDeclaration(), getModality(), getVisibility(), getKind(), getValueParameters(),
|
||||||
getExtensionReceiverParameterType(), getReturnType(), null, isSuspend);
|
getExtensionReceiverParameterType(), getReturnType(), null);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
@@ -660,7 +657,7 @@ public abstract class FunctionDescriptorImpl extends DeclarationDescriptorNonRoo
|
|||||||
substitutedDescriptor.setExternal(isExternal);
|
substitutedDescriptor.setExternal(isExternal);
|
||||||
substitutedDescriptor.setInline(isInline);
|
substitutedDescriptor.setInline(isInline);
|
||||||
substitutedDescriptor.setTailrec(isTailrec);
|
substitutedDescriptor.setTailrec(isTailrec);
|
||||||
substitutedDescriptor.setSuspend(configuration.isSuspend);
|
substitutedDescriptor.setSuspend(isSuspend);
|
||||||
substitutedDescriptor.setExpect(isExpect);
|
substitutedDescriptor.setExpect(isExpect);
|
||||||
substitutedDescriptor.setActual(isActual);
|
substitutedDescriptor.setActual(isActual);
|
||||||
substitutedDescriptor.setHasStableParameterNames(hasStableParameterNames);
|
substitutedDescriptor.setHasStableParameterNames(hasStableParameterNames);
|
||||||
|
|||||||
Reference in New Issue
Block a user