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, @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
); );
@@ -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);
@@ -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
); );
} }
@@ -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);