From 6022fb4ec30e160fb4265445faf3406ac1eff3bd Mon Sep 17 00:00:00 2001 From: Dmitry Petrov Date: Thu, 20 Sep 2018 17:50:42 +0300 Subject: [PATCH] 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. --- .../kotlin/codegen/ClassBodyCodegen.java | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/ClassBodyCodegen.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/ClassBodyCodegen.java index b7240c5b536..cb59b634031 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/ClassBodyCodegen.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/ClassBodyCodegen.java @@ -300,19 +300,20 @@ public abstract class ClassBodyCodegen extends MemberCodegen myParametersIterator = myParameters.iterator(); Iterator toParametersIterator = toParameters.iterator(); for (; myArgI < myArgTypes.length; myArgI++, toArgI++) { - Type argType = myArgTypes[myArgI]; - KotlinType argKotlinType = myParametersIterator.next().getType(); + Type myArgType = myArgTypes[myArgI]; + Type toArgType = toArgTypes[toArgI]; - Type originalArgType = toArgTypes[toArgI]; - KotlinType originalArgKotlinType = toParametersIterator.next().getType(); + KotlinType myArgKotlinType = myParametersIterator.hasNext() ? myParametersIterator.next().getType() : null; + KotlinType toArgKotlinType = toParametersIterator.hasNext() ? toParametersIterator.next().getType() : null; - StackValue.local(argVar, argType, argKotlinType) - .put(originalArgType, originalArgKotlinType, iv); - argVar += argType.getSize(); + StackValue.local(argVar, myArgType, myArgKotlinType) + .put(toArgType, toArgKotlinType, iv); + argVar += myArgType.getSize(); } assert toArgI == toArgTypes.length : - "Invalid trait implementation signature: " + signature + " vs " + defaultImplsMethod + " for " + interfaceFun; + "Invalid trait implementation signature: " + signature + + " vs " + defaultImplsMethod + " for " + interfaceFun; } private List getParameters(FunctionDescriptor functionDescriptor) {