Add continuation parameter of suspend lambda's invoke to frame map

thus it will not overlap with $i$a and $i$f fake variables.
 #KT-28309
This commit is contained in:
Ilmir Usmanov
2018-12-12 19:09:34 +03:00
parent a107b5d6b6
commit ab472793ed
@@ -649,6 +649,12 @@ public class FunctionCodegen {
parentCodegen.state, signature, functionDescriptor.getExtensionReceiverParameter(),
functionDescriptor.getValueParameters(), isStaticMethod(context.getContextKind(), functionDescriptor)
);
// Manually add `continuation` parameter to frame map, thus it will not overlap with fake indices
if (functionDescriptor.isSuspend() && CoroutineCodegenUtilKt.isSuspendFunctionNotSuspensionView(functionDescriptor)) {
FunctionDescriptor view = CoroutineCodegenUtilKt.getOrCreateJvmSuspendFunctionView(functionDescriptor, parentCodegen.state);
ValueParameterDescriptor continuationValueDescriptor = view.getValueParameters().get(view.getValueParameters().size() - 1);
frameMap.enter(continuationValueDescriptor, typeMapper.mapType(continuationValueDescriptor));
}
if (context.isInlineMethodContext()) {
functionFakeIndex = newFakeTempIndex(mv, frameMap);
}