soot.toolkits.scalar
Class AbstractFlowAnalysis<N,A>

java.lang.Object
  extended by soot.toolkits.scalar.AbstractFlowAnalysis<N,A>
Type Parameters:
N - node type of the directed graph
A - abstraction type
Direct Known Subclasses:
BranchedFlowAnalysis, FlowAnalysis

public abstract class AbstractFlowAnalysis<N,A>
extends Object

An abstract class providing a metaframework for carrying out dataflow analysis. This class provides common methods and fields required by the BranchedFlowAnalysis and FlowAnalysis abstract classes.


Field Summary
protected  Map<Stmt,A> filterUnitToBeforeFlow
          Filtered: Maps graph nodes to IN sets.
protected  DirectedGraph<N> graph
          The graph being analysed.
protected  Map<N,A> unitToBeforeFlow
          Maps graph nodes to IN sets.
 
Constructor Summary
AbstractFlowAnalysis(DirectedGraph<N> graph)
          Constructs a flow analysis on the given DirectedGraph.
 
Method Summary
protected abstract  void copy(A source, A dest)
          Creates a copy of the source flow object in dest.
protected abstract  void doAnalysis()
          Carries out the actual flow analysis.
protected abstract  A entryInitialFlow()
          Returns the initial flow value for entry/exit graph nodes.
 A getFlowBefore(N s)
          Accessor function returning value of IN set for s.
protected abstract  boolean isForward()
          Returns true if this analysis is forwards.
protected abstract  void merge(A in1, A in2, A out)
          Compute the merge of the in1 and in2 sets, putting the result into out.
protected  void merge(N succNode, A in1, A in2, A out)
          Merges in1 and in2 into out, just before node succNode.
protected  void mergeInto(N succNode, A inout, A in)
          Merges in into inout, just before node succNode.
protected abstract  A newInitialFlow()
          Returns the flow object corresponding to the initial values for each graph node.
protected  boolean treatTrapHandlersAsEntries()
          Determines whether entryInitialFlow() is applied to trap handlers.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

unitToBeforeFlow

protected Map<N,A> unitToBeforeFlow
Maps graph nodes to IN sets.


filterUnitToBeforeFlow

protected Map<Stmt,A> filterUnitToBeforeFlow
Filtered: Maps graph nodes to IN sets.


graph

protected DirectedGraph<N> graph
The graph being analysed.

Constructor Detail

AbstractFlowAnalysis

public AbstractFlowAnalysis(DirectedGraph<N> graph)
Constructs a flow analysis on the given DirectedGraph.

Method Detail

newInitialFlow

protected abstract A newInitialFlow()
Returns the flow object corresponding to the initial values for each graph node.


entryInitialFlow

protected abstract A entryInitialFlow()
Returns the initial flow value for entry/exit graph nodes.


treatTrapHandlersAsEntries

protected boolean treatTrapHandlersAsEntries()
Determines whether entryInitialFlow() is applied to trap handlers.


isForward

protected abstract boolean isForward()
Returns true if this analysis is forwards.


merge

protected abstract void merge(A in1,
                              A in2,
                              A out)
Compute the merge of the in1 and in2 sets, putting the result into out. The behavior of this function depends on the implementation ( it may be necessary to check whether in1 and in2 are equal or aliased ). Used by the doAnalysis method.


merge

protected void merge(N succNode,
                     A in1,
                     A in2,
                     A out)
Merges in1 and in2 into out, just before node succNode. By default, this method just calls merge(A,A,A), ignoring the node.


copy

protected abstract void copy(A source,
                             A dest)
Creates a copy of the source flow object in dest.


doAnalysis

protected abstract void doAnalysis()
Carries out the actual flow analysis. Typically called from a concrete FlowAnalysis's constructor.


getFlowBefore

public A getFlowBefore(N s)
Accessor function returning value of IN set for s.


mergeInto

protected void mergeInto(N succNode,
                         A inout,
                         A in)
Merges in into inout, just before node succNode.