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 within [0, 65535].

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. The value is within [0, 65535].
      Returns:
      the local variable slot with return address
    • of

      Returns a return from subroutine instruction.

      slot must be in the closed range of [0, 255] for ret, or within [0, 65535] 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 within [0, 65535].

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