mv.visitMaxs(0, 0);
mv.visitEnd();
}
private void jumpInsns(final ClassWriter cw) {
MethodVisitor mv = cw.visitMethod(ACC_PUBLIC,
"jumpInsns",
"(IJFD)V",
null,
null);
Label l0 = new Label();
// ifxx
mv.visitVarInsn(ILOAD, 1);
mv.visitJumpInsn(IFNE, l0);
mv.visitVarInsn(ILOAD, 1);
mv.visitJumpInsn(IFEQ, l0);
mv.visitVarInsn(ILOAD, 1);
mv.visitJumpInsn(IFLE, l0);
mv.visitVarInsn(ILOAD, 1);
mv.visitJumpInsn(IFGE, l0);
mv.visitVarInsn(ILOAD, 1);
mv.visitJumpInsn(IFLT, l0);
mv.visitVarInsn(ILOAD, 1);
mv.visitJumpInsn(IFGT, l0);
// ificmpxx
mv.visitVarInsn(ILOAD, 1);
mv.visitVarInsn(ILOAD, 1);
mv.visitJumpInsn(IF_ICMPNE, l0);
mv.visitVarInsn(ILOAD, 1);
mv.visitVarInsn(ILOAD, 1);
mv.visitJumpInsn(IF_ICMPEQ, l0);
mv.visitVarInsn(ILOAD, 1);
mv.visitVarInsn(ILOAD, 1);
mv.visitJumpInsn(IF_ICMPLE, l0);
mv.visitVarInsn(ILOAD, 1);
mv.visitVarInsn(ILOAD, 1);
mv.visitJumpInsn(IF_ICMPGE, l0);
mv.visitVarInsn(ILOAD, 1);
mv.visitVarInsn(ILOAD, 1);
mv.visitJumpInsn(IF_ICMPLT, l0);
mv.visitVarInsn(ILOAD, 1);
mv.visitVarInsn(ILOAD, 1);
mv.visitJumpInsn(IF_ICMPGT, l0);
// lcmp
mv.visitVarInsn(LLOAD, 2);
mv.visitVarInsn(LLOAD, 2);
mv.visitInsn(LCMP);
mv.visitJumpInsn(IFNE, l0);
// fcmpx
mv.visitVarInsn(FLOAD, 4);
mv.visitVarInsn(FLOAD, 4);
mv.visitInsn(FCMPL);
mv.visitJumpInsn(IFNE, l0);
mv.visitVarInsn(FLOAD, 4);
mv.visitVarInsn(FLOAD, 4);
mv.visitInsn(FCMPG);
mv.visitJumpInsn(IFNE, l0);
// dcmpx
mv.visitVarInsn(DLOAD, 5);
mv.visitVarInsn(DLOAD, 5);
mv.visitInsn(DCMPL);
mv.visitJumpInsn(IFNE, l0);
mv.visitVarInsn(DLOAD, 5);
mv.visitVarInsn(DLOAD, 5);
mv.visitInsn(DCMPG);
mv.visitJumpInsn(IFNE, l0);
// ifacmp
mv.visitVarInsn(ALOAD, 0);
mv.visitVarInsn(ALOAD, 0);
mv.visitJumpInsn(IF_ACMPNE, l0);
mv.visitVarInsn(ALOAD, 0);
mv.visitVarInsn(ALOAD, 0);
mv.visitJumpInsn(IF_ACMPEQ, l0);
// ifnull
mv.visitVarInsn(ALOAD, 0);
mv.visitJumpInsn(IFNULL, l0);
mv.visitInsn(ICONST_0);
mv.visitVarInsn(ISTORE, 7);
mv.visitVarInsn(ALOAD, 0);
mv.visitJumpInsn(IFNONNULL, l0);
mv.visitInsn(ICONST_0);
mv.visitVarInsn(ISTORE, 7);
mv.visitVarInsn(ALOAD, 0);
// tableswitch
Label l1 = new Label();
Label l2 = new Label();
Label l3 = new Label();
mv.visitVarInsn(ILOAD, 1);
mv.visitTableSwitchInsn(0, 2, l3/*default*/, l1, l2, l3 );
mv.visitLabel(l1);
mv.visitInsn(ICONST_1);
mv.visitVarInsn(ISTORE, 7);
mv.visitJumpInsn(GOTO, l3);
mv.visitLabel(l2);
mv.visitInsn(ICONST_2);
mv.visitVarInsn(ISTORE, 7);
mv.visitJumpInsn(GOTO, l3);
mv.visitLabel(l3);
mv.visitVarInsn(ILOAD, 7);
// lookupswitch
Label l4 = new Label();
Label l5 = new Label();
Label l6 = new Label();
mv.visitVarInsn(ILOAD, 1);
mv.visitLookupSwitchInsn(l6, new int[] { 0, 1, 2 }, new Label[] {
l4,
l5,
l6 });
mv.visitLabel(l4);
mv.visitInsn(ICONST_1);
mv.visitVarInsn(ISTORE, 7);
mv.visitJumpInsn(GOTO, l6);
mv.visitLabel(l5);
mv.visitInsn(ICONST_2);
mv.visitVarInsn(ISTORE, 7);
mv.visitJumpInsn(GOTO, l6);
mv.visitLabel(l6);
mv.visitVarInsn(ILOAD, 7);
// throw
mv.visitInsn(ACONST_NULL);
mv.visitInsn(ATHROW);
// misc instructions to cover code in MethodWriter.resizeInsns
mv.visitLabel(l0);
mv.visitInsn(ICONST_1);
mv.visitInsn(ICONST_2);
mv.visitMultiANewArrayInsn("[[I", 2);
mv.visitVarInsn(ALOAD, 0);
mv.visitMethodInsn(INVOKEINTERFACE, "java/util/List", "size", "()V");
// end method
mv.visitInsn(RETURN);
mv.visitMaxs(0, 0);
mv.visitEnd();
}