# Interface CodeBuilder

All Superinterfaces:
  `ClassFileBuilder<CodeElement, CodeBuilder>, Consumer<CodeElement>`

All Known Subinterfaces:
  `CodeBuilder.BlockCodeBuilder`

public sealed interface CodeBuilder extends ClassFileBuilder<CodeElement, CodeBuilder> permits CodeBuilder.BlockCodeBuilder (not exhaustive)
A builder for `Code` attributes (method bodies). `MethodBuilder.withCode(Consumer)` is the basic way to obtain a code builder; `ClassBuilder.withMethodBody(Utf8Entry, Utf8Entry, int, Consumer)` is a shortcut. There are also derived code builders from `block(Consumer)`, which handles code blocks and `transforming(CodeTransform, Consumer)`, which runs transforms on existing handlers, both of which requires a code builder to be available first.

Refer to `ClassFileBuilder` for general guidance and caution around the use of builders for structures in the `class` file format. Unlike in other builders, the order of member elements in a code builder is significant: they affect the resulting bytecode. Many Class-File API options affect code builders: `ClassFile.DeadCodeOption` and `ClassFile.ShortJumpsOption` affect the resulting bytecode, and `ClassFile.DeadLabelsOption`, `ClassFile.DebugElementsOption`, `ClassFile.LineNumbersOption`, `ClassFile.StackMapsOption`, and `ClassFile.AttributesProcessingOption` affect the resulting attributes on the built `Code` attribute, that some elements sent to a code builder is otherwise ignored.

## Instruction Factories

`CodeBuilder` provides convenience methods to create instructions (See JVMS 6.5 Instructions) by their mnemonic, taking necessary operands.

- Instructions that encode their operands in their opcode, such as `aload_<n>`, share their factories with their generic version like `aload`. Note that some constant instructions, such as `iconst_1`, do not have generic versions, and thus have their own factories.
- Instructions that accept wide operands, such as `ldc2_w` or `wide`, share their factories with their regular version like `ldc(ConstantDesc)`. Note that `goto_w` has its own factory to avoid short jumps.
- The `goto`, `instanceof`, `new`, and `return` instructions' factories are named `goto_`, `instanceOf`, `new_`, and `return_` respectively, due to clashes with keywords in the Java programming language.
- Factories are not provided for instructions `jsr`, `jsr_w`, `ret`, and `wide ret`, which cannot appear in class files with major version 51 or higher. (JVMS 4.9.1) They can still be provided via `ClassFileBuilder.with(E)`.

Since:
  24
See Also:
  - `MethodBuilder.withCode(Consumer)`
  - `CodeModel`
  - `CodeTransform`

## Nested Class Summary

Nested Classes
Modifier and Type
Interface
Description
`static interface`
`CodeBuilder.BlockCodeBuilder`
A builder for blocks of code.
`static interface`
`CodeBuilder.CatchBuilder`
A builder to add catch blocks.

## Method Summary

