Class Stack

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

public class Stack extends Object
This class represents an operand stack that contains Value instances.
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    protected int
     
    protected int
     
    protected Value[]
     
  • Constructor Summary

    Constructors
    Constructor
    Description
    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

    Modifier and Type
    Method
    Description
    Pops the top ReferenceValue from the stack.
    void
    Clears the stack.
    void
    copy(Stack other)
    Copies the values of the given Stack into this Stack.
    Pops the top DoubleValue from the stack.
    void
    dup()
    Duplicates the top Category 1 value.
    void
    Duplicates the top Category 1 value, one Category 1 element down the stack.
    void
    Duplicates the top Category 1 value, two Category 1 elements (or one Category 2 element) down the stack.
    void
    Duplicates the top Category 2 value (or alternatively, the equivalent Category 1 stack elements).
    void
    Duplicates the top Category 2 value, one Category 1 element down the stack (or alternatively, the equivalent Category 1 stack values).
    void
    Duplicates the top Category 2 value, one Category 2 stack element down the stack (or alternatively, the equivalent Category 1 stack values).
    boolean
    equals(Object object)
     
    Pops the top FloatValue from the stack.
    boolean
    Generalizes the values of this Stack with the values of the given Stack.
    int
    Returns the actual maximum stack size that was required for all stack operations, accounting for the double space required by Category 2 values.
    getBottom(int index)
    Gets the specified Value from the stack, without disturbing it.
    getTop(int index)
    Gets the specified Value from the stack, without disturbing it.
    int
     
    Pops the top IntegerValue from the stack.
    Pops the top LongValue from the stack.
    Pops the top InstructionOffsetValue from the stack.
    pop()
    Pops the top Value from the stack.
    void
    Pops the top category 1 value from the stack.
    void
    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
    replaceReferences(Value toReplace, Value replacement)
    Replaces all the references to with references to .
    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
    Returns the number of elements currently on the stack, accounting for the double space required by Category 2 values.
    void
    Swaps the top two Category 1 values.
     

    Methods inherited from class java.lang.Object

    clone, finalize, getClass, notify, notifyAll, wait, wait, wait
  • Field Details

    • values

      protected Value[] values
    • currentSize

      protected int currentSize
    • actualMaxSize

      protected int actualMaxSize
  • Constructor Details

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

    • 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.
    • replaceReferences

      public void replaceReferences(Value toReplace, Value replacement)
      Replaces all the references to with references to .
    • equals

      public boolean equals(Object object)
      Overrides:
      equals in class Object
    • hashCode

      public int hashCode()
      Overrides:
      hashCode in class Object
    • toString

      public String toString()
      Overrides:
      toString in class Object