Class PartiallyBalancedTabulationSolver<T,P,F>

java.lang.Object
com.ibm.wala.dataflow.IFDS.TabulationSolver<T,P,F>
com.ibm.wala.dataflow.IFDS.PartiallyBalancedTabulationSolver<T,P,F>
Type Parameters:
T - type of node in the supergraph
P - type of a procedure (like a box in an RSM)
F - type of factoids propagated when solving this problem
Direct Known Subclasses:
BoundedPartiallyBalancedSolver

public class PartiallyBalancedTabulationSolver<T,P,F> extends TabulationSolver<T,P,F>
Utilities for dealing with tabulation with partially balanced parentheses.
  • Constructor Details

  • Method Details

    • createPartiallyBalancedTabulationSolver

      public static <T, P, F> PartiallyBalancedTabulationSolver<T,P,F> createPartiallyBalancedTabulationSolver(PartiallyBalancedTabulationProblem<T,P,F> p, MonitorUtil.IProgressMonitor monitor)
    • propagate

      protected boolean propagate(T s_p, int i, T n, int j)
      Description copied from class: TabulationSolver
      Propagate the fact <s_p,i> -> <n, j> has arisen as a path edge. Returns <code>true</code> iff the path edge was not previously observed.
      Overrides:
      propagate in class TabulationSolver<T,P,F>
      Parameters:
      s_p - entry block
      i - dataflow fact on entry
      n - reached block
      j - dataflow fact reached
    • addSeed

      public void addSeed(PathEdge<T> seed)
      Description copied from class: TabulationSolver
      Restart tabulation from a particular path edge. Use with care.
      Overrides:
      addSeed in class TabulationSolver<T,P,F>
    • newUnbalancedExplodedReturnEdge

      protected void newUnbalancedExplodedReturnEdge(T s_p, int i, T n, int j)
      A path edge <s_p, i> -> <n, j> was propagated, and <s_p, i> was an unbalanced seed. So, we added a new seed callerSeed (to some return site) in the caller. To be overridden in subclasses.