# Class OperandStack

java.lang.Object
org.apache.bcel.verifier.structurals.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 as 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

  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!)
  `int`
  `hashCode()`
  `void`
  `initializeObject(UninitializedObjectType u)`
  Replaces all occurrences 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 count)`
  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.

  ### Methods inherited from class Object

  `finalize, getClass, notify, notifyAll, wait, wait, wait`

- ## Constructor Details

  - ### 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 Details

  - ### clear

    public void clear()
    Clears the stack.

  - ### 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`

  - ### 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()`

  - ### hashCode

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

  - ### initializeObject

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

  - ### 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.

  - ### 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.

  - ### 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 count)
    Pops i elements off the stack. Always returns null.
    Returns:
      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`