dumpCodeBlock(mv, 0, 0);
for(int i=1 ; i<numCodeBlocks ; i++) {
FrameInfo fi = codeBlocks[i];
MethodInsnNode min = (MethodInsnNode)(mn.instructions.get(fi.endInstruction));
if(InstrumentClass.COROUTINE_NAME.equals(min.owner) && "yield".equals(min.name)) {
// special case - call to yield() - resume AFTER the call
if(min.getOpcode() != Opcodes.INVOKESTATIC) {
throw new UnableToInstrumentException("invalid call to yield()", className, mn.name, mn.desc);
}
if (verifyVarInfoss != null) {
mv.visitMethodInsn(Opcodes.INVOKESTATIC, "nginx/clojure/wave/SuspendMethodVerifier", "onYield", "()V");
}
emitStoreState(mv, i, fi);
mv.visitFieldInsn(Opcodes.GETSTATIC, STACK_NAME,
"exception_instance_not_for_user_code",
CheckInstrumentationVisitor.EXCEPTION_DESC);
mv.visitInsn(Opcodes.ATHROW);
min.accept(mv); // only the call
mv.visitLabel(lMethodCalls[i-1]);
emitRestoreState(mv, i, fi);
dumpCodeBlock(mv, i, 1); // skip the call
} else {