in src/main/java/com/intellij/rt/debugger/agent/TailCallContinuationTransformer.java [37:72]
public MethodVisitor visitMethod(int access, String name, String descriptor, String signature, String[] exceptions) {
MethodVisitor mv = super.visitMethod(access, name, descriptor, signature, exceptions);
switch (name) {
case "wrapContinuationReal":
if (descriptor.equals(WRAP_CONTINUATION_REAL_DESC)) {
wrapContinuationRealIsPresent[0] = true;
break;
}
case "wrapContinuation":
int argumentCount = Type.getArgumentCount(descriptor);
if (argumentCount != 6) {
System.err.println("TailCallContinuationTransformer: expected 6 arguments in TailCallAsyncStackTraceEntryKt#wrapContinuation, but got " + argumentCount + ", descriptor = " + descriptor);
break;
}
return new MethodVisitor(api, mv) {
@Override
public void visitCode() {
super.visitCode();
mv.visitVarInsn(Opcodes.ALOAD, 0);
mv.visitVarInsn(Opcodes.ALOAD, 1);
mv.visitVarInsn(Opcodes.ALOAD, 2);
mv.visitVarInsn(Opcodes.ILOAD, 3);
mv.visitVarInsn(Opcodes.ALOAD, 4);
mv.visitVarInsn(Opcodes.ALOAD, 5);
mv.visitMethodInsn(Opcodes.INVOKESTATIC, "kotlin/coroutines/jvm/internal/TailCallAsyncStackTraceEntryKt", "wrapContinuationReal", WRAP_CONTINUATION_REAL_DESC, false);
mv.visitInsn(Opcodes.ARETURN);
mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
mv.visitMaxs(2, 6);
mv.visitEnd();
}
};
}
return mv;
}