/** * Creates a new {@link Label}. * * @return a new {@link Label}. */ public Label newLabel() { return new Label(); }
/** * Returns the label corresponding to the given offset. The default * implementation of this method creates a label for the given offset if it * has not been already created. * * @param offset * a bytecode offset in a method. * @param labels * the already created labels, indexed by their offset. If a * label already exists for offset this method must not create a * new one. Otherwise it must store the new label in this array. * @return a non null Label, which must be equal to labels[offset]. */ protected Label readLabel(int offset, Label[] labels) { if (labels[offset] == null) { labels[offset] = new Label(); } return labels[offset]; }
addSuccessor(stackSize + 1, label); nextInsn = new Label();
/** * Marks the current code position with a new label. * * @return the label that was created to mark the current code position. */ public Label mark() { Label label = new Label(); mv.visitLabel(label); return label; }
@Override public void visitTypeInsn(final int opcode, final String type) { if (opcode == Opcodes.NEW) { if (labels == null) { Label l = new Label(); labels = new ArrayList<Label>(3); labels.add(l); if (mv != null) { mv.visitLabel(l); } } for (int i = 0; i < labels.size(); ++i) { uninitializedTypes.put(labels.get(i), type); } } if (mv != null) { mv.visitTypeInsn(opcode, type); } execute(opcode, 0, type); }
/** * Ends the current basic block. This method must be used in the case where * the current basic block does not have any successor. */ private void noSuccessor() { if (compute == FRAMES) { Label l = new Label(); l.frame = new Frame(); l.frame.owner = l; l.resolve(this, code.length, code.data); previousBlock.successor = l; previousBlock = l; } else { currentBlock.outputStackMax = maxStackSize; } currentBlock = null; }
currentLocals = size; labels = new Label(); labels.status |= Label.PUSHED; visitLabel(labels);
visitLabel(new Label());
labels[label] = new Label(); labels[label] = new Label(); labels[label] = new Label(); labels[label] = new Label(); labels[label] = new Label(); labels[label] = new Label(); labels[label] = start = new Label(); labels[label] = end = new Label(); labels[label] = handler = new Label(); labels[label] = new Label(true); labels[label] = new Label(true); labels[label] = new Label(true); labels[frameOffset] = new Label(); labels[offset] = new Label();