accrue.analysis.interprocvarcontext

## Class SuspendedExecutionStack<T extends AbstractValue<T>>

- java.lang.Object
- - accrue.analysis.interprocvarcontext.SuspendedExecutionStack<T>

- Type Parameters:
    `T` - Type of the abstract dataflow value
  All Implemented Interfaces:
    Ordered<SuspendedExecutionStack<T>>

      public class SuspendedExecutionStack<T extends AbstractValue<T>>
      extends java.lang.Object
      implements Ordered<SuspendedExecutionStack<T>>

  Stack of maps from CFG edge key to abstract dataflow value. This is used to pass values for exceptions and a return value leaving a try block through the associated finally block.

  See Java Language Specification 5.0 section 14.20.2 for more detail.

- - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `static <T extends AbstractValue<T>> SuspendedExecutionStack<T>` | `emptyStack()` This is the only way to create a `SuspendedExecutionStack`
    `boolean` | `equals(java.lang.Object obj)`
    `int` | `hashCode()`
    `boolean` | `isEmpty()` True if there are no elements on the stack
    `boolean` | `leq(SuspendedExecutionStack<T> o)` Is the given object less than or equal to this one
    `java.util.Map<polyglot.visit.FlowGraph.EdgeKey,T>` | `peek()` Get the element on top of the stack
    `java.lang.Object` | `peekSource()` Get the finally block the element on top of the stack was pushed on for
    `SuspendedExecutionStack<T>` | `pop()` Get a new stack with the top element popped off
    `SuspendedExecutionStack<T>` | `push(java.util.Map<polyglot.visit.FlowGraph.EdgeKey,T> v, java.lang.Object source)` Get a new stack by pushing the specified map onto this stack
    `int` | `size()` Get the number of elements on the stack
    `java.lang.String` | `toString()`
    `SuspendedExecutionStack<T>` | `upperBound(SuspendedExecutionStack<T> o)` Compute the upper bound of `this` and `o`
    `SuspendedExecutionStack<T>` | `widen(SuspendedExecutionStack<T> o)` Compute the widening operator on `this` and `o`.

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

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

- - ### Method Detail

    - #### emptyStack

          public static final <T extends AbstractValue<T>> SuspendedExecutionStack<T> emptyStack()

      This is the only way to create a `SuspendedExecutionStack`

    - #### size

          public int size()

      Get the number of elements on the stack
      Returns:
        the number of elements on the stack

    - #### peek

          public java.util.Map<polyglot.visit.FlowGraph.EdgeKey,T> peek()

      Get the element on top of the stack
      Returns:
        element on top of the stack

    - #### peekSource

          public java.lang.Object peekSource()

      Get the finally block the element on top of the stack was pushed on for
      Returns:
        finally block the element on top of the stack was pushed on for

    - #### pop

          public SuspendedExecutionStack<T> pop()

      Get a new stack with the top element popped off
      Returns:
        new stack with the top element popped off

    - #### push

          public SuspendedExecutionStack<T> push(java.util.Map<polyglot.visit.FlowGraph.EdgeKey,T> v,
                                        java.lang.Object source)

      Get a new stack by pushing the specified map onto this stack
      Parameters:
        `v` - new map
        `source` - finally block the map is for (or node we are merging for if we are merging)
      Returns:
        new stack with the new map on top

    - #### leq

          public boolean leq(SuspendedExecutionStack<T> o)

      Description copied from interface: `Ordered`
      Is the given object less than or equal to this one
      Specified by:
        `leq` in interface `Ordered<SuspendedExecutionStack<T extends AbstractValue<T>>>`
      Parameters:
        `o` - object to compare to `this`
      Returns:
        true if this is less than or equal to `o`

    - #### upperBound

          public SuspendedExecutionStack<T> upperBound(SuspendedExecutionStack<T> o)

      Description copied from interface: `Ordered`
      Compute the upper bound of `this` and `o`
      Specified by:
        `upperBound` in interface `Ordered<SuspendedExecutionStack<T extends AbstractValue<T>>>`
      Parameters:
        `o` - object to upper bound with this
      Returns:
        the upper bound of `this` with `o`

    - #### widen

          public SuspendedExecutionStack<T> widen(SuspendedExecutionStack<T> o)

      Description copied from interface: `Ordered`
      Compute the widening operator on `this` and `o`. A widening operator is an upper bound where all ascending chains eventually stabilize.
      Specified by:
        `widen` in interface `Ordered<SuspendedExecutionStack<T extends AbstractValue<T>>>`
      Parameters:
        `o` - object to widen with `this`
      Returns:
        Widened upper bound of `this` and `o`

    - #### isEmpty

          public boolean isEmpty()

      True if there are no elements on the stack
      Returns:
        true if there are no elements on the stack

    - #### toString

          public java.lang.String toString()

      Overrides:
        `toString` in class `java.lang.Object`

    - #### hashCode

          public int hashCode()

      Overrides:
        `hashCode` in class `java.lang.Object`

    - #### equals

          public boolean equals(java.lang.Object obj)

      Overrides:
        `equals` in class `java.lang.Object`