proguard.evaluation
Class Stack

java.lang.Object
  extended by proguard.evaluation.Stack
Direct Known Subclasses:
TracedStack

public class Stack
extends java.lang.Object

This class represents an operand stack that contains Value objects.


Field Summary
protected  int actualMaxSize
           
protected  int currentSize
           
protected  Value[] values
           
 
Constructor Summary
Stack(int maxSize)
          Creates a new Stack with a given maximum size, accounting for the double space required by Category 2 values.
Stack(Stack stack)
          Creates a Stack that is a copy of the given Stack.
 
Method Summary
 ReferenceValue apop()
          Pops the top ReferenceValue from the stack.
 void clear()
          Clears the stack.
 void copy(Stack other)
          Copies the values of the given Stack into this Stack.
 DoubleValue dpop()
          Pops the top DoubleValue from the stack.
 void dup_x1()
          Duplicates the top Category 1 value, one Category 1 element down the stack.
 void dup_x2()
          Duplicates the top Category 1 value, two Category 1 elements (or one Category 2 element) down the stack.
 void dup()
          Duplicates the top Category 1 value.
 void dup2_x1()
          Duplicates the top Category 2 value, one Category 1 element down the stack (or alternatively, the equivalent Category 1 stack values).
 void dup2_x2()
          Duplicates the top Category 2 value, one Category 2 stack element down the stack (or alternatively, the equivalent Category 1 stack values).
 void dup2()
          Duplicates the top Category 2 value (or alternatively, the equivalent Category 1 stack elements).
 boolean equals(java.lang.Object object)
           
 FloatValue fpop()
          Pops the top FloatValue from the stack.
 boolean generalize(Stack other)
          Generalizes the values of this Stack with the values of the given Stack.
 int getActualMaxSize()
          Returns the actual maximum stack size that was required for all stack operations, accounting for the double space required by Category 2 values.
 Value getBottom(int index)
          Gets the specified Value from the stack, without disturbing it.
 Value getTop(int index)
          Gets the specified Value from the stack, without disturbing it.
 int hashCode()
           
 IntegerValue ipop()
          Pops the top IntegerValue from the stack.
 LongValue lpop()
          Pops the top LongValue from the stack.
 InstructionOffsetValue opop()
          Pops the top InstructionOffsetValue from the stack.
 Value pop()
          Pops the top Value from the stack.
 void pop1()
          Pops the top category 1 value from the stack.
 void pop2()
          Pops the top category 2 value from the stack (or alternatively, two Category 1 stack elements).
 void push(Value value)
          Pushes the given Value onto the stack.
 void removeTop(int index)
          Removes the specified Value from the stack.
 void reset(int maxSize)
          Resets this Stack, so that it can be reused.
 void setBottom(int index, Value value)
          Sets the specified Value on the stack, without disturbing it.
 void setTop(int index, Value value)
          Sets the specified Value on the stack, without disturbing it.
 int size()
          Returns the number of elements currently on the stack, accounting for the double space required by Category 2 values.
 void swap()
          Swaps the top two Category 1 values.
 java.lang.String toString()
           
 
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
 

Field Detail

values

protected Value[] values

currentSize

protected int currentSize

actualMaxSize

protected int actualMaxSize
Constructor Detail

Stack

public Stack(int maxSize)
Creates a new Stack with a given maximum size, accounting for the double space required by Category 2 values.


Stack

public Stack(Stack stack)
Creates a Stack that is a copy of the given Stack.

Method Detail

getActualMaxSize

public int getActualMaxSize()
Returns the actual maximum stack size that was required for all stack operations, accounting for the double space required by Category 2 values.


reset

public void reset(int maxSize)
Resets this Stack, so that it can be reused.


copy

public void copy(Stack other)
Copies the values of the given Stack into this Stack.


generalize

public boolean generalize(Stack other)
Generalizes the values of this Stack with the values of the given Stack. The stacks must have the same current sizes.

Returns:
whether the generalization has made any difference.

clear

public void clear()
Clears the stack.


size

public int size()
Returns the number of elements currently on the stack, accounting for the double space required by Category 2 values.


getBottom

public Value getBottom(int index)
Gets the specified Value from the stack, without disturbing it.

Parameters:
index - the index of the stack element, counting from the bottom of the stack.
Returns:
the value at the specified position.

setBottom

public void setBottom(int index,
                      Value value)
Sets the specified Value on the stack, without disturbing it.

Parameters:
index - the index of the stack element, counting from the bottom of the stack.
value - the value to set.

getTop

public Value getTop(int index)
Gets the specified Value from the stack, without disturbing it.

Parameters:
index - the index of the stack element, counting from the top of the stack.
Returns:
the value at the specified position.

setTop

public void setTop(int index,
                   Value value)
Sets the specified Value on the stack, without disturbing it.

Parameters:
index - the index of the stack element, counting from the top of the stack.
value - the value to set.

removeTop

public void removeTop(int index)
Removes the specified Value from the stack.

Parameters:
index - the index of the stack element, counting from the top of the stack.

push

public void push(Value value)
Pushes the given Value onto the stack.


pop

public Value pop()
Pops the top Value from the stack.


ipop

public IntegerValue ipop()
Pops the top IntegerValue from the stack.


lpop

public LongValue lpop()
Pops the top LongValue from the stack.


fpop

public FloatValue fpop()
Pops the top FloatValue from the stack.


dpop

public DoubleValue dpop()
Pops the top DoubleValue from the stack.


apop

public ReferenceValue apop()
Pops the top ReferenceValue from the stack.


opop

public InstructionOffsetValue opop()
Pops the top InstructionOffsetValue from the stack.


pop1

public void pop1()
Pops the top category 1 value from the stack.


pop2

public void pop2()
Pops the top category 2 value from the stack (or alternatively, two Category 1 stack elements).


dup

public void dup()
Duplicates the top Category 1 value.


dup_x1

public void dup_x1()
Duplicates the top Category 1 value, one Category 1 element down the stack.


dup_x2

public void dup_x2()
Duplicates the top Category 1 value, two Category 1 elements (or one Category 2 element) down the stack.


dup2

public void dup2()
Duplicates the top Category 2 value (or alternatively, the equivalent Category 1 stack elements).


dup2_x1

public void dup2_x1()
Duplicates the top Category 2 value, one Category 1 element down the stack (or alternatively, the equivalent Category 1 stack values).


dup2_x2

public void dup2_x2()
Duplicates the top Category 2 value, one Category 2 stack element down the stack (or alternatively, the equivalent Category 1 stack values).


swap

public void swap()
Swaps the top two Category 1 values.


equals

public boolean equals(java.lang.Object object)
Overrides:
equals in class java.lang.Object

hashCode

public int hashCode()
Overrides:
hashCode in class java.lang.Object

toString

public java.lang.String toString()
Overrides:
toString in class java.lang.Object