Modifier and Type
Method
Description
`default CodeBuilder`
`aaload()`
Generates an instruction to load from a `reference` array.
`default CodeBuilder`
`aastore()`
Generates an instruction to store into a `reference` array.
`default CodeBuilder`
`aconst_null()`
Generates an instruction pushing the null object `reference` onto the operand stack.
`int`
`allocateLocal(TypeKind typeKind)`
Returns the local variable slot of a fresh local variable.
`default CodeBuilder`
`aload(int slot)`
Generates an instruction to load a `reference` from a local variable.
`default CodeBuilder`
`anewarray(ClassEntry classEntry)`
Generates an instruction to create a new array of `reference`.
`default CodeBuilder`
`anewarray(ClassDesc className)`
Generates an instruction to create a new array of `reference`.
`default CodeBuilder`
`areturn()`
Generates an instruction to return a `reference` from this method.
`default CodeBuilder`
`arraylength()`
Generates an instruction to get the length of an array.
`default CodeBuilder`
`arrayLoad(TypeKind tk)`
Generates an instruction to load from an array.
`default CodeBuilder`
`arrayStore(TypeKind tk)`
Generates an instruction to store into an array.
`default CodeBuilder`
`astore(int slot)`
Generates an instruction to store a `reference` into a local variable.
`default CodeBuilder`
`athrow()`
Generates an instruction to throw an exception or error.
`default CodeBuilder`
`baload()`
Generates an instruction to load from a `byte` or `boolean` array.
`default CodeBuilder`
`bastore()`
Generates an instruction to store into a `byte` or `boolean` array.
`default CodeBuilder`
`bipush(int b)`
Generates an instruction pushing an `int` in the range of `byte` (`[-128, 127]`) onto the operand stack.
`default CodeBuilder`
`block(Consumer<CodeBuilder.BlockCodeBuilder> handler)`
Adds a lexical block to the method being built.
`default CodeBuilder`
`branch(Opcode op, Label target)`
Generates a branch instruction.
`default CodeBuilder`
`caload()`
Generates an instruction to load from a `char` array.
`default CodeBuilder`
`castore()`
Generates an instruction to store into a `char` array.
`default CodeBuilder`
`characterRange(Label startScope, Label endScope, int characterRangeStart, int characterRangeEnd, int flags)`
Declares a character range entry.
`default CodeBuilder`
`checkcast(ClassEntry type)`
Generates an instruction to check whether an object is of the given type, throwing a `ClassCastException` if the check fails.
`default CodeBuilder`
`checkcast(ClassDesc type)`
Generates an instruction to check whether an object is of the given type, throwing a `ClassCastException` if the check fails.
`default CodeBuilder`
`conversion(TypeKind fromType, TypeKind toType)`
Generates instruction(s) to convert `fromType` to `toType`.
`default CodeBuilder`
`d2f()`
Generates an instruction to convert a `double` into a `float`.
`default CodeBuilder`
`d2i()`
Generates an instruction to convert a `double` into an `int`.
`default CodeBuilder`
`d2l()`
Generates an instruction to convert a `double` into a `long`.
`default CodeBuilder`
`dadd()`
Generates an instruction to add two `doubles`.
`default CodeBuilder`
`daload()`
Generates an instruction to load from a `double` array.
`default CodeBuilder`
`dastore()`
Generates an instruction to store into a `double` array.
`default CodeBuilder`
`dcmpg()`
Generates an instruction to compare two `doubles`, producing `1` if any operand is `NaN`.
`default CodeBuilder`
`dcmpl()`
Generates an instruction to compare two `doubles`, producing `-1` if any operand is `NaN`.
`default CodeBuilder`
`dconst_0()`
Generates an instruction pushing `double` constant 0 onto the operand stack.
`default CodeBuilder`
`dconst_1()`
Generates an instruction pushing `double` constant 1 onto the operand stack.
`default CodeBuilder`
`ddiv()`
Generates an instruction to divide `doubles`.
`default CodeBuilder`
`dload(int slot)`
Generates an instruction to load a `double` from a local variable.
`default CodeBuilder`
`dmul()`
Generates an instruction to multiply `doubles`.
`default CodeBuilder`
`dneg()`
Generates an instruction to negate a `double`.
`default CodeBuilder`
`drem()`
Generates an instruction to calculate `double` remainder.
`default CodeBuilder`
`dreturn()`
Generates an instruction to return a `double` from this method.
`default CodeBuilder`
`dstore(int slot)`
Generates an instruction to store a `double` into a local variable.
`default CodeBuilder`
`dsub()`
Generates an instruction to subtract `doubles`.
`default CodeBuilder`
`dup()`
Generates an instruction to duplicate the top operand stack value.
`default CodeBuilder`
`dup_x1()`
Generates an instruction to duplicate the top operand stack value and insert two values down.
`default CodeBuilder`
`dup_x2()`
Generates an instruction to duplicate the top operand stack value and insert two or three values down.
`default CodeBuilder`
`dup2()`
Generates an instruction to duplicate the top one or two operand stack value.
`default CodeBuilder`
`dup2_x1()`
Generates an instruction to duplicate the top one or two operand stack values and insert two or three values down.
`default CodeBuilder`
`dup2_x2()`
Generates an instruction to duplicate the top one or two operand stack values and insert two, three, or four values down.
`Label`
`endLabel()`
Returns the label associated with the end of the current block.
`default CodeBuilder`
`exceptionCatch(Label start, Label end, Label handler, ClassEntry catchType)`
Declares an exception table entry.
`default CodeBuilder`
`exceptionCatch(Label start, Label end, Label handler, ClassDesc catchType)`
Declares an exception table entry.
`default CodeBuilder`
`exceptionCatch(Label start, Label end, Label handler, Optional<ClassEntry> catchType)`
Declares an exception table entry.
`default CodeBuilder`
`exceptionCatchAll(Label start, Label end, Label handler)`
Declares an exception table entry catching all exceptions and errors.
`default CodeBuilder`
`f2d()`
Generates an instruction to convert a `float` into a `double`.
`default CodeBuilder`
`f2i()`
Generates an instruction to convert a `float` into an `int`.
`default CodeBuilder`
`f2l()`
Generates an instruction to convert a `float` into a `long`.
`default CodeBuilder`
`fadd()`
Generates an instruction to add two `floats`.
`default CodeBuilder`
`faload()`
Generates an instruction to load from a `float` array.
`default CodeBuilder`
`fastore()`
Generates an instruction to store into a `float` array.
`default CodeBuilder`
`fcmpg()`
Generates an instruction to compare `floats`, producing `1` if any operand is `NaN`.
`default CodeBuilder`
`fcmpl()`
Generates an instruction to compare `floats`, producing `-1` if any operand is `NaN`.
`default CodeBuilder`
`fconst_0()`
Generates an instruction pushing `float` constant 0 onto the operand stack.
`default CodeBuilder`
`fconst_1()`
Generates an instruction pushing `float` constant 1 onto the operand stack.
`default CodeBuilder`
`fconst_2()`
Generates an instruction pushing `float` constant 2 onto the operand stack.
`default CodeBuilder`
`fdiv()`
Generates an instruction to divide `floats`.
`default CodeBuilder`
`fieldAccess(Opcode opcode, FieldRefEntry ref)`
Generates an instruction to access a field.
`default CodeBuilder`
`fieldAccess(Opcode opcode, ClassDesc owner, String name, ClassDesc type)`
Generates an instruction to access a field.
`default CodeBuilder`
`fload(int slot)`
Generates an instruction to load a `float` from a local variable.
`default CodeBuilder`
`fmul()`
Generates an instruction to multiply `floats`.
`default CodeBuilder`
`fneg()`
Generates an instruction to negate a `float`.
`default CodeBuilder`
`frem()`
Generates an instruction to calculate `floats` remainder.
`default CodeBuilder`
`freturn()`
Generates an instruction to return a `float` from this method.
`default CodeBuilder`
`fstore(int slot)`
Generates an instruction to store a `float` into a local variable.
`default CodeBuilder`
`fsub()`
Generates an instruction to subtract `floats`.
`default CodeBuilder`
`getfield(FieldRefEntry ref)`
Generates an instruction to fetch field from an object.
`default CodeBuilder`
`getfield(ClassDesc owner, String name, ClassDesc type)`
Generates an instruction to fetch field from an object.
`default CodeBuilder`
`getstatic(FieldRefEntry ref)`
Generates an instruction to get static field from a class or interface.
`default CodeBuilder`
`getstatic(ClassDesc owner, String name, ClassDesc type)`
Generates an instruction to get static field from a class or interface.
`default CodeBuilder`
`goto_(Label target)`
Generates an instruction to branch always.
`default CodeBuilder`
`goto_w(Label target)`
Generates an instruction to branch always with wide index.
`default CodeBuilder`
`i2b()`
Generates an instruction to truncate an `int` into the range of `byte` and sign-extend it.
`default CodeBuilder`
`i2c()`
Generates an instruction to truncate an `int` into the range of `char` and zero-extend it.
`default CodeBuilder`
`i2d()`
Generates an instruction to convert an `int` into a `double`.
`default CodeBuilder`
`i2f()`
Generates an instruction to convert an `int` into a `float`.
`default CodeBuilder`
`i2l()`
Generates an instruction to convert an `int` into a `long`.
`default CodeBuilder`
`i2s()`
Generates an instruction to truncate an `int` into the range of `short` and sign-extend it.
`default CodeBuilder`
`iadd()`
Generates an instruction to add two `ints`.
`default CodeBuilder`
`iaload()`
Generates an instruction to load from an `int` array.
`default CodeBuilder`
`iand()`
Generates an instruction to calculate bitwise AND of `ints`, also used for `boolean` AND.
`default CodeBuilder`
`iastore()`
Generates an instruction to store into an `int` array.
`default CodeBuilder`
`iconst_0()`
Generates an instruction pushing `int` constant 0 onto the operand stack.
`default CodeBuilder`
`iconst_1()`
Generates an instruction pushing `int` constant 1 onto the operand stack.
`default CodeBuilder`
`iconst_2()`
Generates an instruction pushing `int` constant 2 onto the operand stack.
`default CodeBuilder`
`iconst_3()`
Generates an instruction pushing `int` constant 3 onto the operand stack.
`default CodeBuilder`
`iconst_4()`
Generates an instruction pushing `int` constant 4 onto the operand stack.
`default CodeBuilder`
`iconst_5()`
Generates an instruction pushing `int` constant 5 onto the operand stack.
`default CodeBuilder`
`iconst_m1()`
Generates an instruction pushing `int` constant -1 onto the operand stack.
`default CodeBuilder`
`idiv()`
Generates an instruction to divide `ints`.
`default CodeBuilder`
`if_acmpeq(Label target)`
Generates an instruction to branch if `reference` comparison `operand1 == operand2` succeeds.
`default CodeBuilder`
`if_acmpne(Label target)`
Generates an instruction to branch if `reference` comparison `operand1 != operand2` succeeds.
`default CodeBuilder`
`if_icmpeq(Label target)`
Generates an instruction to branch if `int` comparison `operand1 == operand2` succeeds.
`default CodeBuilder`
`if_icmpge(Label target)`
Generates an instruction to branch if `int` comparison `operand1 >= operand2` succeeds.
`default CodeBuilder`
`if_icmpgt(Label target)`
Generates an instruction to branch if `int` comparison `operand1 > operand2` succeeds.
`default CodeBuilder`
`if_icmple(Label target)`
Generates an instruction to branch if `int` comparison `operand1 <= operand2` succeeds.
`default CodeBuilder`
`if_icmplt(Label target)`
Generates an instruction to branch if `int` comparison `operand1 < operand2` succeeds.
`default CodeBuilder`
`if_icmpne(Label target)`
Generates an instruction to branch if `int` comparison `operand1 != operand2` succeeds.
`default CodeBuilder`
`ifeq(Label target)`
Generates an instruction to branch if `int` comparison with zero `== 0` succeeds.
`default CodeBuilder`
`ifge(Label target)`
Generates an instruction to branch if `int` comparison with zero `>= 0` succeeds.
`default CodeBuilder`
`ifgt(Label target)`
Generates an instruction to branch if `int` comparison with zero `> 0` succeeds.
`default CodeBuilder`
`ifle(Label target)`
Generates an instruction to branch if `int` comparison with zero `<= 0` succeeds.
`default CodeBuilder`
`iflt(Label target)`
Generates an instruction to branch if `int` comparison with zero `< 0` succeeds.
`default CodeBuilder`
`ifne(Label target)`
Generates an instruction to branch if `int` comparison with zero `!= 0` succeeds.
`default CodeBuilder`
`ifnonnull(Label target)`
Generates an instruction to branch if `reference` is not `null`.
`default CodeBuilder`
`ifnull(Label target)`
Generates an instruction to branch if `reference` is `null`.
`default CodeBuilder`
`ifThen(Opcode opcode, Consumer<CodeBuilder.BlockCodeBuilder> thenHandler)`
Adds an "if-then" block that is conditional on the value(s) on top of the operand stack in accordance with the given opcode.
`default CodeBuilder`
`ifThen(Consumer<CodeBuilder.BlockCodeBuilder> thenHandler)`
Adds an "if-then" block that is conditional on the `boolean` value on top of the operand stack.
`default CodeBuilder`
`ifThenElse(Opcode opcode, Consumer<CodeBuilder.BlockCodeBuilder> thenHandler, Consumer<CodeBuilder.BlockCodeBuilder> elseHandler)`
Adds an "if-then-else" block that is conditional on the value(s) on top of the operand stack in accordance with the given opcode.
`default CodeBuilder`
`ifThenElse(Consumer<CodeBuilder.BlockCodeBuilder> thenHandler, Consumer<CodeBuilder.BlockCodeBuilder> elseHandler)`
Adds an "if-then-else" block that is conditional on the `boolean` value on top of the operand stack.
`default CodeBuilder`
`iinc(int slot, int val)`
Generates an instruction to increment an `int` local variable by a constant.
`default CodeBuilder`
`iload(int slot)`
Generates an instruction to load an `int` from a local variable.
`default CodeBuilder`
`imul()`
Generates an instruction to multiply `ints`.
`default CodeBuilder`
`ineg()`
Generates an instruction to negate an `int`.
`default CodeBuilder`
`instanceOf(ClassEntry target)`
Generates an instruction to determine if an object is of the given type, producing a `boolean` result on the operand stack.
`default CodeBuilder`
`instanceOf(ClassDesc target)`
Generates an instruction to determine if an object is of the given type, producing a `boolean` result on the operand stack.
`default CodeBuilder`
`invoke(Opcode opcode, MemberRefEntry ref)`
Generates an instruction to invoke a method.
`default CodeBuilder`
`invoke(Opcode opcode, ClassDesc owner, String name, MethodTypeDesc desc, boolean isInterface)`
Generates an instruction to invoke a method.
`default CodeBuilder`
`invokedynamic(InvokeDynamicEntry ref)`
Generates an instruction to invoke a dynamically-computed call site.
`default CodeBuilder`
`invokedynamic(DynamicCallSiteDesc ref)`
Generates an instruction to invoke a dynamically-computed call site.
`default CodeBuilder`
`invokeinterface(InterfaceMethodRefEntry ref)`
Generates an instruction to invoke an interface method.
`default CodeBuilder`
`invokeinterface(ClassDesc owner, String name, MethodTypeDesc type)`
Generates an instruction to invoke an interface method.
`default CodeBuilder`
`invokespecial(InterfaceMethodRefEntry ref)`
Generates an instruction to invoke an instance method in an interface; direct invocation of methods of the current class and its supertypes.
`default CodeBuilder`
`invokespecial(MethodRefEntry ref)`
Generates an instruction to invoke an instance method in a class; direct invocation of instance initialization methods and methods of the current class and its supertypes.
`default CodeBuilder`
`invokespecial(ClassDesc owner, String name, MethodTypeDesc type)`
Generates an instruction to invoke an instance method in a class; direct invocation of instance initialization methods and methods of the current class and its supertypes.
`default CodeBuilder`
`invokespecial(ClassDesc owner, String name, MethodTypeDesc type, boolean isInterface)`
Generates an instruction to invoke an instance method; direct invocation of instance initialization methods and methods of the current class and its supertypes.
`default CodeBuilder`
`invokestatic(InterfaceMethodRefEntry ref)`
Generates an instruction to invoke a class (static) method of an interface.
`default CodeBuilder`
`invokestatic(MethodRefEntry ref)`
Generates an instruction to invoke a class (static) method of a class.
`default CodeBuilder`
`invokestatic(ClassDesc owner, String name, MethodTypeDesc type)`
Generates an instruction to invoke a class (static) method of a class.
`default CodeBuilder`
`invokestatic(ClassDesc owner, String name, MethodTypeDesc type, boolean isInterface)`
Generates an instruction to invoke a class (static) method.
`default CodeBuilder`
`invokevirtual(MethodRefEntry ref)`
Generates an instruction to invoke an instance method; dispatch based on class.
`default CodeBuilder`
`invokevirtual(ClassDesc owner, String name, MethodTypeDesc type)`
Generates an instruction to invoke an instance method; dispatch based on class.
`default CodeBuilder`
`ior()`
Generates an instruction to calculate bitwise OR of `ints`, also used for `boolean` OR.
`default CodeBuilder`
`irem()`
Generates an instruction to calculate `ints` remainder.
`default CodeBuilder`
`ireturn()`
Generates an instruction to return an `int` from this method.
`default CodeBuilder`
`ishl()`
Generates an instruction to shift an `int` left.
`default CodeBuilder`
`ishr()`
Generates an instruction to shift an `int` right.
`default CodeBuilder`
`istore(int slot)`
Generates an instruction to store an `int` into a local variable.
`default CodeBuilder`
`isub()`
Generates an instruction to subtract `ints`.
`default CodeBuilder`
`iushr()`
Generates an instruction to logical shift an `int` right.
`default CodeBuilder`
`ixor()`
Generates an instruction to calculate bitwise XOR of `ints`.
`default CodeBuilder`
`l2d()`
Generates an instruction to convert a `long` into a `double`.
`default CodeBuilder`
`l2f()`
Generates an instruction to convert a `long` into a `float`.
`default CodeBuilder`
`l2i()`
Generates an instruction to convert a `long` into an `int`.
`default CodeBuilder`
`labelBinding(Label label)`
Binds a label to the current position.
`default CodeBuilder`
`ladd()`
Generates an instruction to add two `longs`.
`default CodeBuilder`
`laload()`
Generates an instruction to load from a `long` array.
`default CodeBuilder`
`land()`
Generates an instruction to calculate bitwise AND of `longs`.
`default CodeBuilder`
`lastore()`
Generates an instruction to store into a `long` array.
`default CodeBuilder`
`lcmp()`
Generates an instruction to compare `longs`.
`default CodeBuilder`
`lconst_0()`
Generates an instruction pushing `long` constant 0 onto the operand stack.
`default CodeBuilder`
`lconst_1()`
Generates an instruction pushing `long` constant 1 onto the operand stack.
`default CodeBuilder`
`ldc(LoadableConstantEntry entry)`
Generates an instruction pushing an item from the run-time constant pool onto the operand stack.
`default CodeBuilder`
`ldc(ConstantDesc value)`
Generates an instruction pushing an item from the run-time constant pool onto the operand stack.
`default CodeBuilder`
`ldiv()`
Generates an instruction to divide `longs`.
`default CodeBuilder`
`lineNumber(int line)`
Declares a source line number beginning at the current position.
`default CodeBuilder`
`lload(int slot)`
Generates an instruction to load a `long` from a local variable.
`default CodeBuilder`
`lmul()`
Generates an instruction to multiply `longs`.
`default CodeBuilder`
`lneg()`
Generates an instruction to negate a `long`.
`default CodeBuilder`
`loadConstant(double value)`
Generates an instruction pushing a constant `double` value onto the operand stack.
`default CodeBuilder`
`loadConstant(float value)`
Generates an instruction pushing a constant `float` value onto the operand stack.
`default CodeBuilder`
`loadConstant(int value)`
Generates an instruction pushing a constant `int` value onto the operand stack.
`default CodeBuilder`
`loadConstant(long value)`
Generates an instruction pushing a constant `long` value onto the operand stack.
`default CodeBuilder`
`loadConstant(ConstantDesc value)`
Generates an instruction pushing a constant onto the operand stack.
`default CodeBuilder`
`loadLocal(TypeKind tk, int slot)`
Generates an instruction to load a value from a local variable.
`default CodeBuilder`
`localVariable(int slot, Utf8Entry nameEntry, Utf8Entry descriptorEntry, Label startScope, Label endScope)`
Declares a local variable entry.
`default CodeBuilder`
`localVariable(int slot, String name, ClassDesc descriptor, Label startScope, Label endScope)`
Declares a local variable entry.
`default CodeBuilder`
`localVariableType(int slot, Utf8Entry nameEntry, Utf8Entry signatureEntry, Label startScope, Label endScope)`
Declares a local variable type entry.
`default CodeBuilder`
`localVariableType(int slot, String name, Signature signature, Label startScope, Label endScope)`
Declares a local variable type entry.
`default CodeBuilder`
`lookupswitch(Label defaultTarget, List<SwitchCase> cases)`
Generates an instruction to access a jump table by key match and jump.
`default CodeBuilder`
`lor()`
Generates an instruction to calculate bitwise OR of `longs`.
`default CodeBuilder`
`lrem()`
Generates an instruction to calculate `longs` remainder.
`default CodeBuilder`
`lreturn()`
Generates an instruction to return a `long` from this method.
`default CodeBuilder`
`lshl()`
Generates an instruction to shift a `long` left.
`default CodeBuilder`
`lshr()`
Generates an instruction to shift a `long` right.
`default CodeBuilder`
`lstore(int slot)`
Generates an instruction to store a `long` into a local variable.
`default CodeBuilder`
`lsub()`
Generates an instruction to subtract `longs`.
`default CodeBuilder`
`lushr()`
Generates an instruction to logical shift a `long` right.
`default CodeBuilder`
`lxor()`
Generates an instruction to calculate bitwise XOR of `longs`.
`default CodeBuilder`
`monitorenter()`
Generates an instruction to enter monitor for an object.
`default CodeBuilder`
`monitorexit()`
Generates an instruction to exit monitor for an object.
`default CodeBuilder`
`multianewarray(ClassEntry array, int dims)`
Generates an instruction to create a new multidimensional array.
`default CodeBuilder`
`multianewarray(ClassDesc array, int dims)`
Generates an instruction to create a new multidimensional array.
`default CodeBuilder`
`new_(ClassEntry clazz)`
Generates an instruction to create a new object.
`default CodeBuilder`
`new_(ClassDesc clazz)`
Generates an instruction to create a new object.
`default CodeBuilder`
`newarray(TypeKind typeKind)`
Generates an instruction to create a new array of a primitive type.
`default Label`
`newBoundLabel()`
Creates a new label bound at the current position.
`Label`
`newLabel()`
Returns a fresh unbound label.
`default CodeBuilder`
`nop()`
Generates a do-nothing instruction.
`int`
`parameterSlot(int paramNo)`
Returns the local variable slot associated with the specified parameter.
`default CodeBuilder`
`pop()`
Generates an instruction to pop the top operand stack value.
`default CodeBuilder`
`pop2()`
Generates an instruction to pop the top one or two operand stack values.
`default CodeBuilder`
`putfield(FieldRefEntry ref)`
Generates an instruction to set field in an object.
`default CodeBuilder`
`putfield(ClassDesc owner, String name, ClassDesc type)`
Generates an instruction to set field in an object.
`default CodeBuilder`
`putstatic(FieldRefEntry ref)`
Generates an instruction to set static field in a class.
`default CodeBuilder`
`putstatic(ClassDesc owner, String name, ClassDesc type)`
Generates an instruction to set static field in a class.
`int`
`receiverSlot()`
Returns the local variable slot associated with the receiver.
`default CodeBuilder`
`return_()`
Generates an instruction to return `void` from this method.
`default CodeBuilder`
`return_(TypeKind tk)`
Generates a return instruction.
`default CodeBuilder`
`saload()`
Generates an instruction to load from a `short` array.
`default CodeBuilder`
`sastore()`
Generates an instruction to store into a `short` array.
`default CodeBuilder`
`sipush(int s)`
Generates an instruction pushing an `int` in the range of `short`, `[-32768, 32767]`, onto the operand stack.
`Label`
`startLabel()`
Returns the label associated with the beginning of the current block.
`default CodeBuilder`
`storeLocal(TypeKind tk, int slot)`
Generates an instruction to store a value to a local variable.
`default CodeBuilder`
`swap()`
Generates an instruction to swap the top two operand stack values.
`default CodeBuilder`
`tableswitch(int low, int high, Label defaultTarget, List<SwitchCase> cases)`
Generates an instruction to access a jump table by index and jump.
`default CodeBuilder`
`tableswitch(Label defaultTarget, List<SwitchCase> cases)`
Generates an instruction to access a jump table by index and jump.
`default CodeBuilder`
`transforming(CodeTransform transform, Consumer<CodeBuilder> handler)`
Apply a transform to the code built by a handler, directing results to this builder.
`default CodeBuilder`
`trying(Consumer<CodeBuilder.BlockCodeBuilder> tryHandler, Consumer<CodeBuilder.CatchBuilder> catchesHandler)`
Adds a "try-catch" block comprising one try block and zero or more catch blocks.

