org.apache.bcel.verifier.structurals

Class OperandStack

public class OperandStack extends Object

This class implements a stack used for symbolic JVM stack simulation. [It's used an an operand stack substitute.] Elements of this stack are org.apache.bcel.generic.Type objects.
Constructor Summary
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
voidclear()
Clears the stack.
protected Objectclone()
Returns a deep copy of this object; that means, the clone operates on a new stack.
booleanequals(Object o)
Returns true if and only if this OperandStack equals another, meaning equal lengths and equal objects on the stacks.
OperandStackgetClone()
Returns a (typed!)
inthashCode()
voidinitializeObject(UninitializedObjectType u)
Replaces all occurences of u in this OperandStack instance with an "initialized" ObjectType.
booleanisEmpty()
Returns true IFF this OperandStack is empty.
intmaxStack()
Returns the number of stack slots this stack can hold.
voidmerge(OperandStack s)
Merges another stack state into this instance's stack state.
Typepeek()
Returns the element on top of the stack.
Typepeek(int i)
Returns the element that's i elements below the top element; that means, iff i==0 the top element is returned.
Typepop()
Returns the element on top of the stack.
Typepop(int i)
Pops i elements off the stack.
voidpush(Type type)
Pushes a Type object onto the stack.
intsize()
Returns the size of this OperandStack; that means, how many Type objects there are.
intslotsUsed()
Returns the number of stack slots used.
StringtoString()
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

clear

public void clear()
Clears the stack.

clone

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

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.

getClone

public OperandStack getClone()
Returns a (typed!) clone of this.

See Also: clone

hashCode

public int hashCode()

Returns: a hash code value for the object.

initializeObject

public void initializeObject(UninitializedObjectType u)
Replaces all occurences 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 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.