Class MTableSwitchInsn

  • All Implemented Interfaces:
    Serializable, xyz.cofe.collection.ImTree<ByteCode>, xyz.cofe.collection.ImTreeWalk<ByteCode>, ByteCode, MethodByteCode, MethodWriter

    public class MTableSwitchInsn
    extends MAbstractBC
    implements ByteCode, MethodWriter
    tableswitch

    Operation

    Access jump table by index and jump

    Format

     tableswitch
     <0-3 byte pad>
     defaultbyte1
     defaultbyte2
     defaultbyte3
     defaultbyte4
     lowbyte1
     lowbyte2
     lowbyte3
     lowbyte4
     highbyte1
     highbyte2
     highbyte3
     highbyte4
     jump offsets...
     

    Forms

    tableswitch = 170 (0xaa)

    Operand Stack

     ..., index →
     ...
     

    Description

    A tableswitch is a variable-length instruction. Immediately after the tableswitch opcode, between zero and three bytes must act as padding, such that defaultbyte1 begins at an address that is a multiple of four bytes from the start of the current method (the opcode of its first instruction). Immediately after the padding are bytes constituting three signed 32-bit values: default, low, and high. Immediately following are bytes constituting a series of high - low + 1 signed 32-bit offsets. The value low must be less than or equal to high. The high - low + 1 signed 32-bit offsets are treated as a 0-based jump table. Each of these signed 32-bit values is constructed as (byte1 << 24) | (byte2 << 16) | (byte3 << 8) | byte4.

    The index must be of type int and is popped from the operand stack. If index is less than low or index is greater than high, then a target address is calculated by adding default to the address of the opcode of this tableswitch instruction. Otherwise, the offset at position index - low of the jump table is extracted. The target address is calculated by adding that offset to the address of the opcode of this tableswitch instruction. Execution then continues at the target address.

    The target address that can be calculated from each jump table offset, as well as the one that can be calculated from default, must be the address of an opcode of an instruction within the method that contains this tableswitch instruction.

    Notes

    The alignment required of the 4-byte operands of the tableswitch instruction guarantees 4-byte alignment of those operands if and only if the method that contains the tableswitch starts on a 4-byte boundary.
    See Also:
    Serialized Form
    • Constructor Detail

      • MTableSwitchInsn

        public MTableSwitchInsn()
      • MTableSwitchInsn

        public MTableSwitchInsn​(int min,
                                int max,
                                String dflt,
                                String... labels)
    • Method Detail

      • getMin

        public int getMin()
      • setMin

        public void setMin​(int min)
      • getMax

        public int getMax()
      • setMax

        public void setMax​(int max)
      • getDefaultLabel

        public String getDefaultLabel()
      • setDefaultLabel

        public void setDefaultLabel​(String defaultLabel)
      • getLabels

        public String[] getLabels()
      • setLabels

        public void setLabels​(String[] labels)