### Methods declared in interface ClassFileBuilder

`accept, constantPool, transform, with`
Modifier and Type
Method
Description
`default void`
`accept(CodeElement e)`
Integrates the member element into the structure being built.
`ConstantPoolBuilder`
`constantPool()`
Returns the constant pool builder associated with this builder.
`default CodeBuilder`
`transform(CompoundElement<CodeElement> model, ClassFileTransform<?, CodeElement, CodeBuilder> transform)`
Applies a transform to a compound structure, directing results to this builder.
`CodeBuilder`
`with(CodeElement e)`
Integrates the member element into the structure being built.

### Methods declared in interface Consumer

`andThen`
Modifier and Type
Method
Description
`default Consumer<CodeElement>`
`andThen(Consumer<? super CodeElement> after)`
Returns a composed `Consumer` that performs, in sequence, this operation followed by the `after` operation.

## Method Details

### newLabel

Label newLabel()
Returns a fresh unbound label. The label can be bound with `labelBinding(Label)`.

Returns:
  a fresh unbound label

### startLabel

Label startLabel()
Returns the label associated with the beginning of the current block. If this builder is not a "block" builder, such as those provided by `block(Consumer)` or `ifThenElse(Consumer, Consumer)`, the current block will be the entire method body.

Returns:
  the label associated with the beginning of the current block

### endLabel

Label endLabel()
Returns the label associated with the end of the current block. If this builder is not a "block" builder, such as those provided by `block(Consumer)` or `ifThenElse(Consumer, Consumer)`, the current block will be the entire method body.

Returns:
  the label associated with the end of the current block

### receiverSlot

int receiverSlot()
Returns the local variable slot associated with the receiver.

Returns:
  the local variable slot associated with the receiver
Throws:
  `IllegalStateException` - if this is a static method

### parameterSlot

int parameterSlot(int paramNo)
Returns the local variable slot associated with the specified parameter. The returned value is adjusted for the receiver slot (if the method is an instance method) and for the requirement that `long` and `double` values require two slots.

Parameters:
  `paramNo` - the index of the parameter
Returns:
  the local variable slot associated with the specified parameter
Throws:
  `IndexOutOfBoundsException` - if the parameter index is out of bounds

### allocateLocal

int allocateLocal(TypeKind typeKind)
Returns the local variable slot of a fresh local variable. This method makes reasonable efforts to determine which slots are in use and which are not. When transforming a method, fresh locals begin at the `maxLocals` of the original method. For a method being built directly, fresh locals begin after the last parameter slot.

If the current code builder is a `CodeBuilder.BlockCodeBuilder`, at the end of the block, locals are reset to their value at the beginning of the block.

Parameters:
  `typeKind` - the type of the local variable
Returns:
  the local variable slot of a fresh local variable

### transforming

default CodeBuilder transforming(CodeTransform transform, Consumer<CodeBuilder> handler)
Apply a transform to the code built by a handler, directing results to this builder.

API Note:
  This is similar to `ClassFileBuilder.transform(CompoundElement, ClassFileTransform)`, but this does not require the code elements to be viewed as a `CodeModel` first.
Parameters:
  `transform` - the transform to apply to the code built by the handler
  `handler` - the handler that receives a `CodeBuilder` to build the code
Returns:
  this builder

### block

default CodeBuilder block(Consumer<CodeBuilder.BlockCodeBuilder> handler)
Adds a lexical block to the method being built.

Within this block, the `startLabel()` and `endLabel()` correspond to the start and end of the block, and the `CodeBuilder.BlockCodeBuilder.breakLabel()` also corresponds to the end of the block, or the cursor position immediately after this call in this builder.

Parameters:
  `handler` - handler that receives a `CodeBuilder.BlockCodeBuilder` to generate the body of the lexical block
Returns:
  this builder

### ifThen

default CodeBuilder ifThen(Consumer<CodeBuilder.BlockCodeBuilder> thenHandler)
Adds an "if-then" block that is conditional on the `boolean` value on top of the operand stack. Control flow enters the "then" block if the value represents `true`.

The `CodeBuilder.BlockCodeBuilder.breakLabel()` for the "then" block corresponds to the cursor position immediately after this call in this builder.

Parameters:
  `thenHandler` - handler that receives a CodeBuilder.BlockCodeBuilder to generate the body of the `if`
Returns:
  this builder
See Also:
  - `ifThen(Opcode, Consumer)`

### ifThen

default CodeBuilder ifThen(Opcode opcode, Consumer<CodeBuilder.BlockCodeBuilder> thenHandler)
Adds an "if-then" block that is conditional on the value(s) on top of the operand stack in accordance with the given opcode. Control flow enters the "then" block if the branching condition for `opcode` succeeds.

The `CodeBuilder.BlockCodeBuilder.breakLabel()` for the "then" block corresponds to the cursor position immediately after this call in this builder.

Parameters:
  `opcode` - the operation code for a branch instruction that accepts one or two operands on the stack
  `thenHandler` - handler that receives a `CodeBuilder.BlockCodeBuilder` to generate the body of the `if`
Returns:
  this builder
Throws:
  `IllegalArgumentException` - if the operation code is not for a branch instruction that accepts one or two operands

### ifThenElse

default CodeBuilder ifThenElse(Consumer<CodeBuilder.BlockCodeBuilder> thenHandler, Consumer<CodeBuilder.BlockCodeBuilder> elseHandler)
Adds an "if-then-else" block that is conditional on the `boolean` value on top of the operand stack. Control flow enters the "then" block if the value represents `true`, and enters the "else" block otherwise.

The `CodeBuilder.BlockCodeBuilder.breakLabel()` for each block corresponds to the cursor position immediately after this call in this builder.

Parameters:
  `thenHandler` - handler that receives a `CodeBuilder.BlockCodeBuilder` to generate the body of the `if`
  `elseHandler` - handler that receives a `CodeBuilder.BlockCodeBuilder` to generate the body of the `else`
Returns:
  this builder
See Also:
  - `ifThenElse(Opcode, Consumer, Consumer)`

### ifThenElse

default CodeBuilder ifThenElse(Opcode opcode, Consumer<CodeBuilder.BlockCodeBuilder> thenHandler, Consumer<CodeBuilder.BlockCodeBuilder> elseHandler)
Adds an "if-then-else" block that is conditional on the value(s) on top of the operand stack in accordance with the given opcode. Control flow enters the "then" block if the branching condition for `opcode` succeeds, and enters the "else" block otherwise.

The `CodeBuilder.BlockCodeBuilder.breakLabel()` for each block corresponds to the cursor position immediately after this call in this builder.

Parameters:
  `opcode` - the operation code for a branch instruction that accepts one or two operands on the stack
  `thenHandler` - handler that receives a CodeBuilder.BlockCodeBuilder to generate the body of the `if`
  `elseHandler` - handler that receives a CodeBuilder.BlockCodeBuilder to generate the body of the `else`
Returns:
  this builder
Throws:
  `IllegalArgumentException` - if the operation code is not for a branch instruction that accepts one or two operands

### trying

default CodeBuilder trying(Consumer<CodeBuilder.BlockCodeBuilder> tryHandler, Consumer<CodeBuilder.CatchBuilder> catchesHandler)
Adds a "try-catch" block comprising one try block and zero or more catch blocks. Exceptions thrown by instructions in the try block may be caught by catch blocks.

The `CodeBuilder.BlockCodeBuilder.breakLabel()` for the try block and all catch blocks in the `catchesHandler` correspond to the cursor position immediately after this call in this builder.

Parameters:
  `tryHandler` - handler that receives a `CodeBuilder.BlockCodeBuilder` to generate the body of the try block.
  `catchesHandler` - a handler that receives a `CodeBuilder.CatchBuilder` to generate bodies of catch blocks
Returns:
  this builder
Throws:
  `IllegalArgumentException` - if the try block is empty
See Also:
  - `CodeBuilder.CatchBuilder`
  - `ExceptionCatch`
  - `exceptionCatch(Label, Label, Label, ClassEntry)`

### loadLocal

default CodeBuilder loadLocal(TypeKind tk, int slot)
Generates an instruction to load a value from a local variable.

Parameters:
  `tk` - the load type
  `slot` - the local variable slot
Returns:
  this builder
Throws:
  `IllegalArgumentException` - if `tk` is `void` or `slot` is not `u2`
See Also:
  - `LoadInstruction`

### storeLocal

default CodeBuilder storeLocal(TypeKind tk, int slot)
Generates an instruction to store a value to a local variable.

Parameters:
  `tk` - the store type
  `slot` - the local variable slot
Returns:
  this builder
Throws:
  `IllegalArgumentException` - if `tk` is `void` or `slot` is not `u2`
See Also:
  - `StoreInstruction`

### branch

default CodeBuilder branch(Opcode op, Label target)
Generates a branch instruction.

This may generate multiple instructions to accomplish the same effect if `ClassFile.ShortJumpsOption.FIX_SHORT_JUMPS` is set, the opcode has size 3, and `target` cannot be encoded as a BCI offset in `[-32768, 32767]`.

Parameters:
  `op` - the branch opcode
  `target` - the branch target
Returns:
  this builder
Throws:
  `IllegalArgumentException` - if `op` is not of `Opcode.Kind.BRANCH`
See Also:
  - `BranchInstruction`

### return_

default CodeBuilder return_(TypeKind tk)
Generates a return instruction.

Parameters:
  `tk` - the return type
Returns:
  this builder
See Also:
  - `ReturnInstruction`

### fieldAccess

default CodeBuilder fieldAccess(Opcode opcode, FieldRefEntry ref)
Generates an instruction to access a field.

Parameters:
  `opcode` - the field access opcode
  `ref` - the field reference
Returns:
  this builder
Throws:
  `IllegalArgumentException` - if `opcode` is not of `Opcode.Kind.FIELD_ACCESS`
See Also:
  - `FieldInstruction`

### fieldAccess

default CodeBuilder fieldAccess(Opcode opcode, ClassDesc owner, String name, ClassDesc type)
Generates an instruction to access a field.

Parameters:
  `opcode` - the field access opcode
  `owner` - the class
  `name` - the field name
  `type` - the field type
Returns:
  this builder
Throws:
  `IllegalArgumentException` - if `opcode` is not of `Opcode.Kind.FIELD_ACCESS`, or `owner` is primitive
See Also:
  - `FieldInstruction`

### invoke

default CodeBuilder invoke(Opcode opcode, MemberRefEntry ref)
Generates an instruction to invoke a method.

Parameters:
  `opcode` - the invoke opcode
  `ref` - the interface method or method reference
Returns:
  this builder
Throws:
  `IllegalArgumentException` - if `opcode` is not of `Opcode.Kind.INVOKE`
See Also:
  - `InvokeInstruction`

### invoke

default CodeBuilder invoke(Opcode opcode, ClassDesc owner, String name, MethodTypeDesc desc, boolean isInterface)
Generates an instruction to invoke a method.

Parameters:
  `opcode` - the invoke opcode
  `owner` - the class
  `name` - the method name
  `desc` - the method type
  `isInterface` - whether the owner class is an interface
Returns:
  this builder
Throws:
  `IllegalArgumentException` - if `opcode` is not of `Opcode.Kind.INVOKE`, or `owner` is primitive
See Also:
  - `InvokeInstruction`

### arrayLoad

default CodeBuilder arrayLoad(TypeKind tk)
Generates an instruction to load from an array.

Parameters:
  `tk` - the array element type
Returns:
  this builder
Throws:
  `IllegalArgumentException` - if `tk` is `void`
See Also:
  - `ArrayLoadInstruction`

### arrayStore

default CodeBuilder arrayStore(TypeKind tk)
Generates an instruction to store into an array.

Parameters:
  `tk` - the array element type
Returns:
  this builder
Throws:
  `IllegalArgumentException` - if `tk` is `void`
See Also:
  - `ArrayStoreInstruction`

### conversion

default CodeBuilder conversion(TypeKind fromType, TypeKind toType)
Generates instruction(s) to convert `fromType` to `toType`.

Parameters:
  `fromType` - the source type
  `toType` - the target type
Returns:
  this builder
Throws:
  `IllegalArgumentException` - for conversions of `void` or `reference`
See Also:
  - `ConvertInstruction`

### loadConstant

default CodeBuilder loadConstant(ConstantDesc value)
Generates an instruction pushing a constant onto the operand stack.

Parameters:
  `value` - the constant value, may be `null`
Returns:
  this builder
See Also:
  - `ConstantInstruction`

### loadConstant

default CodeBuilder loadConstant(int value)
Generates an instruction pushing a constant `int` value onto the operand stack. This is equivalent to `loadConstant(Integer.valueOf(value))`.

Parameters:
  `value` - the int value
Returns:
  this builder
See Also:
  - `ConstantInstruction`

### loadConstant

default CodeBuilder loadConstant(long value)
Generates an instruction pushing a constant `long` value onto the operand stack. This is equivalent to `loadConstant(Long.valueOf(value))`.

Parameters:
  `value` - the long value
Returns:
  this builder
See Also:
  - `ConstantInstruction`

### loadConstant

default CodeBuilder loadConstant(float value)
Generates an instruction pushing a constant `float` value onto the operand stack. This is equivalent to `loadConstant(Float.valueOf(value))`.

All NaN values of the `float` may or may not be collapsed into a single "canonical" NaN value.

Parameters:
  `value` - the float value
Returns:
  this builder
See Also:
  - `ConstantInstruction`

### loadConstant

default CodeBuilder loadConstant(double value)
Generates an instruction pushing a constant `double` value onto the operand stack. This is equivalent to `loadConstant(Double.valueOf(value))`.

All NaN values of the `double` may or may not be collapsed into a single "canonical" NaN value.

Parameters:
  `value` - the double value
Returns:
  this builder
See Also:
  - `ConstantInstruction`

### nop

default CodeBuilder nop()
Generates a do-nothing instruction.

Returns:
  this builder
See Also:
  - `NopInstruction`

### newBoundLabel

default Label newBoundLabel()
Creates a new label bound at the current position.

Returns:
  this builder
See Also:
  - `newLabel()`
  - `labelBinding(Label)`

### labelBinding

default CodeBuilder labelBinding(Label label)
Binds a label to the current position.

API Note:
  The label to bind does not have to be from this builder; it can be from another parsed `CodeModel`.
Parameters:
  `label` - the label
Returns:
  this builder
See Also:
  - `LabelTarget`

### lineNumber

default CodeBuilder lineNumber(int line)
Declares a source line number beginning at the current position.

This call may be ignored according to `ClassFile.LineNumbersOption`.

Parameters:
  `line` - the line number
Returns:
  this builder
Throws:
  `IllegalArgumentException` - if `line` is not `u2`
See Also:
  - `LineNumber`

### exceptionCatch

default CodeBuilder exceptionCatch(Label start, Label end, Label handler, ClassEntry catchType)
Declares an exception table entry.

This call may be ignored if any of the argument labels is not bound and `ClassFile.DeadLabelsOption.DROP_DEAD_LABELS` is set.

Parameters:
  `start` - the try block start
  `end` - the try block end
  `handler` - the exception handler start
  `catchType` - the catch type, may be `null` to catch all exceptions and errors
Returns:
  this builder
See Also:
  - `ExceptionCatch`
  - `trying(Consumer, Consumer)`

### exceptionCatch

default CodeBuilder exceptionCatch(Label start, Label end, Label handler, Optional<ClassEntry> catchType)
Declares an exception table entry.

This call may be ignored if any of the argument labels is not bound and `ClassFile.DeadLabelsOption.DROP_DEAD_LABELS` is set.

Parameters:
  `start` - the try block start
  `end` - the try block end
  `handler` - the exception handler start
  `catchType` - the optional catch type, empty to catch all exceptions and errors
Returns:
  this builder
See Also:
  - `ExceptionCatch`
  - `trying(Consumer, Consumer)`

### exceptionCatch

default CodeBuilder exceptionCatch(Label start, Label end, Label handler, ClassDesc catchType)
Declares an exception table entry.

This call may be ignored if any of the argument labels is not bound and `ClassFile.DeadLabelsOption.DROP_DEAD_LABELS` is set.

Parameters:
  `start` - the try block start
  `end` - the try block end
  `handler` - the exception handler start
  `catchType` - the catch type
Returns:
  this builder
Throws:
  `IllegalArgumentException` - if `catchType` is primitive
See Also:
  - `ExceptionCatch`
  - `trying(Consumer, Consumer)`

### exceptionCatchAll

default CodeBuilder exceptionCatchAll(Label start, Label end, Label handler)
Declares an exception table entry catching all exceptions and errors.

This call may be ignored if any of the argument labels is not bound and `ClassFile.DeadLabelsOption.DROP_DEAD_LABELS` is set.

Parameters:
  `start` - the try block start
  `end` - the try block end
  `handler` - the exception handler start
Returns:
  this builder
See Also:
  - `ExceptionCatch`
  - `trying(Consumer, Consumer)`

### characterRange

default CodeBuilder characterRange(Label startScope, Label endScope, int characterRangeStart, int characterRangeEnd, int flags)
Declares a character range entry.

This call may be ignored if `ClassFile.DebugElementsOption.DROP_DEBUG` is set, or if any of the argument labels is not bound and `ClassFile.DeadLabelsOption.DROP_DEAD_LABELS` is set.

Parameters:
  `startScope` - the start scope of the character range
  `endScope` - the end scope of the character range
  `characterRangeStart` - the encoded start of the character range region (inclusive)
  `characterRangeEnd` - the encoded end of the character range region (exclusive)
  `flags` - the flags word, indicating the kind of range
Returns:
  this builder
Throws:
  `IllegalArgumentException` - if `flags` is not `u2`
See Also:
  - `CharacterRange`

### localVariable

default CodeBuilder localVariable(int slot, Utf8Entry nameEntry, Utf8Entry descriptorEntry, Label startScope, Label endScope)
Declares a local variable entry.

This call may be ignored if `ClassFile.DebugElementsOption.DROP_DEBUG` is set, or if any of the argument labels is not bound and `ClassFile.DeadLabelsOption.DROP_DEAD_LABELS` is set.

Parameters:
  `slot` - the local variable slot
  `nameEntry` - the variable name
  `descriptorEntry` - the variable descriptor
  `startScope` - the start scope of the variable
  `endScope` - the end scope of the variable
Returns:
  this builder
Throws:
  `IllegalArgumentException` - if `slot` is not `u2`
See Also:
  - `LocalVariable`

### localVariable

default CodeBuilder localVariable(int slot, String name, ClassDesc descriptor, Label startScope, Label endScope)
Declares a local variable entry.

This call may be ignored if `ClassFile.DebugElementsOption.DROP_DEBUG` is set, or if any of the argument labels is not bound and `ClassFile.DeadLabelsOption.DROP_DEAD_LABELS` is set.

Parameters:
  `slot` - the local variable slot
  `name` - the variable name
  `descriptor` - the variable descriptor
  `startScope` - the start scope of the variable
  `endScope` - the end scope of the variable
Returns:
  this builder
Throws:
  `IllegalArgumentException` - if `slot` is not `u2`
See Also:
  - `LocalVariable`

### localVariableType

default CodeBuilder localVariableType(int slot, Utf8Entry nameEntry, Utf8Entry signatureEntry, Label startScope, Label endScope)
Declares a local variable type entry.

This call may be ignored if `ClassFile.DebugElementsOption.DROP_DEBUG` is set, or if any of the argument labels is not bound and `ClassFile.DeadLabelsOption.DROP_DEAD_LABELS` is set.

API Note:
  When a local variable type entry is declared, a local variable entry with the descriptor derived from erasure (JLS 4.6) of the signature should be declared as well.
Parameters:
  `slot` - the local variable slot
  `nameEntry` - the variable name
  `signatureEntry` - the variable signature
  `startScope` - the start scope of the variable
  `endScope` - the end scope of the variable
Returns:
  this builder
Throws:
  `IllegalArgumentException` - if `slot` is not `u2`
See Also:
  - `LocalVariableType`

### localVariableType

default CodeBuilder localVariableType(int slot, String name, Signature signature, Label startScope, Label endScope)
Declares a local variable type entry.

This call may be ignored if `ClassFile.DebugElementsOption.DROP_DEBUG` is set, or if any of the argument labels is not bound and `ClassFile.DeadLabelsOption.DROP_DEAD_LABELS` is set.

API Note:
  When a local variable type entry is declared, a local variable entry with the descriptor derived from erasure (JLS 4.6) of the signature should be declared as well.
Parameters:
  `slot` - the local variable slot
  `name` - the variable name
  `signature` - the variable signature
  `startScope` - the start scope of the variable
  `endScope` - the end scope of the variable
Returns:
  this builder
Throws:
  `IllegalArgumentException` - if `slot` is not `u2`
See Also:
  - `LocalVariableType`

### aconst_null

default CodeBuilder aconst_null()
Generates an instruction pushing the null object `reference` onto the operand stack.

Returns:
  this builder
See Also:
  - `Opcode.ACONST_NULL`
  - `ConstantInstruction.IntrinsicConstantInstruction`

### aaload

default CodeBuilder aaload()
Generates an instruction to load from a `reference` array.

Returns:
  this builder
See Also:
  - `Opcode.AALOAD`
  - `arrayLoad(TypeKind)`
  - `ArrayLoadInstruction`

### aastore

default CodeBuilder aastore()
Generates an instruction to store into a `reference` array.

Returns:
  this builder
See Also:
  - `Opcode.AASTORE`
  - `arrayStore(TypeKind)`
  - `ArrayStoreInstruction`

### aload

default CodeBuilder aload(int slot)
Generates an instruction to load a `reference` from a local variable.

This may also generate `aload_<N>` and `wide aload` instructions.

Parameters:
  `slot` - the local variable slot
Returns:
  this builder
Throws:
  `IllegalArgumentException` - if `slot` is not `u2`
See Also:
  - `Opcode.ALOAD`
  - `loadLocal(TypeKind, int)`
  - `LoadInstruction`

### anewarray

default CodeBuilder anewarray(ClassEntry classEntry)
Generates an instruction to create a new array of `reference`.

Parameters:
  `classEntry` - the component type
Returns:
  this builder
See Also:
  - `Opcode.ANEWARRAY`
  - `NewReferenceArrayInstruction`

### anewarray

default CodeBuilder anewarray(ClassDesc className)
Generates an instruction to create a new array of `reference`.

Parameters:
  `className` - the component type
Returns:
  this builder
Throws:
  `IllegalArgumentException` - if `className` represents a primitive type
See Also:
  - `Opcode.ANEWARRAY`
  - `NewReferenceArrayInstruction`

### areturn

default CodeBuilder areturn()
Generates an instruction to return a `reference` from this method.

Returns:
  this builder
See Also:
  - `Opcode.ARETURN`
  - `return_(TypeKind)`
  - `ReturnInstruction`

### arraylength

default CodeBuilder arraylength()
Generates an instruction to get the length of an array.

Returns:
  this builder
See Also:
  - `Opcode.ARRAYLENGTH`
  - `OperatorInstruction`

### astore

default CodeBuilder astore(int slot)
Generates an instruction to store a `reference` into a local variable. Such an instruction can also store a `returnAddress`.

This may also generate `astore_<N>` and `wide astore` instructions.

Parameters:
  `slot` - the local variable slot
Returns:
  this builder
Throws:
  `IllegalArgumentException` - if `slot` is not `u2`
See Also:
  - `Opcode.ASTORE`
  - `storeLocal(TypeKind, int)`
  - `StoreInstruction`

### athrow

default CodeBuilder athrow()
Generates an instruction to throw an exception or error.

Returns:
  this builder
See Also:
  - `Opcode.ATHROW`
  - `ThrowInstruction`

### baload

default CodeBuilder baload()
Generates an instruction to load from a `byte` or `boolean` array.

Returns:
  this builder
See Also:
  - `Opcode.BALOAD`
  - `arrayLoad(TypeKind)`
  - `ArrayLoadInstruction`

### bastore

