Class ByteCodeForm

    • Constructor Detail

      • ByteCodeForm

        public ByteCodeForm​(int opcode,
                            java.lang.String name)
        Constructs a new instance with the specified opcode and name. Assume no rewrite.
        Parameters:
        opcode - index corresponding to the opcode's value.
        name - printable name of the opcode.
      • ByteCodeForm

        public ByteCodeForm​(int opcode,
                            java.lang.String name,
                            int[] rewrite)
        Constructs a new instance with the specified opcode, name, operandType and rewrite.
        Parameters:
        opcode - index corresponding to the opcode's value.
        name - String printable name of the opcode.
        rewrite - Operand positions (which will later be rewritten in ByteCodes) are indicated by -1.
    • Method Detail

      • get

        public static ByteCodeForm get​(int opcode)
        Gets a ByteCodeForm.
        Parameters:
        opcode - opcode index.
        Returns:
        the matching ByteCodeForm at the given opcode.
      • 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 java.lang.String getName()
        Gets the name.
        Returns:
        the name.
      • getOpcode

        public int getOpcode()
        Gets the opcode.
        Returns:
        the opcode.
      • getRewrite

        public int[] getRewrite()
        Gets the rewrite array.
        Returns:
        the rewrite array.
      • getRewriteCopy

        public int[] getRewriteCopy()
        Gets a copy of the rewrite array.
        Returns:
        a copy of the rewrite array.
      • 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()
        Tests whether this instance has an operand.
        Returns:
        whether this instance has an operand.
      • operandLength

        public int operandLength()
        Gets the operand length.
        Returns:
        the operand length.
      • setByteCodeOperands

        public abstract void setByteCodeOperands​(ByteCode byteCode,
                                                 OperandManager operandManager,
                                                 int codeLength)
                                          throws Pack200Exception
        Sets the rewrite of the byteCode.
        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).
        Throws:
        Pack200Exception - if a type is not supported or an index not in the range [0, Integer.MAX_VALUE].
      • toString

        public java.lang.String toString()
        Overrides:
        toString in class java.lang.Object