java.lang.Object
org.apache.commons.compress.harmony.unpack200.bytecode.forms.ByteCodeForm
Direct Known Subclasses:
ByteForm, IincForm, LabelForm, LocalForm, NoArgumentForm, ReferenceForm, ShortForm, VariableInstructionForm

public abstract class ByteCodeForm extends Object
  • Field Details

  • Constructor Details

    • ByteCodeForm

      public ByteCodeForm(int opcode, String name)
      Answer a new instance of this class with the specified opcode and name. Assume no rewrite.
      Parameters:
      opcode - int corresponding to the opcode's value
      name - String printable name of the opcode
    • ByteCodeForm

      public ByteCodeForm(int opcode, String name, int[] rewrite)
      Answer a new instance of this class with the specified opcode, name, operandType and rewrite
      Parameters:
      opcode - int corresponding to the opcode's value
      name - String printable name of the opcode
      rewrite - int[] Array of ints. Operand positions (which will later be rewritten in ByteCodes) are indicated by -1.
  • Method Details

    • get

      public static ByteCodeForm get(int opcode)
    • calculateOperandPosition

      protected void calculateOperandPosition()
    • firstOperandIndex

      public int firstOperandIndex()
    • fixUpByteCodeTargets

      public void fixUpByteCodeTargets(ByteCode byteCode, CodeAttribute codeAttribute)
      The ByteCodeForm knows how to fix up a bytecode if it needs to be fixed up because it holds a Label bytecode.
      Parameters:
      byteCode - a ByteCode to be fixed up
      codeAttribute - a CodeAttribute used to determine how the ByteCode should be fixed up.
    • getName

      public String getName()
    • getOpcode

      public int getOpcode()
    • getRewrite

      public int[] getRewrite()
    • getRewriteCopy

      public int[] getRewriteCopy()
    • hasMultipleByteCodes

      public boolean hasMultipleByteCodes()
      This method will answer true if the receiver is a multi-bytecode instruction (such as aload0_putfield_super); otherwise, it will answer false.
      Returns:
      boolean true if multibytecode, false otherwise
    • hasNoOperand

      public boolean hasNoOperand()
    • nestedMustStartClassPool

      public boolean nestedMustStartClassPool()
    • operandLength

      public int operandLength()
    • setByteCodeOperands

      public abstract void setByteCodeOperands(ByteCode byteCode, OperandManager operandManager, int codeLength)
      When passed a byteCode, an OperandTable and a SegmentConstantPool, this method will set the rewrite of the byteCode appropriately.
      Parameters:
      byteCode - ByteCode to be updated (!)
      operandManager - OperandTable from which to draw info
      codeLength - Length of bytes (excluding this bytecode) from the beginning of the method. Used in calculating padding for some variable-length bytecodes (such as lookupswitch, tableswitch).
    • toString

      public String toString()
      Overrides:
      toString in class Object