default CodeBuilder bastore()
Generates an instruction to store into a `byte` or `boolean` array.

Returns:
  this builder
See Also:
  - `Opcode.BASTORE`
  - `arrayStore(TypeKind)`
  - `ArrayStoreInstruction`

### bipush

default CodeBuilder bipush(int b)
Generates an instruction pushing an `int` in the range of `byte` (`[-128, 127]`) onto the operand stack.

Parameters:
  `b` - the int in the range of byte
Returns:
  this builder
Throws:
  `IllegalArgumentException` - if `b` is out of range of byte
See Also:
  - `Opcode.BIPUSH`
  - `loadConstant(int)`
  - `ConstantInstruction.IntrinsicConstantInstruction`

### caload

default CodeBuilder caload()
Generates an instruction to load from a `char` array.

Returns:
  this builder
See Also:
  - `Opcode.CALOAD`
  - `arrayLoad(TypeKind)`
  - `ArrayLoadInstruction`

### castore

default CodeBuilder castore()
Generates an instruction to store into a `char` array.

Returns:
  this builder
See Also:
  - `Opcode.CASTORE`
  - `arrayStore(TypeKind)`
  - `ArrayStoreInstruction`

### checkcast

default CodeBuilder checkcast(ClassEntry type)
Generates an instruction to check whether an object is of the given type, throwing a `ClassCastException` if the check fails.

Parameters:
  `type` - the object type
Returns:
  this builder
See Also:
  - `Opcode.CHECKCAST`
  - `TypeCheckInstruction`

### checkcast

default CodeBuilder checkcast(ClassDesc type)
Generates an instruction to check whether an object is of the given type, throwing a `ClassCastException` if the check fails.

Parameters:
  `type` - the object type
Returns:
  this builder
Throws:
  `IllegalArgumentException` - if `type` represents a primitive type
See Also:
  - `Opcode.CHECKCAST`
  - `TypeCheckInstruction`

### d2f

default CodeBuilder d2f()
Generates an instruction to convert a `double` into a `float`.

Returns:
  this builder
See Also:
  - `Opcode.D2F`
  - `ConvertInstruction`

### d2i

default CodeBuilder d2i()
Generates an instruction to convert a `double` into an `int`.

Returns:
  this builder
See Also:
  - `Opcode.D2I`
  - `ConvertInstruction`

### d2l

default CodeBuilder d2l()
Generates an instruction to convert a `double` into a `long`.

Returns:
  this builder
See Also:
  - `Opcode.D2L`
  - `ConvertInstruction`

### dadd

default CodeBuilder dadd()
Generates an instruction to add two `doubles`.

Returns:
  this builder
See Also:
  - `Opcode.DADD`
  - `OperatorInstruction`

### daload

default CodeBuilder daload()
Generates an instruction to load from a `double` array.

Returns:
  this builder
See Also:
  - `Opcode.DALOAD`
  - `arrayLoad(TypeKind)`
  - `ArrayLoadInstruction`

### dastore

default CodeBuilder dastore()
Generates an instruction to store into a `double` array.

Returns:
  this builder
See Also:
  - `Opcode.DASTORE`
  - `arrayStore(TypeKind)`
  - `ArrayStoreInstruction`

### dcmpg

default CodeBuilder dcmpg()
Generates an instruction to compare two `doubles`, producing `1` if any operand is `NaN`.

Returns:
  this builder
See Also:
  - `Opcode.DCMPG`
  - `OperatorInstruction`

### dcmpl

default CodeBuilder dcmpl()
Generates an instruction to compare two `doubles`, producing `-1` if any operand is `NaN`.

Returns:
  this builder
See Also:
  - `Opcode.DCMPL`
  - `OperatorInstruction`

### dconst_0

default CodeBuilder dconst_0()
Generates an instruction pushing `double` constant 0 onto the operand stack.

Returns:
  this builder
See Also:
  - `Opcode.DCONST_0`
  - `loadConstant(double)`
  - `ConstantInstruction.IntrinsicConstantInstruction`

### dconst_1

default CodeBuilder dconst_1()
Generates an instruction pushing `double` constant 1 onto the operand stack.

Returns:
  this builder
See Also:
  - `Opcode.DCONST_1`
  - `loadConstant(double)`
  - `ConstantInstruction.IntrinsicConstantInstruction`

### ddiv

default CodeBuilder ddiv()
Generates an instruction to divide `doubles`.

Returns:
  this builder
See Also:
  - `Opcode.DDIV`
  - `OperatorInstruction`

### dload

default CodeBuilder dload(int slot)
Generates an instruction to load a `double` from a local variable.

This may also generate `dload_<N>` and `wide dload` instructions.

Parameters:
  `slot` - the local variable slot
Returns:
  this builder
Throws:
  `IllegalArgumentException` - if `slot` is not `u2`
See Also:
  - `Opcode.DLOAD`
  - `loadLocal(TypeKind, int)`
  - `LoadInstruction`

### dmul

default CodeBuilder dmul()
Generates an instruction to multiply `doubles`.

Returns:
  this builder
See Also:
  - `Opcode.DMUL`
  - `OperatorInstruction`

### dneg

default CodeBuilder dneg()
Generates an instruction to negate a `double`.

Returns:
  this builder
See Also:
  - `Opcode.DNEG`
  - `OperatorInstruction`

### drem

default CodeBuilder drem()
Generates an instruction to calculate `double` remainder.

Returns:
  this builder
See Also:
  - `Opcode.DREM`
  - `OperatorInstruction`

### dreturn

default CodeBuilder dreturn()
Generates an instruction to return a `double` from this method.

Returns:
  this builder
See Also:
  - `Opcode.DRETURN`
  - `return_(TypeKind)`
  - `ReturnInstruction`

### dstore

default CodeBuilder dstore(int slot)
Generates an instruction to store a `double` into a local variable.

This may also generate `dstore_<N>` and `wide dstore` instructions.

Parameters:
  `slot` - the local variable slot
Returns:
  this builder
Throws:
  `IllegalArgumentException` - if `slot` is not `u2`
See Also:
  - `Opcode.DSTORE`
  - `storeLocal(TypeKind, int)`
  - `StoreInstruction`

### dsub

default CodeBuilder dsub()
Generates an instruction to subtract `doubles`.

Returns:
  this builder
See Also:
  - `Opcode.DSUB`
  - `OperatorInstruction`

### dup

default CodeBuilder dup()
Generates an instruction to duplicate the top operand stack value.

Returns:
  this builder
See Also:
  - `Opcode.DUP`
  - `StackInstruction`

### dup2

default CodeBuilder dup2()
Generates an instruction to duplicate the top one or two operand stack value.

Returns:
  this builder
See Also:
  - `Opcode.DUP2`
  - `StackInstruction`

### dup2_x1

default CodeBuilder dup2_x1()
Generates an instruction to duplicate the top one or two operand stack values and insert two or three values down.

Returns:
  this builder
See Also:
  - `Opcode.DUP2_X1`
  - `StackInstruction`

### dup2_x2

default CodeBuilder dup2_x2()
Generates an instruction to duplicate the top one or two operand stack values and insert two, three, or four values down.

Returns:
  this builder
See Also:
  - `Opcode.DUP2_X2`
  - `StackInstruction`

### dup_x1

default CodeBuilder dup_x1()
Generates an instruction to duplicate the top operand stack value and insert two values down.

Returns:
  this builder
See Also:
  - `Opcode.DUP_X1`
  - `StackInstruction`

### dup_x2

default CodeBuilder dup_x2()
Generates an instruction to duplicate the top operand stack value and insert two or three values down.

Returns:
  this builder
See Also:
  - `Opcode.DUP_X2`
  - `StackInstruction`

### f2d

default CodeBuilder f2d()
Generates an instruction to convert a `float` into a `double`.

Returns:
  this builder
See Also:
  - `Opcode.F2D`
  - `ConvertInstruction`

### f2i

default CodeBuilder f2i()
Generates an instruction to convert a `float` into an `int`.

Returns:
  this builder
See Also:
  - `Opcode.F2I`
  - `ConvertInstruction`

### f2l

default CodeBuilder f2l()
Generates an instruction to convert a `float` into a `long`.

Returns:
  this builder
See Also:
  - `Opcode.F2L`
  - `ConvertInstruction`

### fadd

default CodeBuilder fadd()
Generates an instruction to add two `floats`.

Returns:
  this builder
See Also:
  - `Opcode.FADD`
  - `OperatorInstruction`

### faload

default CodeBuilder faload()
Generates an instruction to load from a `float` array.

Returns:
  this builder
See Also:
  - `Opcode.FALOAD`
  - `arrayLoad(TypeKind)`
  - `ArrayLoadInstruction`

### fastore

default CodeBuilder fastore()
Generates an instruction to store into a `float` array.

Returns:
  this builder
See Also:
  - `Opcode.FASTORE`
  - `arrayStore(TypeKind)`
  - `ArrayStoreInstruction`

### fcmpg

default CodeBuilder fcmpg()
Generates an instruction to compare `floats`, producing `1` if any operand is `NaN`.

Returns:
  this builder
See Also:
  - `Opcode.FCMPG`
  - `OperatorInstruction`

### fcmpl

default CodeBuilder fcmpl()
Generates an instruction to compare `floats`, producing `-1` if any operand is `NaN`.

Returns:
  this builder
See Also:
  - `Opcode.FCMPL`
  - `OperatorInstruction`

### fconst_0

default CodeBuilder fconst_0()
Generates an instruction pushing `float` constant 0 onto the operand stack.

Returns:
  this builder
See Also:
  - `Opcode.FCONST_0`
  - `loadConstant(float)`
  - `ConstantInstruction.IntrinsicConstantInstruction`

### fconst_1

default CodeBuilder fconst_1()
Generates an instruction pushing `float` constant 1 onto the operand stack.

Returns:
  this builder
See Also:
  - `Opcode.FCONST_1`
  - `loadConstant(float)`
  - `ConstantInstruction.IntrinsicConstantInstruction`

### fconst_2

default CodeBuilder fconst_2()
Generates an instruction pushing `float` constant 2 onto the operand stack.

Returns:
  this builder
See Also:
  - `Opcode.FCONST_2`
  - `loadConstant(float)`
  - `ConstantInstruction.IntrinsicConstantInstruction`

### fdiv

default CodeBuilder fdiv()
Generates an instruction to divide `floats`.

Returns:
  this builder
See Also:
  - `Opcode.FDIV`
  - `OperatorInstruction`

### fload

default CodeBuilder fload(int slot)
Generates an instruction to load a `float` from a local variable.

This may also generate `fload_<N>` and `wide fload` instructions.

Parameters:
  `slot` - the local variable slot
Returns:
  this builder
Throws:
  `IllegalArgumentException` - if `slot` is not `u2`
See Also:
  - `Opcode.FLOAD`
  - `loadLocal(TypeKind, int)`
  - `LoadInstruction`

### fmul

default CodeBuilder fmul()
Generates an instruction to multiply `floats`.

Returns:
  this builder
See Also:
  - `Opcode.FMUL`
  - `OperatorInstruction`

### fneg

default CodeBuilder fneg()
Generates an instruction to negate a `float`.

Returns:
  this builder
See Also:
  - `Opcode.FNEG`
  - `OperatorInstruction`

### frem

default CodeBuilder frem()
Generates an instruction to calculate `floats` remainder.

Returns:
  this builder
See Also:
  - `Opcode.FREM`
  - `OperatorInstruction`

### freturn

default CodeBuilder freturn()
Generates an instruction to return a `float` from this method.

Returns:
  this builder
See Also:
  - `Opcode.FRETURN`
  - `return_(TypeKind)`
  - `ReturnInstruction`

### fstore

default CodeBuilder fstore(int slot)
Generates an instruction to store a `float` into a local variable.

This may also generate `fstore_<N>` and `wide fstore` instructions.

Parameters:
  `slot` - the local variable slot
Returns:
  this builder
Throws:
  `IllegalArgumentException` - if `slot` is not `u2`
See Also:
  - `Opcode.FSTORE`
  - `storeLocal(TypeKind, int)`
  - `StoreInstruction`

### fsub

default CodeBuilder fsub()
Generates an instruction to subtract `floats`.

Returns:
  this builder
See Also:
  - `Opcode.FSUB`
  - `OperatorInstruction`

### getfield

default CodeBuilder getfield(FieldRefEntry ref)
Generates an instruction to fetch field from an object.

Parameters:
  `ref` - the field reference
Returns:
  this builder
See Also:
  - `Opcode.GETFIELD`
  - `fieldAccess(Opcode, FieldRefEntry)`
  - `FieldInstruction`

### getfield

default CodeBuilder getfield(ClassDesc owner, String name, ClassDesc type)
Generates an instruction to fetch field from an object.

Parameters:
  `owner` - the owner class
  `name` - the field name
  `type` - the field type
Returns:
  this builder
Throws:
  `IllegalArgumentException` - if `owner` represents a primitive type
See Also:
  - `Opcode.GETFIELD`
  - `fieldAccess(Opcode, ClassDesc, String, ClassDesc)`
  - `FieldInstruction`

### getstatic

default CodeBuilder getstatic(FieldRefEntry ref)
Generates an instruction to get static field from a class or interface.

