@Override public AbstractInsnNode clone(final Map<LabelNode, LabelNode> labels) { FrameNode clone = new FrameNode(); clone.type = type; if (local != null) { clone.local = new ArrayList<Object>(); for (int i = 0; i < local.size(); ++i) { Object l = local.get(i); if (l instanceof LabelNode) { l = labels.get(l); } clone.local.add(l); } } if (stack != null) { clone.stack = new ArrayList<Object>(); for (int i = 0; i < stack.size(); ++i) { Object s = stack.get(i); if (s instanceof LabelNode) { s = labels.get(s); } clone.stack.add(s); } } return clone; }
/** * Makes the given visitor visit this stack map frame. * * @param mv * a method visitor. */ @Override public void accept(final MethodVisitor mv) { switch (type) { case Opcodes.F_NEW: case Opcodes.F_FULL: mv.visitFrame(type, local.size(), asArray(local), stack.size(), asArray(stack)); break; case Opcodes.F_APPEND: mv.visitFrame(type, local.size(), asArray(local), 0, null); break; case Opcodes.F_CHOP: mv.visitFrame(type, local.size(), null, 0, null); break; case Opcodes.F_SAME: mv.visitFrame(type, 0, null, 0, null); break; case Opcodes.F_SAME1: mv.visitFrame(type, 0, null, 1, asArray(stack)); break; } }
@Override public void visitFrame(final int type, final int nLocal, final Object[] local, final int nStack, final Object[] stack) { instructions.add(new FrameNode(type, nLocal, local == null ? null : getLabelNodes(local), nStack, stack == null ? null : getLabelNodes(stack))); }
return (N)new FrameNode( old.type, old.local != null ? old.local.size() : 0,