lazy calculation of callee params

git-svn-id: https://wala.svn.sourceforge.net/svnroot/wala/trunk@2761 f5eafffb-2e1d-0410-98e4-8ec43c5233c4
This commit is contained in:
sjfink 2008-04-15 19:56:50 +00:00
parent fc495cf49e
commit 8bdf08b27d
1 changed files with 20 additions and 16 deletions

View File

@ -802,7 +802,7 @@ public class PDG implements NumberedGraph<Statement> {
createSpecialStatements(ir); createSpecialStatements(ir);
} }
createCalleeParams(ref); createCalleeParams();
createReturnStatements(); createReturnStatements();
delegate.addNode(new MethodEntryStatement(node)); delegate.addNode(new MethodEntryStatement(node));
@ -845,22 +845,24 @@ public class PDG implements NumberedGraph<Statement> {
* @param ref the set of heap locations which may be read (transitively) by this node. These are logically parameters * @param ref the set of heap locations which may be read (transitively) by this node. These are logically parameters
* in the SDG. * in the SDG.
*/ */
private void createCalleeParams(Map<CGNode, OrdinalSet<PointerKey>> ref) { private void createCalleeParams() {
ArrayList<Statement> list = new ArrayList<Statement>(); if (paramCalleeStatements == null) {
for (int i = 1; i <= node.getMethod().getNumberOfParameters(); i++) { ArrayList<Statement> list = new ArrayList<Statement>();
ParamCallee s = new ParamCallee(node, i); for (int i = 1; i <= node.getMethod().getNumberOfParameters(); i++) {
delegate.addNode(s); ParamCallee s = new ParamCallee(node, i);
list.add(s); delegate.addNode(s);
} list.add(s);
if (!dOptions.isIgnoreHeap()) {
for (PointerKey p : ref.get(node)) {
Statement h = new HeapStatement.HeapParamCallee(node, p);
delegate.addNode(h);
list.add(h);
} }
if (!dOptions.isIgnoreHeap()) {
for (PointerKey p : ref.get(node)) {
Statement h = new HeapStatement.HeapParamCallee(node, p);
delegate.addNode(h);
list.add(h);
}
}
paramCalleeStatements = new Statement[list.size()];
list.toArray(paramCalleeStatements);
} }
paramCalleeStatements = new Statement[list.size()];
list.toArray(paramCalleeStatements);
} }
/** /**
@ -968,7 +970,9 @@ public class PDG implements NumberedGraph<Statement> {
} }
public Statement[] getParamCalleeStatements() { public Statement[] getParamCalleeStatements() {
populate(); if (paramCalleeStatements == null) {
createCalleeParams();
}
return paramCalleeStatements.clone(); return paramCalleeStatements.clone();
} }