org.apache.bcel.verifier.structurals

## 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 an an operand stack substitute.] Elements of this stack are `Type` objects.

- - ### Constructor Summary

    Constructors
    Constructor and 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 and 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.

    - ### Methods inherited from class java.lang.Object

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

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

Copyright © 2004–2019 The Apache Software Foundation. All rights reserved.