Minor: pass suspend flag to lambda's copy

This commit is contained in:
Ilmir Usmanov
2018-07-03 21:38:01 +03:00
parent 28ad498956
commit 4e8cc53962
4 changed files with 11 additions and 13 deletions
@@ -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
);
@@ -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);
@@ -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
);
}
@@ -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);