Package serp.bytecode

Class ConvertInstruction

  • All Implemented Interfaces:
    BCEntity, VisitAcceptor

    public class ConvertInstruction
    extends TypedInstruction
    A conversion opcode such as i2l, f2i, etc. Changing the types of the instruction will automatically update the underlying opcode. Converting from one type to the same type will result in a nop.
    • Field Detail

      • _mappings

        private static final java.lang.Class[][] _mappings
      • _fromMappings

        private static final java.lang.Class[][] _fromMappings
      • _toType

        java.lang.String _toType
      • _fromType

        java.lang.String _fromType
    • Constructor Detail

      • ConvertInstruction

        ConvertInstruction​(Code owner)
      • ConvertInstruction

        ConvertInstruction​(Code owner,
                           int opcode)
    • Method Detail

      • getLogicalStackChange

        public int getLogicalStackChange()
        Description copied from class: Instruction
        Return the logical number of stack positions changed by this instruction. In other words, ignore weirdness with longs and doubles taking two stack positions.
        Overrides:
        getLogicalStackChange in class Instruction
      • getStackChange

        public int getStackChange()
        Description copied from class: Instruction
        Return the number of stack positions this instruction pushes or pops during its execution.
        Overrides:
        getStackChange in class Instruction
        Returns:
        0 if the stack is not affected by this instruction, a positive number if it pushes onto the stack, and a negative number if it pops from the stack
      • getTypeName

        public java.lang.String getTypeName()
        Description copied from class: TypedInstruction
        Return the type name for this instruction. If the type has not been set, this method will return null.
        Specified by:
        getTypeName in class TypedInstruction
      • setType

        public TypedInstruction setType​(java.lang.String type)
        Description copied from class: TypedInstruction
        Set the type of this instruction. Types that have no direct support will be converted accordingly.
        Specified by:
        setType in class TypedInstruction
        Returns:
        this instruction, for method chaining
      • getFromTypeName

        public java.lang.String getFromTypeName()
        Return the name of the type being converted from. If neither type has been set, this method will return null.
      • getFromType

        public java.lang.Class getFromType()
        Return the Class of the type being converted from. If neither type has been set, this method will return null.
      • getFromTypeBC

        public BCClass getFromTypeBC()
        Return the bytecode of the type being converted from. If neither type has been set, this method will return null.
      • setFromType

        public ConvertInstruction setFromType​(java.lang.String type)
        Set the type being converted from. Types that have no direct support will be converted accordingly.
        Returns:
        this instruction, for method chaining
      • setFromType

        public ConvertInstruction setFromType​(java.lang.Class type)
        Set the type being converted from. Types that have no direct support will be converted accordingly.
        Returns:
        this instruction, for method chaining
      • setFromType

        public ConvertInstruction setFromType​(BCClass type)
        Set the type being converted from. Types that have no direct support will be converted accordingly.
        Returns:
        this instruction, for method chaining
      • equalsInstruction

        public boolean equalsInstruction​(Instruction other)
        ConvertInstructions are equal if the types they convert between are either equal or unset.
        Overrides:
        equalsInstruction in class Instruction
      • acceptVisit

        public void acceptVisit​(BCVisitor visit)
        Description copied from interface: VisitAcceptor
        Accept a visit from a BCVisitor, calling the appropriate methods to notify the visitor that it has entered this entity, and to provide it with the proper callbacks for each sub-entity owned by this one.
        Specified by:
        acceptVisit in interface VisitAcceptor
        Overrides:
        acceptVisit in class Instruction