Parameters:
  `ref` - the field reference
Returns:
  this builder
See Also:
  - `Opcode.GETSTATIC`
  - `fieldAccess(Opcode, FieldRefEntry)`
  - `FieldInstruction`

### getstatic

default CodeBuilder getstatic(ClassDesc owner, String name, ClassDesc type)
Generates an instruction to get static field from a class or interface.

Parameters:
  `owner` - the owner class
  `name` - the field name
  `type` - the field type
Returns:
  this builder
Throws:
  `IllegalArgumentException` - if `owner` represents a primitive type
See Also:
  - `Opcode.GETSTATIC`
  - `fieldAccess(Opcode, ClassDesc, String, ClassDesc)`
  - `FieldInstruction`

### goto_

default CodeBuilder goto_(Label target)
Generates an instruction to branch always.

This may also generate `goto_w` instructions if `ClassFile.ShortJumpsOption.FIX_SHORT_JUMPS` is set.

API Note:
  The instruction's name is `goto`, which coincides with a reserved keyword of the Java programming language, thus this method is named with an extra `_` suffix instead.
Parameters:
  `target` - the branch target
Returns:
  this builder
See Also:
  - `Opcode.GOTO`
  - `branch(Opcode, Label)`
  - `BranchInstruction`

### goto_w

default CodeBuilder goto_w(Label target)
Generates an instruction to branch always with wide index.

Parameters:
  `target` - the branch target
Returns:
  this builder
See Also:
  - `Opcode.GOTO_W`
  - `branch(Opcode, Label)`
  - `BranchInstruction`

### i2b

default CodeBuilder i2b()
Generates an instruction to truncate an `int` into the range of `byte` and sign-extend it.

Returns:
  this builder
See Also:
  - `Opcode.I2B`
  - `ConvertInstruction`

### i2c

default CodeBuilder i2c()
Generates an instruction to truncate an `int` into the range of `char` and zero-extend it.

Returns:
  this builder
See Also:
  - `Opcode.I2C`
  - `ConvertInstruction`

### i2d

default CodeBuilder i2d()
Generates an instruction to convert an `int` into a `double`.

Returns:
  this builder
See Also:
  - `Opcode.I2D`
  - `ConvertInstruction`

### i2f

default CodeBuilder i2f()
Generates an instruction to convert an `int` into a `float`.

Returns:
  this builder
See Also:
  - `Opcode.I2F`
  - `ConvertInstruction`

### i2l

default CodeBuilder i2l()
Generates an instruction to convert an `int` into a `long`.

Returns:
  this builder
See Also:
  - `Opcode.I2L`
  - `ConvertInstruction`

### i2s

default CodeBuilder i2s()
Generates an instruction to truncate an `int` into the range of `short` and sign-extend it.

Returns:
  this builder
See Also:
  - `Opcode.I2S`
  - `ConvertInstruction`

### iadd

default CodeBuilder iadd()
Generates an instruction to add two `ints`.

Returns:
  this builder
See Also:
  - `Opcode.IADD`
  - `OperatorInstruction`

### iaload

default CodeBuilder iaload()
Generates an instruction to load from an `int` array.

Returns:
  this builder
See Also:
  - `Opcode.IALOAD`
  - `arrayLoad(TypeKind)`
  - `ArrayLoadInstruction`

### iand

default CodeBuilder iand()
Generates an instruction to calculate bitwise AND of `ints`, also used for `boolean` AND.

Returns:
  this builder
See Also:
  - `Opcode.IAND`
  - `OperatorInstruction`

### iastore

default CodeBuilder iastore()
Generates an instruction to store into an `int` array.

Returns:
  this builder
See Also:
  - `Opcode.IASTORE`
  - `arrayStore(TypeKind)`
  - `ArrayStoreInstruction`

### iconst_0

default CodeBuilder iconst_0()
Generates an instruction pushing `int` constant 0 onto the operand stack.

Returns:
  this builder
See Also:
  - `Opcode.ICONST_0`
  - `loadConstant(int)`
  - `ConstantInstruction.IntrinsicConstantInstruction`

### iconst_1

default CodeBuilder iconst_1()
Generates an instruction pushing `int` constant 1 onto the operand stack.

Returns:
  this builder
See Also:
  - `Opcode.ICONST_1`
  - `loadConstant(int)`
  - `ConstantInstruction.IntrinsicConstantInstruction`

### iconst_2

default CodeBuilder iconst_2()
Generates an instruction pushing `int` constant 2 onto the operand stack.

Returns:
  this builder
See Also:
  - `Opcode.ICONST_2`
  - `loadConstant(int)`
  - `ConstantInstruction.IntrinsicConstantInstruction`

### iconst_3

default CodeBuilder iconst_3()
Generates an instruction pushing `int` constant 3 onto the operand stack.

Returns:
  this builder
See Also:
  - `Opcode.ICONST_3`
  - `loadConstant(int)`
  - `ConstantInstruction.IntrinsicConstantInstruction`

### iconst_4

default CodeBuilder iconst_4()
Generates an instruction pushing `int` constant 4 onto the operand stack.

Returns:
  this builder
See Also:
  - `Opcode.ICONST_4`
  - `loadConstant(int)`
  - `ConstantInstruction.IntrinsicConstantInstruction`

### iconst_5

default CodeBuilder iconst_5()
Generates an instruction pushing `int` constant 5 onto the operand stack.

Returns:
  this builder
See Also:
  - `Opcode.ICONST_5`
  - `loadConstant(int)`
  - `ConstantInstruction.IntrinsicConstantInstruction`

### iconst_m1

default CodeBuilder iconst_m1()
Generates an instruction pushing `int` constant -1 onto the operand stack.

Returns:
  this builder
See Also:
  - `Opcode.ICONST_M1`
  - `loadConstant(int)`
  - `ConstantInstruction.IntrinsicConstantInstruction`

### idiv

default CodeBuilder idiv()
Generates an instruction to divide `ints`.

Returns:
  this builder
See Also:
  - `Opcode.IDIV`
  - `OperatorInstruction`

### if_acmpeq

default CodeBuilder if_acmpeq(Label target)
Generates an instruction to branch if `reference` comparison `operand1 == operand2` succeeds.

This may generate multiple instructions to accomplish the same effect if `ClassFile.ShortJumpsOption.FIX_SHORT_JUMPS` is set and `target` cannot be encoded as a BCI offset in `[-32768, 32767]`.

Parameters:
  `target` - the branch target
Returns:
  this builder
See Also:
  - `Opcode.IF_ACMPEQ`
  - `branch(Opcode, Label)`
  - `BranchInstruction`

### if_acmpne

default CodeBuilder if_acmpne(Label target)
Generates an instruction to branch if `reference` comparison `operand1 != operand2` succeeds.

This may generate multiple instructions to accomplish the same effect if `ClassFile.ShortJumpsOption.FIX_SHORT_JUMPS` is set and `target` cannot be encoded as a BCI offset in `[-32768, 32767]`.

Parameters:
  `target` - the branch target
Returns:
  this builder
See Also:
  - `Opcode.IF_ACMPNE`
  - `branch(Opcode, Label)`
  - `BranchInstruction`

### if_icmpeq

default CodeBuilder if_icmpeq(Label target)
Generates an instruction to branch if `int` comparison `operand1 == operand2` succeeds.

This may generate multiple instructions to accomplish the same effect if `ClassFile.ShortJumpsOption.FIX_SHORT_JUMPS` is set and `target` cannot be encoded as a BCI offset in `[-32768, 32767]`.

Parameters:
  `target` - the branch target
Returns:
  this builder
See Also:
  - `Opcode.IF_ICMPEQ`
  - `branch(Opcode, Label)`
  - `BranchInstruction`

### if_icmpge

default CodeBuilder if_icmpge(Label target)
Generates an instruction to branch if `int` comparison `operand1 >= operand2` succeeds.

This may generate multiple instructions to accomplish the same effect if `ClassFile.ShortJumpsOption.FIX_SHORT_JUMPS` is set and `target` cannot be encoded as a BCI offset in `[-32768, 32767]`.

Parameters:
  `target` - the branch target
Returns:
  this builder
See Also:
  - `Opcode.IF_ICMPGE`
  - `branch(Opcode, Label)`
  - `BranchInstruction`

### if_icmpgt

default CodeBuilder if_icmpgt(Label target)
Generates an instruction to branch if `int` comparison `operand1 > operand2` succeeds.

This may generate multiple instructions to accomplish the same effect if `ClassFile.ShortJumpsOption.FIX_SHORT_JUMPS` is set and `target` cannot be encoded as a BCI offset in `[-32768, 32767]`.

Parameters:
  `target` - the branch target
Returns:
  this builder
See Also:
  - `Opcode.IF_ICMPGT`
  - `branch(Opcode, Label)`
  - `BranchInstruction`

### if_icmple

default CodeBuilder if_icmple(Label target)
Generates an instruction to branch if `int` comparison `operand1 <= operand2` succeeds.

This may generate multiple instructions to accomplish the same effect if `ClassFile.ShortJumpsOption.FIX_SHORT_JUMPS` is set and `target` cannot be encoded as a BCI offset in `[-32768, 32767]`.

Parameters:
  `target` - the branch target
Returns:
  this builder
See Also:
  - `Opcode.IF_ICMPLE`
  - `branch(Opcode, Label)`
  - `BranchInstruction`

### if_icmplt

default CodeBuilder if_icmplt(Label target)
Generates an instruction to branch if `int` comparison `operand1 < operand2` succeeds.

This may generate multiple instructions to accomplish the same effect if `ClassFile.ShortJumpsOption.FIX_SHORT_JUMPS` is set and `target` cannot be encoded as a BCI offset in `[-32768, 32767]`.

Parameters:
  `target` - the branch target
Returns:
  this builder
See Also:
  - `Opcode.IF_ICMPLT`
  - `branch(Opcode, Label)`
  - `BranchInstruction`

### if_icmpne

default CodeBuilder if_icmpne(Label target)
Generates an instruction to branch if `int` comparison `operand1 != operand2` succeeds.

This may generate multiple instructions to accomplish the same effect if `ClassFile.ShortJumpsOption.FIX_SHORT_JUMPS` is set and `target` cannot be encoded as a BCI offset in `[-32768, 32767]`.

Parameters:
  `target` - the branch target
Returns:
  this builder
See Also:
  - `Opcode.IF_ICMPNE`
  - `branch(Opcode, Label)`
  - `BranchInstruction`

### ifnonnull

default CodeBuilder ifnonnull(Label target)
Generates an instruction to branch if `reference` is not `null`.

This may generate multiple instructions to accomplish the same effect if `ClassFile.ShortJumpsOption.FIX_SHORT_JUMPS` is set and `target` cannot be encoded as a BCI offset in `[-32768, 32767]`.

Parameters:
  `target` - the branch target
Returns:
  this builder
See Also:
  - `Opcode.IFNONNULL`
  - `branch(Opcode, Label)`
  - `BranchInstruction`

### ifnull

default CodeBuilder ifnull(Label target)
Generates an instruction to branch if `reference` is `null`.

This may generate multiple instructions to accomplish the same effect if `ClassFile.ShortJumpsOption.FIX_SHORT_JUMPS` is set and `target` cannot be encoded as a BCI offset in `[-32768, 32767]`.

Parameters:
  `target` - the branch target
Returns:
  this builder
See Also:
  - `Opcode.IFNULL`
  - `branch(Opcode, Label)`
  - `BranchInstruction`

### ifeq

default CodeBuilder ifeq(Label target)
Generates an instruction to branch if `int` comparison with zero `== 0` succeeds.

This may generate multiple instructions to accomplish the same effect if `ClassFile.ShortJumpsOption.FIX_SHORT_JUMPS` is set and `target` cannot be encoded as a BCI offset in `[-32768, 32767]`.

Parameters:
  `target` - the branch target
Returns:
  this builder
See Also:
  - `Opcode.IFEQ`
  - `branch(Opcode, Label)`
  - `BranchInstruction`

### ifge

default CodeBuilder ifge(Label target)
Generates an instruction to branch if `int` comparison with zero `>= 0` succeeds.

This may generate multiple instructions to accomplish the same effect if `ClassFile.ShortJumpsOption.FIX_SHORT_JUMPS` is set and `target` cannot be encoded as a BCI offset in `[-32768, 32767]`.

Parameters:
  `target` - the branch target
Returns:
  this builder
See Also:
  - `Opcode.IFGE`
  - `branch(Opcode, Label)`
  - `BranchInstruction`

### ifgt

default CodeBuilder ifgt(Label target)
Generates an instruction to branch if `int` comparison with zero `> 0` succeeds.

This may generate multiple instructions to accomplish the same effect if `ClassFile.ShortJumpsOption.FIX_SHORT_JUMPS` is set and `target` cannot be encoded as a BCI offset in `[-32768, 32767]`.

Parameters:
  `target` - the branch target
Returns:
  this builder
See Also:
  - `Opcode.IFGT`
  - `branch(Opcode, Label)`
  - `BranchInstruction`

### ifle

default CodeBuilder ifle(Label target)
Generates an instruction to branch if `int` comparison with zero `<= 0` succeeds.

This may generate multiple instructions to accomplish the same effect if `ClassFile.ShortJumpsOption.FIX_SHORT_JUMPS` is set and `target` cannot be encoded as a BCI offset in `[-32768, 32767]`.

Parameters:
  `target` - the branch target
Returns:
  this builder
See Also:
  - `Opcode.IFLE`
  - `branch(Opcode, Label)`
  - `BranchInstruction`

### iflt

default CodeBuilder iflt(Label target)
Generates an instruction to branch if `int` comparison with zero `< 0` succeeds.

This may generate multiple instructions to accomplish the same effect if `ClassFile.ShortJumpsOption.FIX_SHORT_JUMPS` is set and `target` cannot be encoded as a BCI offset in `[-32768, 32767]`.

Parameters:
  `target` - the branch target
Returns:
  this builder
See Also:
  - `Opcode.IFLT`
  - `branch(Opcode, Label)`
  - `BranchInstruction`

### ifne

default CodeBuilder ifne(Label target)
Generates an instruction to branch if `int` comparison with zero `!= 0` succeeds.

This may generate multiple instructions to accomplish the same effect if `ClassFile.ShortJumpsOption.FIX_SHORT_JUMPS` is set and `target` cannot be encoded as a BCI offset in `[-32768, 32767]`.

Parameters:
  `target` - the branch target
Returns:
  this builder
See Also:
  - `Opcode.IFNE`
  - `branch(Opcode, Label)`
  - `BranchInstruction`

### iinc

default CodeBuilder iinc(int slot, int val)
Generates an instruction to increment an `int` local variable by a constant.

This may also generate `wide iinc` instructions if `slot` exceeds the limit of `u1` or `val` exceeds the range of `byte`.

Parameters:
  `slot` - the local variable slot
  `val` - the increment value
Returns:
  this builder
Throws:
  `IllegalArgumentException` - if `slot` is not `u2` or `val` is out of range of `short`
See Also:
  - `Opcode.IINC`
  - `IncrementInstruction`

### iload

default CodeBuilder iload(int slot)
Generates an instruction to load an `int` from a local variable.

This may also generate `iload_<N>` and `wide iload` instructions.

Parameters:
  `slot` - the local variable slot
Returns:
  this builder
Throws:
  `IllegalArgumentException` - if `slot` is not `u2`
See Also:
  - `Opcode.ILOAD`
  - `loadLocal(TypeKind, int)`
  - `LoadInstruction`

### imul

default CodeBuilder imul()
Generates an instruction to multiply `ints`.

Returns:
  this builder
See Also:
  - `Opcode.IMUL`
  - `OperatorInstruction`

### ineg

default CodeBuilder ineg()
Generates an instruction to negate an `int`.

Returns:
  this builder
See Also:
  - `Opcode.INEG`
  - `OperatorInstruction`

### instanceOf

default CodeBuilder instanceOf(ClassEntry target)
Generates an instruction to determine if an object is of the given type, producing a `boolean` result on the operand stack.

API Note:
  The instruction's name is `instanceof`, which coincides with a reserved keyword of the Java programming language, thus this method is named with camel case instead.
Parameters:
  `target` - the target type
Returns:
  this builder
See Also:
  - `Opcode.INSTANCEOF`
  - `TypeCheckInstruction`

### instanceOf

default CodeBuilder instanceOf(ClassDesc target)
Generates an instruction to determine if an object is of the given type, producing a `boolean` result on the operand stack.

API Note:
  The instruction's name is `instanceof`, which coincides with a reserved keyword of the Java programming language, thus this method is named with camel case instead.
Parameters:
  `target` - the target type
Returns:
  this builder
Throws:
  `IllegalArgumentException` - if `target` represents a primitive type
See Also:
  - `Opcode.INSTANCEOF`
  - `TypeCheckInstruction`

### invokedynamic

default CodeBuilder invokedynamic(InvokeDynamicEntry ref)
Generates an instruction to invoke a dynamically-computed call site.

Parameters:
  `ref` - the dynamic call site
Returns:
  this builder
See Also:
  - `Opcode.INVOKEDYNAMIC`
  - `InvokeDynamicInstruction`

### invokedynamic

default CodeBuilder invokedynamic(DynamicCallSiteDesc ref)
Generates an instruction to invoke a dynamically-computed call site.

Parameters:
  `ref` - the dynamic call site
Returns:
  this builder
See Also:
  - `Opcode.INVOKEDYNAMIC`
  - `InvokeDynamicInstruction`

### invokeinterface

default CodeBuilder invokeinterface(InterfaceMethodRefEntry ref)
Generates an instruction to invoke an interface method.

Parameters:
  `ref` - the interface method reference
Returns:
  this builder
See Also:
  - `Opcode.INVOKEINTERFACE`
  - `invoke(Opcode, MemberRefEntry)`
  - `InvokeInstruction`

### invokeinterface

default CodeBuilder invokeinterface(ClassDesc owner, String name, MethodTypeDesc type)
Generates an instruction to invoke an interface method.

Parameters:
  `owner` - the owner interface
  `name` - the method name
  `type` - the method type
Returns:
  this builder
Throws:
  `IllegalArgumentException` - if `owner` represents a primitive type
See Also:
  - `Opcode.INVOKEINTERFACE`
  - `invoke(Opcode, ClassDesc, String, MethodTypeDesc, boolean)`
  - `InvokeInstruction`

### invokespecial

default CodeBuilder invokespecial(InterfaceMethodRefEntry ref)
Generates an instruction to invoke an instance method in an interface; direct invocation of methods of the current class and its supertypes.

Parameters:
  `ref` - the interface method reference
Returns:
  this builder
See Also:
  - `Opcode.INVOKESPECIAL`
  - `invoke(Opcode, MemberRefEntry)`
  - `InvokeInstruction`

### invokespecial

default CodeBuilder invokespecial(MethodRefEntry ref)
Generates an instruction to invoke an instance method in a class; direct invocation of instance initialization methods and methods of the current class and its supertypes.

Parameters:
  `ref` - the method reference
Returns:
  this builder
See Also:
  - `Opcode.INVOKESPECIAL`
  - `invoke(Opcode, MemberRefEntry)`
  - `InvokeInstruction`

### invokespecial

default CodeBuilder invokespecial(ClassDesc owner, String name, MethodTypeDesc type)
Generates an instruction to invoke an instance method in a class; direct invocation of instance initialization methods and methods of the current class and its supertypes.

Parameters:
  `owner` - the owner class, must not be an interface
  `name` - the method name
  `type` - the method type
Returns:
  this builder
Throws:
  `IllegalArgumentException` - if `owner` represents a primitive type
See Also:
  - `Opcode.INVOKESPECIAL`
  - `invoke(Opcode, ClassDesc, String, MethodTypeDesc, boolean)`
  - `InvokeInstruction`

### invokespecial

default CodeBuilder invokespecial(ClassDesc owner, String name, MethodTypeDesc type, boolean isInterface)
Generates an instruction to invoke an instance method; direct invocation of instance initialization methods and methods of the current class and its supertypes.

Parameters:
  `owner` - the owner class or interface
  `name` - the method name
  `type` - the method type
  `isInterface` - whether the owner is an interface
Returns:
  this builder
Throws:
  `IllegalArgumentException` - if `owner` represents a primitive type
See Also:
  - `Opcode.INVOKESPECIAL`
  - `invoke(Opcode, ClassDesc, String, MethodTypeDesc, boolean)`
  - `InvokeInstruction`

### invokestatic

default CodeBuilder invokestatic(InterfaceMethodRefEntry ref)
Generates an instruction to invoke a class (static) method of an interface.

Parameters:
  `ref` - the interface method reference
Returns:
  this builder
See Also:
  - `Opcode.INVOKESTATIC`
  - `invoke(Opcode, MemberRefEntry)`
  - `InvokeInstruction`

### invokestatic

default CodeBuilder invokestatic(MethodRefEntry ref)
Generates an instruction to invoke a class (static) method of a class.

Parameters:
  `ref` - the method reference
Returns:
  this builder
See Also:
  - `Opcode.INVOKESTATIC`
  - `invoke(Opcode, MemberRefEntry)`
  - `InvokeInstruction`

### invokestatic

default CodeBuilder invokestatic(ClassDesc owner, String name, MethodTypeDesc type)
Generates an instruction to invoke a class (static) method of a class.

Parameters:
  `owner` - the owner class, must not be an interface
  `name` - the method name
  `type` - the method type
Returns:
  this builder
Throws:
  `IllegalArgumentException` - if `owner` represents a primitive type
See Also:
  - `Opcode.INVOKESTATIC`
  - `invoke(Opcode, ClassDesc, String, MethodTypeDesc, boolean)`
  - `InvokeInstruction`

### invokestatic

default CodeBuilder invokestatic(ClassDesc owner, String name, MethodTypeDesc type, boolean isInterface)
Generates an instruction to invoke a class (static) method.

Parameters:
  `owner` - the owner class or interface
  `name` - the method name
  `type` - the method type
  `isInterface` - whether the owner is an interface
Returns:
  this builder
Throws:
  `IllegalArgumentException` - if `owner` represents a primitive type
See Also:
  - `Opcode.INVOKESTATIC`
  - `invoke(Opcode, ClassDesc, String, MethodTypeDesc, boolean)`
  - `InvokeInstruction`

### invokevirtual

default CodeBuilder invokevirtual(MethodRefEntry ref)
Generates an instruction to invoke an instance method; dispatch based on class.

Parameters:
  `ref` - the method reference
Returns:
  this builder
See Also:
  - `Opcode.INVOKEVIRTUAL`
  - `invoke(Opcode, MemberRefEntry)`
  - `InvokeInstruction`

### invokevirtual

default CodeBuilder invokevirtual(ClassDesc owner, String name, MethodTypeDesc type)
Generates an instruction to invoke an instance method; dispatch based on class.

Parameters:
  `owner` - the owner class, must not be an interface
  `name` - the method name
  `type` - the method type
Returns:
  this builder
Throws:
  `IllegalArgumentException` - if `owner` represents a primitive type
See Also:
  - `Opcode.INVOKEVIRTUAL`
  - `invoke(Opcode, ClassDesc, String, MethodTypeDesc, boolean)`
  - `InvokeInstruction`

### ior

default CodeBuilder ior()
Generates an instruction to calculate bitwise OR of `ints`, also used for `boolean` OR.

Returns:
  this builder
See Also:
  - `Opcode.IOR`
  - `OperatorInstruction`

### irem

default CodeBuilder irem()
Generates an instruction to calculate `ints` remainder.

Returns:
  this builder
See Also:
  - `Opcode.IREM`
  - `OperatorInstruction`

### ireturn

default CodeBuilder ireturn()
Generates an instruction to return an `int` from this method.

Returns:
  this builder
See Also:
  - `Opcode.IRETURN`
  - `return_(TypeKind)`
  - `ReturnInstruction`

### ishl

default CodeBuilder ishl()
Generates an instruction to shift an `int` left.

Returns:
  this builder
See Also:
  - `Opcode.ISHL`
  - `OperatorInstruction`

### ishr

default CodeBuilder ishr()
Generates an instruction to shift an `int` right. This carries the sign bit to the vacated most significant bits, as opposed to `iushr()` that fills vacated most significant bits with `0`.

Returns:
  this builder
See Also:
  - `Opcode.ISHR`
  - `OperatorInstruction`

### istore

default CodeBuilder istore(int slot)
Generates an instruction to store an `int` into a local variable.

This may also generate `istore_<N>` and `wide istore` instructions.

Parameters:
  `slot` - the local variable slot
Returns:
  this builder
Throws:
  `IllegalArgumentException` - if `slot` is not `u2`
See Also:
  - `Opcode.ISTORE`
  - `storeLocal(TypeKind, int)`
  - `StoreInstruction`

### isub

default CodeBuilder isub()
Generates an instruction to subtract `ints`.

Returns:
  this builder
See Also:
  - `Opcode.ISUB`
  - `OperatorInstruction`

### iushr

default CodeBuilder iushr()
Generates an instruction to logical shift an `int` right. This fills vacated most significant bits with `0`, as opposed to `ishr()` that carries the sign bit to the vacated most significant bits.

Returns:
  this builder
See Also:
  - `Opcode.IUSHR`
  - `OperatorInstruction`

### ixor

default CodeBuilder ixor()
Generates an instruction to calculate bitwise XOR of `ints`. This can also be used for `boolean` XOR.

Returns:
  this builder
See Also:
  - `Opcode.IXOR`
  - `OperatorInstruction`

### lookupswitch

default CodeBuilder lookupswitch(Label defaultTarget, List<SwitchCase> cases)
Generates an instruction to access a jump table by key match and jump.

Parameters:
  `defaultTarget` - the default jump target
  `cases` - the switch cases
Returns:
  this builder
See Also:
  - `Opcode.LOOKUPSWITCH`
  - `LookupSwitchInstruction`

### l2d

default CodeBuilder l2d()
Generates an instruction to convert a `long` into a `double`.

Returns:
  this builder
See Also:
  - `Opcode.L2D`
  - `OperatorInstruction`

### l2f

