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:
@@ -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) {
|
||||||
|
|||||||
Reference in New Issue
Block a user