Remove trailing whitespace; no functional change
This commit is contained in:
parent
b761e3871b
commit
57198a22f3
|
@ -52,7 +52,7 @@ import com.ibm.wala.util.ref.ReferenceCleanser;
|
|||
* <li>it stores summary edges at each callee instead of at each call site.
|
||||
* </ul>
|
||||
* <p>
|
||||
*
|
||||
*
|
||||
* @param <T> type of node in the supergraph
|
||||
* @param <P> type of a procedure (like a box in an RSM)
|
||||
* @param <F> type of factoids propagated when solving this problem
|
||||
|
@ -111,7 +111,7 @@ public class TabulationSolver<T, P, F> {
|
|||
|
||||
/**
|
||||
* A map from Object (entry node in supergraph) -> LocalPathEdges.
|
||||
*
|
||||
*
|
||||
* Logically, this represents a set of edges (s_p,d_i) -> (n, d_j). The data structure is chosen to attempt to save space over
|
||||
* representing each edge explicitly.
|
||||
*/
|
||||
|
@ -119,7 +119,7 @@ public class TabulationSolver<T, P, F> {
|
|||
|
||||
/**
|
||||
* A map from Object (entry node in supergraph) -> CallFlowEdges.
|
||||
*
|
||||
*
|
||||
* Logically, this represents a set of edges (c,d_i) -> (s_p, d_j). The data structure is chosen to attempt to save space over
|
||||
* representing each edge explicitly.
|
||||
*/
|
||||
|
@ -127,7 +127,7 @@ public class TabulationSolver<T, P, F> {
|
|||
|
||||
/**
|
||||
* A map from Object (procedure) -> LocalSummaryEdges.
|
||||
*
|
||||
*
|
||||
*/
|
||||
final protected Map<P, LocalSummaryEdges> summaryEdges = HashMapFactory.make();
|
||||
|
||||
|
@ -196,7 +196,7 @@ public class TabulationSolver<T, P, F> {
|
|||
|
||||
/**
|
||||
* Solve the dataflow problem.
|
||||
*
|
||||
*
|
||||
* @return a representation of the result
|
||||
*/
|
||||
public TabulationResult<T, P, F> solve() throws CancelException {
|
||||
|
@ -238,7 +238,7 @@ public class TabulationSolver<T, P, F> {
|
|||
|
||||
/**
|
||||
* See POPL 95 paper for this algorithm, Figure 3
|
||||
*
|
||||
*
|
||||
* @throws CancelException
|
||||
*/
|
||||
private void forwardTabulateSLRPs() throws CancelException {
|
||||
|
@ -293,7 +293,7 @@ public class TabulationSolver<T, P, F> {
|
|||
/**
|
||||
* For some reason (either a bug in our code that defeats soft references, or a bad policy in the GC), leaving soft reference
|
||||
* caches to clear themselves out doesn't work. Help it out.
|
||||
*
|
||||
*
|
||||
* It's unfortunate that this method exits.
|
||||
*/
|
||||
protected void tendToSoftCaches() {
|
||||
|
@ -305,7 +305,7 @@ public class TabulationSolver<T, P, F> {
|
|||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*
|
||||
*/
|
||||
protected final void performVerboseAction() {
|
||||
verboseCounter++;
|
||||
|
@ -323,7 +323,7 @@ public class TabulationSolver<T, P, F> {
|
|||
|
||||
/**
|
||||
* Handle lines [33-37] of the algorithm
|
||||
*
|
||||
*
|
||||
* @param edge
|
||||
*/
|
||||
private void processNormal(final PathEdge<T> edge) {
|
||||
|
@ -355,7 +355,7 @@ public class TabulationSolver<T, P, F> {
|
|||
|
||||
/**
|
||||
* Handle lines [21 - 32] of the algorithm, propagating information from an exit node.
|
||||
*
|
||||
*
|
||||
* Note that we've changed the way we record summary edges. Summary edges are now associated with a callee (s_p,exit), where the
|
||||
* original algorithm used a call, return pair in the caller.
|
||||
*/
|
||||
|
@ -392,9 +392,9 @@ public class TabulationSolver<T, P, F> {
|
|||
|
||||
/**
|
||||
* Propagate information for an "exit" edge to the appropriate return sites
|
||||
*
|
||||
*
|
||||
* [23] for each d5 s.t. <s_p,d2> -> <returnSite(c),d5> ..
|
||||
*
|
||||
*
|
||||
* @param edge the edge being processed
|
||||
* @param succ numbers of the nodes that are successors of edge.n (the return block in the callee) in the call graph.
|
||||
* @param c a call site of edge.s_p
|
||||
|
@ -447,9 +447,9 @@ public class TabulationSolver<T, P, F> {
|
|||
|
||||
/**
|
||||
* Propagate information for an "exit" edge to a caller return site
|
||||
*
|
||||
*
|
||||
* [23] for each d5 s.t. <s_p,d2> -> <returnSite(c),d5> ..
|
||||
*
|
||||
*
|
||||
* @param edge the edge being processed
|
||||
* @param c a call site of edge.s_p
|
||||
* @param D4 set of d1 s.t. <c, d1> -> <edge.s_p, edge.d2> was recorded as call flow
|
||||
|
@ -471,7 +471,7 @@ public class TabulationSolver<T, P, F> {
|
|||
|
||||
/**
|
||||
* Propagate information to a particular return site.
|
||||
*
|
||||
*
|
||||
* @param c the corresponding call site
|
||||
* @param entries entry nodes in the caller
|
||||
* @param retSite the return site
|
||||
|
@ -615,7 +615,7 @@ public class TabulationSolver<T, P, F> {
|
|||
|
||||
/**
|
||||
* handle a particular callee for some call node.
|
||||
*
|
||||
*
|
||||
* @param edge the path edge being processed
|
||||
* @param callNodeNum the number of the call node in the supergraph
|
||||
* @param allReturnSites a set collecting return sites for the call. This set is mutated with the return sites for this callee.
|
||||
|
@ -709,7 +709,7 @@ public class TabulationSolver<T, P, F> {
|
|||
@Override
|
||||
public void act(int d5) {
|
||||
if (propagate(edge.entry, edge.d1, returnSite, d5)) {
|
||||
newReturnExplodedEdge(exit, d2, returnSite, d5);
|
||||
newReturnExplodedEdge(exit, d2, returnSite, d5);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
@ -730,7 +730,7 @@ public class TabulationSolver<T, P, F> {
|
|||
|
||||
/**
|
||||
* invoked when a callee is processed with a particular entry fact
|
||||
*
|
||||
*
|
||||
* @param callNode
|
||||
* @param callee
|
||||
* @param d1 the entry fact
|
||||
|
@ -741,7 +741,7 @@ public class TabulationSolver<T, P, F> {
|
|||
|
||||
/**
|
||||
* @return f(call_d, exit_d);
|
||||
*
|
||||
*
|
||||
*/
|
||||
protected IntSet computeBinaryFlow(int call_d, int exit_d, IBinaryReturnFlowFunction f) {
|
||||
if (DEBUG_LEVEL > 0) {
|
||||
|
@ -753,7 +753,7 @@ public class TabulationSolver<T, P, F> {
|
|||
|
||||
/**
|
||||
* @return f(d1)
|
||||
*
|
||||
*
|
||||
*/
|
||||
protected IntSet computeFlow(int d1, IUnaryFlowFunction f) {
|
||||
if (DEBUG_LEVEL > 0) {
|
||||
|
@ -791,7 +791,7 @@ public class TabulationSolver<T, P, F> {
|
|||
/**
|
||||
* 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.
|
||||
*
|
||||
*
|
||||
* @param s_p entry block
|
||||
* @param i dataflow fact on entry
|
||||
* @param n reached block
|
||||
|
@ -827,9 +827,9 @@ public class TabulationSolver<T, P, F> {
|
|||
/**
|
||||
* Merging: suppose we're doing propagate <s_p,i> -> <n,j> but we already have path edges <s_p,i> -> <n, x>, <s_p,i> -> <n,y>, and
|
||||
* <s_p,i> -><n, z>.
|
||||
*
|
||||
*
|
||||
* let \alpha be the merge function. then instead of <s_p,i> -> <n,j>, we propagate <s_p,i> -> <n, \alpha(j,x,y,z) > !!!
|
||||
*
|
||||
*
|
||||
* return -1 if no fact should be propagated
|
||||
*/
|
||||
private int merge(T s_p, int i, T n, int j) {
|
||||
|
@ -897,7 +897,7 @@ public class TabulationSolver<T, P, F> {
|
|||
|
||||
/**
|
||||
* get the bitvector of facts that hold at the entry to a given node
|
||||
*
|
||||
*
|
||||
* @return IntSet representing the bitvector
|
||||
*/
|
||||
public IntSet getResult(T node) {
|
||||
|
@ -912,15 +912,15 @@ public class TabulationSolver<T, P, F> {
|
|||
for (PathEdge<T> seed : pSeeds) {
|
||||
allEntries.add(seed.entry);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (T entry : allEntries){
|
||||
LocalPathEdges lp = pathEdges.get(entry);
|
||||
if (lp != null) {
|
||||
result.addAll(lp.getReachable(n));
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
@ -928,7 +928,7 @@ public class TabulationSolver<T, P, F> {
|
|||
|
||||
/**
|
||||
* get the bitvector of facts that hold at the entry to a given node
|
||||
*
|
||||
*
|
||||
* @return IntSet representing the bitvector
|
||||
*/
|
||||
@Override
|
||||
|
@ -1079,44 +1079,44 @@ public class TabulationSolver<T, P, F> {
|
|||
protected PathEdge<T> getCurSummaryEdge() {
|
||||
return curSummaryEdge;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Indicates that due to a path edge with destination <pred, d1> and a normal flow function application,
|
||||
* Indicates that due to a path edge with destination <pred, d1> and a normal flow function application,
|
||||
* a new path edge with destination <succ, d2> was created. To be overridden in subclasses. We also
|
||||
* use this function to record call-to-return flow.
|
||||
*
|
||||
*
|
||||
* @param pred
|
||||
* @param d1
|
||||
* @param succ
|
||||
* @param d2
|
||||
*/
|
||||
protected void newNormalExplodedEdge(T pred, int d1, T succ, int d2) {
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Indicates that due to a path edge with destination <caller, d1> and application of a call flow function,
|
||||
* Indicates that due to a path edge with destination <caller, d1> and application of a call flow function,
|
||||
* a new path edge with destination <calleeEntry, d2> was created. To be overridden in subclasses.
|
||||
*
|
||||
*
|
||||
* @param caller
|
||||
* @param d1
|
||||
* @param calleeEntry
|
||||
* @param d2
|
||||
*/
|
||||
protected void newCallExplodedEdge(T caller, int d1, T calleeEntry, int d2) {
|
||||
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Indicates that due to a path edge with destination <exit, d1> and application of a return flow function,
|
||||
* Indicates that due to a path edge with destination <exit, d1> and application of a return flow function,
|
||||
* a new path edge with destination <returnSite, d2> was created. To be overridden in subclasses.
|
||||
*
|
||||
*
|
||||
* @param exit
|
||||
* @param d1
|
||||
* @param returnSite
|
||||
* @param d2
|
||||
*/
|
||||
protected void newReturnExplodedEdge(T exit, int d1, T returnSite, int d2) {
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue