# 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:
  - `Opcode.Kind.DISCONTINUED_RET`
  - `StackMapTableAttribute`

## Nested Class Summary

### Nested classes/interfaces declared in interface DiscontinuedInstruction

`DiscontinuedInstruction.JsrInstruction, DiscontinuedInstruction.RetInstruction`
Modifier and Type
Interface
Description
`static interface`
`DiscontinuedInstruction.JsrInstruction`
Models jump subroutine instructions discontinued from the `code` array of a `Code` attribute since class file major version 51 (JVMS §4.9.1).
`static interface`
`DiscontinuedInstruction.RetInstruction`
Models return from subroutine instructions discontinued from the `code` array of a `Code` attribute since class file major version 51 (JVMS §4.9.1).

## Method Summary

Modifier and Type
Method
Description
`static DiscontinuedInstruction.RetInstruction`
`of(int slot)`
Returns a return from subroutine instruction.
`static DiscontinuedInstruction.RetInstruction`
`of(Opcode op, int slot)`
Returns a return from subroutine instruction.
`int`
`slot()`
Returns the local variable slot with return address.

### Methods declared in interface Instruction

`opcode, sizeInBytes`
Modifier and Type
Method
Description
`Opcode`
`opcode()`
Returns the operation of this instruction.
`int`
`sizeInBytes()`
Returns the size in bytes of this instruction.

## 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

static DiscontinuedInstruction.RetInstruction of(Opcode op, int slot)
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

static DiscontinuedInstruction.RetInstruction of(int slot)
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`