default CodeBuilder l2f()
Generates an instruction to convert a `long` into a `float`.

Returns:
  this builder
See Also:
  - `Opcode.L2F`
  - `OperatorInstruction`

### l2i

default CodeBuilder l2i()
Generates an instruction to convert a `long` into an `int`.

Returns:
  this builder
See Also:
  - `Opcode.L2I`
  - `OperatorInstruction`

### ladd

default CodeBuilder ladd()
Generates an instruction to add two `longs`.

Returns:
  this builder
See Also:
  - `Opcode.LADD`
  - `OperatorInstruction`

### laload

default CodeBuilder laload()
Generates an instruction to load from a `long` array.

Returns:
  this builder
See Also:
  - `Opcode.LALOAD`
  - `arrayLoad(TypeKind)`
  - `ArrayLoadInstruction`

### land

default CodeBuilder land()
Generates an instruction to calculate bitwise AND of `longs`.

Returns:
  this builder
See Also:
  - `Opcode.LAND`
  - `OperatorInstruction`

### lastore

default CodeBuilder lastore()
Generates an instruction to store into a `long` array.

Returns:
  this builder
See Also:
  - `Opcode.LASTORE`
  - `arrayStore(TypeKind)`
  - `ArrayStoreInstruction`

### lcmp

default CodeBuilder lcmp()
Generates an instruction to compare `longs`.

Returns:
  this builder
See Also:
  - `Opcode.LCMP`
  - `OperatorInstruction`

### lconst_0

default CodeBuilder lconst_0()
Generates an instruction pushing `long` constant 0 onto the operand stack.

Returns:
  this builder
See Also:
  - `Opcode.LCONST_0`
  - `loadConstant(long)`
  - `ConstantInstruction.IntrinsicConstantInstruction`

### lconst_1

default CodeBuilder lconst_1()
Generates an instruction pushing `long` constant 1 onto the operand stack.

Returns:
  this builder
See Also:
  - `Opcode.LCONST_1`
  - `loadConstant(long)`
  - `ConstantInstruction.IntrinsicConstantInstruction`

### ldc

default CodeBuilder ldc(ConstantDesc value)
Generates an instruction pushing an item from the run-time constant pool onto the operand stack.

This may also generate `ldc_w` and `ldc2_w` instructions.

API Note:
  `loadConstant` generates more optimal instructions and should be used for general constants if an `ldc` instruction is not strictly required.
Parameters:
  `value` - the constant value
Returns:
  this builder
See Also:
  - `Opcode.LDC`
  - `loadConstant(ConstantDesc)`
  - `ConstantInstruction.LoadConstantInstruction`

### ldc

default CodeBuilder ldc(LoadableConstantEntry entry)
Generates an instruction pushing an item from the run-time constant pool onto the operand stack.

This may also generate `ldc_w` and `ldc2_w` instructions.

Parameters:
  `entry` - the constant value
Returns:
  this builder
See Also:
  - `Opcode.LDC`
  - `loadConstant(ConstantDesc)`
  - `ConstantInstruction.LoadConstantInstruction`

### ldiv

default CodeBuilder ldiv()
Generates an instruction to divide `longs`.

Returns:
  this builder
See Also:
  - `Opcode.LDIV`
  - `OperatorInstruction`

### lload

default CodeBuilder lload(int slot)
Generates an instruction to load a `long` from a local variable.

This may also generate `lload_<N>` and `wide lload` instructions.

Parameters:
  `slot` - the local variable slot
Returns:
  this builder
Throws:
  `IllegalArgumentException` - if `slot` is not `u2`
See Also:
  - `Opcode.LLOAD`
  - `loadLocal(TypeKind, int)`
  - `LoadInstruction`

### lmul

default CodeBuilder lmul()
Generates an instruction to multiply `longs`.

Returns:
  this builder
See Also:
  - `Opcode.LMUL`
  - `OperatorInstruction`

### lneg

default CodeBuilder lneg()
Generates an instruction to negate a `long`.

Returns:
  this builder
See Also:
  - `Opcode.LNEG`
  - `OperatorInstruction`

### lor

default CodeBuilder lor()
Generates an instruction to calculate bitwise OR of `longs`.

Returns:
  this builder
See Also:
  - `Opcode.LOR`
  - `OperatorInstruction`

### lrem

default CodeBuilder lrem()
Generates an instruction to calculate `longs` remainder.

Returns:
  this builder
See Also:
  - `Opcode.LREM`
  - `OperatorInstruction`

### lreturn

default CodeBuilder lreturn()
Generates an instruction to return a `long` from this method.

Returns:
  this builder
See Also:
  - `Opcode.LRETURN`
  - `return_(TypeKind)`
  - `ReturnInstruction`

### lshl

default CodeBuilder lshl()
Generates an instruction to shift a `long` left.

Returns:
  this builder
See Also:
  - `Opcode.LSHL`
  - `OperatorInstruction`

### lshr

default CodeBuilder lshr()
Generates an instruction to shift a `long` right. This carries the sign bit to the vacated most significant bits, as opposed to `lushr()` that fills vacated most significant bits with `0`.

Returns:
  this builder
See Also:
  - `Opcode.LSHR`
  - `OperatorInstruction`

### lstore

default CodeBuilder lstore(int slot)
Generates an instruction to store a `long` into a local variable.

This may also generate `lstore_<N>` and `wide lstore` instructions.

Parameters:
  `slot` - the local variable slot
Returns:
  this builder
Throws:
  `IllegalArgumentException` - if `slot` is not `u2`
See Also:
  - `Opcode.LSTORE`
  - `storeLocal(TypeKind, int)`
  - `StoreInstruction`

### lsub

default CodeBuilder lsub()
Generates an instruction to subtract `longs`.

Returns:
  this builder
See Also:
  - `Opcode.LSUB`
  - `OperatorInstruction`

### lushr

default CodeBuilder lushr()
Generates an instruction to logical shift a `long` right. This fills vacated most significant bits with `0`, as opposed to `lshr()` that carries the sign bit to the vacated most significant bits.

Returns:
  this builder
See Also:
  - `Opcode.LUSHR`
  - `OperatorInstruction`

### lxor

default CodeBuilder lxor()
Generates an instruction to calculate bitwise XOR of `longs`.

Returns:
  this builder
See Also:
  - `Opcode.LXOR`
  - `OperatorInstruction`

### monitorenter

default CodeBuilder monitorenter()
Generates an instruction to enter monitor for an object.

Returns:
  this builder
See Also:
  - `Opcode.MONITORENTER`
  - `MonitorInstruction`

### monitorexit

default CodeBuilder monitorexit()
Generates an instruction to exit monitor for an object.

Returns:
  this builder
See Also:
  - `Opcode.MONITOREXIT`
  - `MonitorInstruction`

### multianewarray

default CodeBuilder multianewarray(ClassEntry array, int dims)
Generates an instruction to create a new multidimensional array.

Parameters:
  `array` - the array type
  `dims` - the number of dimensions
Returns:
  this builder
Throws:
  `IllegalArgumentException` - if `dims` is out of range
See Also:
  - `Opcode.MULTIANEWARRAY`
  - `NewMultiArrayInstruction`

### multianewarray

default CodeBuilder multianewarray(ClassDesc array, int dims)
Generates an instruction to create a new multidimensional array.

Parameters:
  `array` - the array type
  `dims` - the number of dimensions
Returns:
  this builder
Throws:
  `IllegalArgumentException` - if `array` represents a primitive type or if `dims` is out of range
See Also:
  - `Opcode.MULTIANEWARRAY`
  - `NewMultiArrayInstruction`

### new_

default CodeBuilder new_(ClassEntry clazz)
Generates an instruction to create a new object.

API Note:
  The instruction's name is `new`, which coincides with a reserved keyword of the Java programming language, thus this method is named with an extra `_` suffix instead.
Parameters:
  `clazz` - the new class type
Returns:
  this builder
See Also:
  - `Opcode.NEW`
  - `NewObjectInstruction`

### new_

default CodeBuilder new_(ClassDesc clazz)
Generates an instruction to create a new object.

API Note:
  The instruction's name is `new`, which coincides with a reserved keyword of the Java programming language, thus this method is named with an extra `_` suffix instead.
Parameters:
  `clazz` - the new class type
Returns:
  this builder
Throws:
  `IllegalArgumentException` - if `clazz` represents a primitive type
See Also:
  - `Opcode.NEW`
  - `NewObjectInstruction`

### newarray

default CodeBuilder newarray(TypeKind typeKind)
Generates an instruction to create a new array of a primitive type.

Parameters:
  `typeKind` - the primitive array type
Returns:
  this builder
Throws:
  `IllegalArgumentException` - when the `typeKind` is not a legal primitive array component type
See Also:
  - `Opcode.NEWARRAY`
  - `NewPrimitiveArrayInstruction`

### pop

default CodeBuilder pop()
Generates an instruction to pop the top operand stack value.

Returns:
  this builder
See Also:
  - `Opcode.POP`
  - `StackInstruction`

### pop2

default CodeBuilder pop2()
Generates an instruction to pop the top one or two operand stack values.

Returns:
  this builder
See Also:
  - `Opcode.POP2`
  - `StackInstruction`

### putfield

default CodeBuilder putfield(FieldRefEntry ref)
Generates an instruction to set field in an object.

Parameters:
  `ref` - the field reference
Returns:
  this builder
See Also:
  - `Opcode.PUTFIELD`
  - `fieldAccess(Opcode, FieldRefEntry)`
  - `FieldInstruction`

### putfield

default CodeBuilder putfield(ClassDesc owner, String name, ClassDesc type)
Generates an instruction to set field in an object.

Parameters:
  `owner` - the owner class
  `name` - the field name
  `type` - the field type
Returns:
  this builder
Throws:
  `IllegalArgumentException` - if `owner` represents a primitive type
See Also:
  - `Opcode.PUTFIELD`
  - `fieldAccess(Opcode, ClassDesc, String, ClassDesc)`
  - `FieldInstruction`

### putstatic

default CodeBuilder putstatic(FieldRefEntry ref)
Generates an instruction to set static field in a class.

Parameters:
  `ref` - the field reference
Returns:
  this builder
See Also:
  - `Opcode.PUTSTATIC`
  - `fieldAccess(Opcode, FieldRefEntry)`
  - `FieldInstruction`

### putstatic

default CodeBuilder putstatic(ClassDesc owner, String name, ClassDesc type)
Generates an instruction to set static field in a class.

Parameters:
  `owner` - the owner class or interface
  `name` - the field name
  `type` - the field type
Returns:
  this builder
Throws:
  `IllegalArgumentException` - if `owner` represents a primitive type
See Also:
  - `Opcode.PUTSTATIC`
  - `fieldAccess(Opcode, ClassDesc, String, ClassDesc)`
  - `FieldInstruction`

### return_

default CodeBuilder return_()
Generates an instruction to return `void` from this method.

API Note:
  The instruction's name is `return`, which coincides with a reserved keyword of the Java programming language, thus this method is named with an extra `_` suffix instead.
Returns:
  this builder
See Also:
  - `Opcode.RETURN`
  - `return_(TypeKind)`
  - `ReturnInstruction`

### saload

default CodeBuilder saload()
Generates an instruction to load from a `short` array.

Returns:
  this builder
See Also:
  - `Opcode.SALOAD`
  - `arrayLoad(TypeKind)`
  - `ArrayLoadInstruction`

### sastore

default CodeBuilder sastore()
Generates an instruction to store into a `short` array.

Returns:
  this builder
See Also:
  - `Opcode.SASTORE`
  - `arrayStore(TypeKind)`
  - `ArrayStoreInstruction`

### sipush

default CodeBuilder sipush(int s)
Generates an instruction pushing an `int` in the range of `short`, `[-32768, 32767]`, onto the operand stack.

Parameters:
  `s` - the int in the range of short
Returns:
  this builder
Throws:
  `IllegalArgumentException` - if `s` is out of range of short
See Also:
  - `Opcode.SIPUSH`
  - `loadConstant(int)`
  - `ConstantInstruction.ArgumentConstantInstruction`

### swap

default CodeBuilder swap()
Generates an instruction to swap the top two operand stack values.

Returns:
  this builder
See Also:
  - `Opcode.SWAP`
  - `StackInstruction`

### tableswitch

default CodeBuilder tableswitch(int low, int high, Label defaultTarget, List<SwitchCase> cases)
Generates an instruction to access a jump table by index and jump.

Parameters:
  `low` - the minimum key, inclusive
  `high` - the maximum key, inclusive
  `defaultTarget` - the default jump target
  `cases` - the switch cases
Returns:
  this builder
See Also:
  - `Opcode.TABLESWITCH`
  - `TableSwitchInstruction`

### tableswitch

default CodeBuilder tableswitch(Label defaultTarget, List<SwitchCase> cases)
Generates an instruction to access a jump table by index and jump. Computes the minimum and maximum keys from the `cases`.

Parameters:
  `defaultTarget` - the default jump target
  `cases` - the switch cases
Returns:
  this builder
See Also:
  - `Opcode.TABLESWITCH`
  - `tableswitch(int, int, Label, List)`
  - `TableSwitchInstruction`