Interface Label
public sealed interface Label
A marker for a position within the instructions of a method body. The
position is a cursor position in the list of instructions, similar to that
of a
ListIterator
.
Reading Labels
Labels read fromclass
files represent positions in the code
array of a Code
attribute. It is associated with a
bci (bytecode index), also known as pc
(program counter), the index into the code
array; the actual cursor
position is immediately before the given index, so a label at the beginning
of the instructions has bci 0
, and a label at the end of the
instructions has bci codeLength() + 1
. The
bci can be inspected through CodeAttribute::labelToBci
.
In generic CodeModel
s, a label may not have a bci value; the position
of a label can be found by searching for the corresponding LabelTarget
within that model.
Writing Labels
Many models injava.lang.classfile
refer to labels. To write a
label, a label must be obtained, it must be bound to a CodeBuilder
.
To obtain a label:
- Use a label read from other models.
- Use pre-defined labels from a
CodeBuilder
, such asCodeBuilder::startLabel
,CodeBuilder::endLabel
, orBlockCodeBuilder::breakLabel
. They are already bound. - Create labels with
CodeBuilder::newLabel
orCodeBuilder::newBoundLabel
.
A label must be bound exactly once in the CodeBuilder
where it is
used; otherwise, writing fails. To bind an unbound label:
- Send a read
LabelTarget
to aCodeBuilder
. - Use
CodeBuilder::labelBinding
.
CodeBuilder
; they are separate entities and the label is bound to
different positions in them.- Since:
- 24
- See Also: