Fix default impl for suspend fun

We have an extra parameter in the mapped signature, and don't care about
Kotlin types there (so far). Might be a better idea to obtain the actual
descriptor for a suspend function (with extra parameter), and pass
arguments accordingly.
This commit is contained in:
Dmitry Petrov
2018-09-20 17:50:42 +03:00
parent 0f898dc6dc
commit 6022fb4ec3
@@ -300,19 +300,20 @@ public abstract class ClassBodyCodegen extends MemberCodegen<KtPureClassOrObject
Iterator<ParameterDescriptor> myParametersIterator = myParameters.iterator(); Iterator<ParameterDescriptor> myParametersIterator = myParameters.iterator();
Iterator<ParameterDescriptor> toParametersIterator = toParameters.iterator(); Iterator<ParameterDescriptor> toParametersIterator = toParameters.iterator();
for (; myArgI < myArgTypes.length; myArgI++, toArgI++) { for (; myArgI < myArgTypes.length; myArgI++, toArgI++) {
Type argType = myArgTypes[myArgI]; Type myArgType = myArgTypes[myArgI];
KotlinType argKotlinType = myParametersIterator.next().getType(); Type toArgType = toArgTypes[toArgI];
Type originalArgType = toArgTypes[toArgI]; KotlinType myArgKotlinType = myParametersIterator.hasNext() ? myParametersIterator.next().getType() : null;
KotlinType originalArgKotlinType = toParametersIterator.next().getType(); KotlinType toArgKotlinType = toParametersIterator.hasNext() ? toParametersIterator.next().getType() : null;
StackValue.local(argVar, argType, argKotlinType) StackValue.local(argVar, myArgType, myArgKotlinType)
.put(originalArgType, originalArgKotlinType, iv); .put(toArgType, toArgKotlinType, iv);
argVar += argType.getSize(); argVar += myArgType.getSize();
} }
assert toArgI == toArgTypes.length : assert toArgI == toArgTypes.length :
"Invalid trait implementation signature: " + signature + " vs " + defaultImplsMethod + " for " + interfaceFun; "Invalid trait implementation signature: " + signature +
" vs " + defaultImplsMethod + " for " + interfaceFun;
} }
private List<ParameterDescriptor> getParameters(FunctionDescriptor functionDescriptor) { private List<ParameterDescriptor> getParameters(FunctionDescriptor functionDescriptor) {