Interface DiscontinuedInstruction.RetInstruction

All Superinterfaces:
ClassFileElement, CodeElement, DiscontinuedInstruction, Instruction
Enclosing interface:
DiscontinuedInstruction

public static sealed interface DiscontinuedInstruction.RetInstruction extends DiscontinuedInstruction
Models return from subroutine instructions discontinued from the code array of a Code attribute since class file major version 51 (JVMS 4.9.1). Corresponding opcodes have a kind of Opcode.Kind.DISCONTINUED_RET. Delivered as a CodeElement when traversing the elements of a CodeModel.

A return from subroutine instruction is composite:

RetInstruction(int slot)
where slot must be u2.

astore series of instructions store a returnAddress value to a local variable slot, making the slot usable by a return from subroutine instruction.

API Note:
Return from subroutine instructions are discontinued to enforce verification by type checking (JVMS 4.10.1) using the StackMapTable attribute.
See Java Virtual Machine Specification:
6.5.ret ret
Since:
24
See Also:
  • Method Details

    • slot

      int slot()
      Returns the local variable slot with return address. It is a u2 value.
      Returns:
      the local variable slot with return address
    • of

      Returns a return from subroutine instruction.

      slot must be u1 for ret, or u2 for wide ret.

      API Note:
      The explicit op argument allows creating wide ret instructions with slot in the range of regular ret instructions.
      Parameters:
      op - the opcode for the specific type of return from subroutine instruction, which must be of kind Opcode.Kind.DISCONTINUED_RET
      slot - the local variable slot to load return address from
      Returns:
      a return from subroutine instruction
      Throws:
      IllegalArgumentException - if the opcode kind is not Opcode.Kind.DISCONTINUED_RET or if slot is out of range
    • of

      Returns a return from subroutine instruction.

      slot must be u2.

      Parameters:
      slot - the local variable slot to load return address from
      Returns:
      a return from subroutine instruction
      Throws:
      IllegalArgumentException - if slot is not u2