Class OperandStack

  • All Implemented Interfaces:
    Cloneable

    public class OperandStack
    extends Object
    implements Cloneable
    This class implements a stack used for symbolic JVM stack simulation. [It's used an an operand stack substitute.] Elements of this stack are Type objects.
    • Constructor Summary

      Constructors 
      Constructor Description
      OperandStack​(int maxStack)
      Creates an empty stack with a maximum of maxStack slots.
      OperandStack​(int maxStack, ObjectType obj)
      Creates an otherwise empty stack with a maximum of maxStack slots and the ObjectType 'obj' at the top.
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      void clear()
      Clears the stack.
      Object clone()
      Returns a deep copy of this object; that means, the clone operates on a new stack.
      boolean equals​(Object o)
      Returns true if and only if this OperandStack equals another, meaning equal lengths and equal objects on the stacks.
      OperandStack getClone()
      Returns a (typed!) clone of this.
      int hashCode()  
      void initializeObject​(UninitializedObjectType u)
      Replaces all occurences of u in this OperandStack instance with an "initialized" ObjectType.
      boolean isEmpty()
      Returns true IFF this OperandStack is empty.
      int maxStack()
      Returns the number of stack slots this stack can hold.
      void merge​(OperandStack s)
      Merges another stack state into this instance's stack state.
      Type peek()
      Returns the element on top of the stack.
      Type peek​(int i)
      Returns the element that's i elements below the top element; that means, iff i==0 the top element is returned.
      Type pop()
      Returns the element on top of the stack.
      Type pop​(int i)
      Pops i elements off the stack.
      void push​(Type type)
      Pushes a Type object onto the stack.
      int size()
      Returns the size of this OperandStack; that means, how many Type objects there are.
      int slotsUsed()
      Returns the number of stack slots used.
      String toString()
      Returns a String representation of this OperandStack instance.
    • Constructor Detail

      • OperandStack

        public OperandStack​(int maxStack)
        Creates an empty stack with a maximum of maxStack slots.
      • OperandStack

        public OperandStack​(int maxStack,
                            ObjectType obj)
        Creates an otherwise empty stack with a maximum of maxStack slots and the ObjectType 'obj' at the top.
    • Method Detail

      • clone

        public Object clone()
        Returns a deep copy of this object; that means, the clone operates on a new stack. However, the Type objects on the stack are shared.
        Overrides:
        clone in class Object
      • clear

        public void clear()
        Clears the stack.
      • hashCode

        public int hashCode()
        Overrides:
        hashCode in class Object
        Returns:
        a hash code value for the object.
      • equals

        public boolean equals​(Object o)
        Returns true if and only if this OperandStack equals another, meaning equal lengths and equal objects on the stacks.
        Overrides:
        equals in class Object
      • getClone

        public OperandStack getClone()
        Returns a (typed!) clone of this.
        See Also:
        clone()
      • isEmpty

        public boolean isEmpty()
        Returns true IFF this OperandStack is empty.
      • maxStack

        public int maxStack()
        Returns the number of stack slots this stack can hold.
      • peek

        public Type peek()
        Returns the element on top of the stack. The element is not popped off the stack!
      • peek

        public Type peek​(int i)
        Returns the element that's i elements below the top element; that means, iff i==0 the top element is returned. The element is not popped off the stack!
      • pop

        public Type pop()
        Returns the element on top of the stack. The element is popped off the stack.
      • pop

        public Type pop​(int i)
        Pops i elements off the stack. ALWAYS RETURNS "null"!!!
      • push

        public void push​(Type type)
        Pushes a Type object onto the stack.
      • size

        public int size()
        Returns the size of this OperandStack; that means, how many Type objects there are.
      • slotsUsed

        public int slotsUsed()
        Returns the number of stack slots used.
        See Also:
        maxStack()
      • toString

        public String toString()
        Returns a String representation of this OperandStack instance.
        Overrides:
        toString in class Object
      • merge

        public void merge​(OperandStack s)
        Merges another stack state into this instance's stack state. See the Java Virtual Machine Specification, Second Edition, page 146: 4.9.2 for details.
      • initializeObject

        public void initializeObject​(UninitializedObjectType u)
        Replaces all occurences of u in this OperandStack instance with an "initialized" ObjectType.