Class ByteCodeForm

    • Constructor Detail

      • ByteCodeForm

        public ByteCodeForm​(int opcode,
                            java.lang.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,
                            java.lang.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 Detail

      • toString

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

        public java.lang.String getName()
      • 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
      • 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).
      • 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.