Class Select

All Implemented Interfaces:
Cloneable, InstructionTargeter, StackConsumer, StackProducer, VariableLengthInstruction
Direct Known Subclasses:
LOOKUPSWITCH, TABLESWITCH

public abstract class Select extends BranchInstruction implements VariableLengthInstruction, StackConsumer, StackProducer
Select - Abstract super class for LOOKUPSWITCH and TABLESWITCH instructions.

We use our super's target property as the default target.

See Also:
  • Field Details

    • match

      @Deprecated protected int[] match
      Deprecated.
      (since 6.0) will be made private; do not access directly, use getter/setter
    • indices

      @Deprecated protected int[] indices
      Deprecated.
      (since 6.0) will be made private; do not access directly, use getter/setter
    • targets

      @Deprecated protected InstructionHandle[] targets
      Deprecated.
      (since 6.0) will be made private; do not access directly, use getter/setter
    • fixed_length

      @Deprecated protected int fixed_length
      Deprecated.
      (since 6.0) will be made private; do not access directly, use getter/setter
    • match_length

      @Deprecated protected int match_length
      Deprecated.
      (since 6.0) will be made private; do not access directly, use getter/setter
    • padding

      @Deprecated protected int padding
      Deprecated.
      (since 6.0) will be made private; do not access directly, use getter/setter
  • Constructor Details

    • Select

      Select()
      Empty constructor needed for Instruction.readInstruction. Not to be used otherwise.
    • Select

      Select(short opcode, int[] match, InstructionHandle[] targets, InstructionHandle defaultTarget)
      (Match, target) pairs for switch. `Match' and `targets' must have the same length of course.
      Parameters:
      match - array of matching values
      targets - instruction targets
      defaultTarget - default instruction target
  • Method Details

    • updatePosition

      protected int updatePosition(int offset, int max_offset)
      Since this is a variable length instruction, it may shift the following instructions which then need to update their position. Called by InstructionList.setPositions when setting the position for every instruction. In the presence of variable length instructions `setPositions' performs multiple passes over the instruction list to calculate the correct (byte) positions and offsets by calling this function.
      Overrides:
      updatePosition in class BranchInstruction
      Parameters:
      offset - additional offset caused by preceding (variable length) instructions
      max_offset - the maximum offset that may be caused by these instructions
      Returns:
      additional offset caused by possible change of this instruction's length
    • dump

      public void dump(DataOutputStream out) throws IOException
      Dump instruction as byte code to stream out.
      Overrides:
      dump in class BranchInstruction
      Parameters:
      out - Output stream
      Throws:
      IOException
    • initFromFile

      protected void initFromFile(ByteSequence bytes, boolean wide) throws IOException
      Read needed data (e.g. index) from file.
      Overrides:
      initFromFile in class BranchInstruction
      Parameters:
      bytes - input stream
      wide - wide prefix?
      Throws:
      IOException - may be thrown if the implementation needs to read data from the file
      See Also:
    • toString

      public String toString(boolean verbose)
      Description copied from class: BranchInstruction
      Long output format: <position in byte code> <name of opcode> "["<opcode number>"]" "("<length of instruction>")" "<"<target instruction>">" "@"<branch target offset>
      Overrides:
      toString in class BranchInstruction
      Parameters:
      verbose - long/short format switch
      Returns:
      mnemonic for instruction
    • setTarget

      public void setTarget(int i, InstructionHandle target)
      Set branch target for `i'th case
    • updateTarget

      public void updateTarget(InstructionHandle old_ih, InstructionHandle new_ih)
      Description copied from interface: InstructionTargeter
      Replaces the target of this targeter from this old handle to the new handle.
      Specified by:
      updateTarget in interface InstructionTargeter
      Overrides:
      updateTarget in class BranchInstruction
      Parameters:
      old_ih - old target
      new_ih - new target
    • containsTarget

      public boolean containsTarget(InstructionHandle ih)
      Description copied from interface: InstructionTargeter
      Checks whether this targeter targets the specified instruction handle.
      Specified by:
      containsTarget in interface InstructionTargeter
      Overrides:
      containsTarget in class BranchInstruction
      Returns:
      true, if ih is target of this instruction
    • clone

      protected Object clone() throws CloneNotSupportedException
      Overrides:
      clone in class Object
      Throws:
      CloneNotSupportedException
    • dispose

      void dispose()
      Inform targets that they're not targeted anymore.
      Overrides:
      dispose in class BranchInstruction
    • getMatchs

      public int[] getMatchs()
      Returns:
      array of match indices
    • getIndices

      public int[] getIndices()
      Returns:
      array of match target offsets
    • getTargets

      public InstructionHandle[] getTargets()
      Returns:
      array of match targets
    • getMatch

      final int getMatch(int index)
      Returns:
      match entry
      Since:
      6.0
    • getIndices

      final int getIndices(int index)
      Returns:
      index entry from indices
      Since:
      6.0
    • getTarget

      final InstructionHandle getTarget(int index)
      Returns:
      target entry
      Since:
      6.0
    • getFixed_length

      final int getFixed_length()
      Returns:
      the fixed_length
      Since:
      6.0
    • setFixed_length

      final void setFixed_length(int fixed_length)
      Parameters:
      fixed_length - the fixed_length to set
      Since:
      6.0
    • getMatch_length

      final int getMatch_length()
      Returns:
      the match_length
      Since:
      6.0
    • setMatch_length

      final int setMatch_length(int match_length)
      Parameters:
      match_length - the match_length to set
      Since:
      6.0
    • setMatch

      final void setMatch(int index, int value)
      Parameters:
      index -
      value -
      Since:
      6.0
    • setIndices

      final void setIndices(int[] array)
      Parameters:
      array -
      Since:
      6.0
    • setMatches

      final void setMatches(int[] array)
      Parameters:
      array -
      Since:
      6.0
    • setTargets

      final void setTargets(InstructionHandle[] array)
      Parameters:
      array -
      Since:
      6.0
    • getPadding

      final int getPadding()
      Returns:
      the padding
      Since:
      6.0
    • setIndices

      final int setIndices(int i, int value)
      Since:
      6.0