Class VariableInstructionForm

java.lang.Object
org.apache.commons.compress.harmony.unpack200.bytecode.forms.ByteCodeForm
org.apache.commons.compress.harmony.unpack200.bytecode.forms.VariableInstructionForm
Direct Known Subclasses:
SwitchForm, WideForm

public abstract class VariableInstructionForm extends ByteCodeForm
This abstract class implements the common code for instructions which have variable lengths. This is currently the *switch instructions and some wide (_w) instructions.
  • Constructor Details

  • Method Details

    • setRewrite2Bytes

      public void setRewrite2Bytes(int operand, int absPosition, int[] rewrite)
      This method writes operand directly into the rewrite array at index position specified.
      Parameters:
      operand - value to write
      absPosition - position in array to write. Note that this is absolute position in the array, so one can overwrite the bytecode if one isn't careful.
      rewrite - array to write into
    • setRewrite4Bytes

      public void setRewrite4Bytes(int operand, int absPosition, int[] rewrite)
      This method writes operand directly into the rewrite array at index position specified.
      Parameters:
      operand - value to write
      absPosition - position in array to write. Note that this is absolute position in the array, so one can overwrite the bytecode if one isn't careful.
      rewrite - array to write into
    • setRewrite4Bytes

      public void setRewrite4Bytes(int operand, int[] rewrite)
      Given an int operand, set the rewrite bytes for the next available operand position and the three immediately following it to a highest-byte, mid-high, mid-low, low-byte encoding of the operand. Note that unlike the ByteCode setOperand* operations, this starts with an actual bytecode rewrite array (rather than a ByteCodeForm prototype rewrite array). Also, this method overwrites -1 values in the rewrite array - so if you start with an array that looks like: {100, -1, -1, -1, -1, 200, -1, -1, -1, -1} then calling setRewrite4Bytes(0, rewrite) the first time will convert it to: {100, 0, 0, 0, 0, 200, -1, -1, -1, -1} Calling setRewrite4Bytes(0, rewrite) a second time will convert it to: {100, 0, 0, 0, 0, 200, 0, 0, 0, 0}
      Parameters:
      operand - int to set the rewrite bytes to
      rewrite - int[] bytes to rewrite