decouple IR caching from AnalysisOptions with a new AnalysisCache object

git-svn-id: https://wala.svn.sourceforge.net/svnroot/wala/trunk@1519 f5eafffb-2e1d-0410-98e4-8ec43c5233c4
This commit is contained in:
sjfink 2007-07-20 15:20:23 +00:00
parent e7d9d74292
commit 7f62dc3c04
8 changed files with 41 additions and 27 deletions

View File

@ -23,6 +23,7 @@ import com.ibm.wala.cast.js.types.JavaScriptTypes;
import com.ibm.wala.classLoader.Module;
import com.ibm.wala.classLoader.SourceFileModule;
import com.ibm.wala.client.impl.AbstractAnalysisEngine;
import com.ibm.wala.ipa.callgraph.AnalysisCache;
import com.ibm.wala.ipa.callgraph.AnalysisOptions;
import com.ibm.wala.ipa.callgraph.AnalysisScope;
import com.ibm.wala.ipa.callgraph.Entrypoint;
@ -85,8 +86,13 @@ public class JavaScriptAnalysisEngine extends AbstractAnalysisEngine {
return new JavaScriptEntryPoints(cha, cha.getLoader(JavaScriptTypes.jsLoader));
}
@Override
public AnalysisCache makeDefaultCache() {
return new AnalysisCache(AstIRFactory.makeDefaultFactory(keepIRs));
}
public AnalysisOptions getDefaultOptions(Iterable<Entrypoint> roots) {
final AnalysisOptions options = new AnalysisOptions(scope, AstIRFactory.makeDefaultFactory(keepIRs), roots);
final AnalysisOptions options = new AnalysisOptions(scope, roots);
options.setUseConstantSpecificKeys(true);

View File

@ -13,6 +13,7 @@ package com.ibm.wala.cast.js.client.impl;
import com.ibm.wala.cast.ipa.callgraph.StandardFunctionTargetSelector;
import com.ibm.wala.cast.js.ipa.callgraph.JSZeroXCFABuilder;
import com.ibm.wala.client.CallGraphBuilderFactory;
import com.ibm.wala.ipa.callgraph.AnalysisCache;
import com.ibm.wala.ipa.callgraph.AnalysisOptions;
import com.ibm.wala.ipa.callgraph.AnalysisScope;
import com.ibm.wala.ipa.callgraph.CallGraphBuilder;
@ -26,14 +27,11 @@ import com.ibm.wala.ipa.cha.IClassHierarchy;
*/
public class ZeroCFABuilderFactory implements CallGraphBuilderFactory {
public CallGraphBuilder make(AnalysisOptions options,
IClassHierarchy cha,
AnalysisScope scope,
boolean keepPointsTo)
{
public CallGraphBuilder make(AnalysisOptions options, AnalysisCache cache, IClassHierarchy cha, AnalysisScope scope,
boolean keepPointsTo) {
com.ibm.wala.ipa.callgraph.impl.Util.addDefaultSelectors(options, cha);
options.setSelector(new StandardFunctionTargetSelector(cha, options.getMethodTargetSelector()));
return new JSZeroXCFABuilder(cha, options, null, null, null, ZeroXInstanceKeys.NONE);
return new JSZeroXCFABuilder(cha, options, cache, null, null, null, ZeroXInstanceKeys.NONE);
}
}

View File

@ -11,6 +11,7 @@
package com.ibm.wala.cast.js.ipa.callgraph;
import com.ibm.wala.cast.ipa.callgraph.AstCFAPointerKeys;
import com.ibm.wala.ipa.callgraph.AnalysisCache;
import com.ibm.wala.ipa.callgraph.AnalysisOptions;
import com.ibm.wala.ipa.cha.IClassHierarchy;
@ -19,8 +20,8 @@ import com.ibm.wala.ipa.cha.IClassHierarchy;
*/
public class JSCFABuilder extends JSSSAPropagationCallGraphBuilder {
public JSCFABuilder(IClassHierarchy cha, AnalysisOptions options) {
super(cha, options, new AstCFAPointerKeys());
public JSCFABuilder(IClassHierarchy cha, AnalysisOptions options, AnalysisCache cache) {
super(cha, options, cache, new AstCFAPointerKeys());
}
}

View File

@ -18,6 +18,7 @@ import com.ibm.wala.cast.js.types.JavaScriptTypes;
import com.ibm.wala.cfg.InducedCFG;
import com.ibm.wala.classLoader.CallSiteReference;
import com.ibm.wala.classLoader.NewSiteReference;
import com.ibm.wala.ipa.callgraph.AnalysisCache;
import com.ibm.wala.ipa.callgraph.AnalysisOptions;
import com.ibm.wala.ipa.callgraph.CGNode;
import com.ibm.wala.ipa.callgraph.impl.Everywhere;
@ -30,18 +31,17 @@ import com.ibm.wala.types.TypeReference;
public class JSCallGraph extends AstCallGraph {
public JSCallGraph(IClassHierarchy cha, AnalysisOptions options) {
super(cha, options);
public JSCallGraph(IClassHierarchy cha, AnalysisOptions options, AnalysisCache cache) {
super(cha, options, cache);
}
public final static MethodReference fakeRoot = MethodReference.findOrCreate(JavaScriptTypes.FakeRoot, FakeRootMethod.name, FakeRootMethod.descr);
public final static MethodReference fakeRoot = MethodReference.findOrCreate(JavaScriptTypes.FakeRoot, FakeRootMethod.name,
FakeRootMethod.descr);
public static class JSFakeRoot extends ScriptFakeRoot {
public JSFakeRoot(IClassHierarchy cha,
AnalysisOptions options)
{
super(fakeRoot, cha.lookupClass(JavaScriptTypes.FakeRoot), cha, options);
public JSFakeRoot(IClassHierarchy cha, AnalysisOptions options, AnalysisCache cache) {
super(fakeRoot, cha.lookupClass(JavaScriptTypes.FakeRoot), cha, options, cache);
}
public InducedCFG makeControlFlowGraph() {
@ -71,6 +71,6 @@ public class JSCallGraph extends AstCallGraph {
}
protected CGNode makeFakeRootNode() {
return findOrCreateNode(new JSFakeRoot(cha, options), Everywhere.EVERYWHERE);
return findOrCreateNode(new JSFakeRoot(cha, options, getAnalysisCache()), Everywhere.EVERYWHERE);
}
}

View File

@ -28,6 +28,7 @@ import com.ibm.wala.fixedpoint.impl.AbstractOperator;
import com.ibm.wala.fixedpoint.impl.UnaryOperator;
import com.ibm.wala.fixpoint.IVariable;
import com.ibm.wala.fixpoint.IntSetVariable;
import com.ibm.wala.ipa.callgraph.AnalysisCache;
import com.ibm.wala.ipa.callgraph.AnalysisOptions;
import com.ibm.wala.ipa.callgraph.CGNode;
import com.ibm.wala.ipa.callgraph.CallGraph;
@ -70,8 +71,8 @@ public class JSSSAPropagationCallGraphBuilder extends AstSSAPropagationCallGraph
public static final boolean DEBUG_TYPE_INFERENCE = false;
protected JSSSAPropagationCallGraphBuilder(IClassHierarchy cha, AnalysisOptions options, PointerKeyFactory pointerKeyFactory) {
super(cha, options, pointerKeyFactory);
protected JSSSAPropagationCallGraphBuilder(IClassHierarchy cha, AnalysisOptions options,AnalysisCache cache, PointerKeyFactory pointerKeyFactory) {
super(cha, options, cache, pointerKeyFactory);
}
protected boolean isConstantRef(SymbolTable symbolTable, int valueNumber) {
@ -98,7 +99,7 @@ public class JSSSAPropagationCallGraphBuilder extends AstSSAPropagationCallGraph
// ///////////////////////////////////////////////////////////////////////////
protected ExplicitCallGraph createEmptyCallGraph(IClassHierarchy cha, AnalysisOptions options) {
return new JSCallGraph(cha, options);
return new JSCallGraph(cha, options, getAnalysisCache());
}
protected TypeInference makeTypeInference(IR ir, IClassHierarchy cha) {

View File

@ -10,6 +10,7 @@
*****************************************************************************/
package com.ibm.wala.cast.js.ipa.callgraph;
import com.ibm.wala.ipa.callgraph.AnalysisCache;
import com.ibm.wala.ipa.callgraph.AnalysisOptions;
import com.ibm.wala.ipa.callgraph.AnalysisScope;
import com.ibm.wala.ipa.callgraph.ContextSelector;
@ -28,9 +29,9 @@ import com.ibm.wala.ipa.cha.IClassHierarchy;
*/
public class JSZeroXCFABuilder extends JSCFABuilder {
public JSZeroXCFABuilder(IClassHierarchy cha, AnalysisOptions options, ContextSelector appContextSelector,
public JSZeroXCFABuilder(IClassHierarchy cha, AnalysisOptions options, AnalysisCache cache, ContextSelector appContextSelector,
SSAContextInterpreter appContextInterpreter, ReflectionSpecification reflect, int instancePolicy) {
super(cha, options);
super(cha, options, cache);
SSAContextInterpreter contextInterpreter = makeDefaultContextInterpreters(appContextInterpreter, options, cha, reflect);
setContextInterpreter(contextInterpreter);
@ -62,7 +63,7 @@ public class JSZeroXCFABuilder extends JSCFABuilder {
* deployment descriptor abstraction
* @return a 0-1-Opt-CFA Call Graph Builder.
*/
public static JSCFABuilder make(AnalysisOptions options, IClassHierarchy cha, ClassLoader cl, AnalysisScope scope,
public static JSCFABuilder make(AnalysisOptions options, AnalysisCache cache, IClassHierarchy cha, ClassLoader cl, AnalysisScope scope,
String[] xmlFiles, byte instancePolicy) {
com.ibm.wala.ipa.callgraph.impl.Util.addDefaultSelectors(options, cha);
@ -70,7 +71,7 @@ public class JSZeroXCFABuilder extends JSCFABuilder {
com.ibm.wala.ipa.callgraph.impl.Util.addBypassLogic(options, scope, cl, xmlFiles[i], cha);
}
return new JSZeroXCFABuilder(cha, options, null, null, options.getReflectionSpec(), instancePolicy);
return new JSZeroXCFABuilder(cha, options, cache, null, null, options.getReflectionSpec(), instancePolicy);
}
/*

View File

@ -25,6 +25,7 @@ import com.ibm.wala.cast.js.types.JavaScriptTypes;
import com.ibm.wala.cast.types.AstMethodReference;
import com.ibm.wala.classLoader.ClassLoaderFactory;
import com.ibm.wala.classLoader.SourceFileModule;
import com.ibm.wala.ipa.callgraph.AnalysisCache;
import com.ibm.wala.ipa.callgraph.AnalysisOptions;
import com.ibm.wala.ipa.callgraph.AnalysisScope;
import com.ibm.wala.ipa.callgraph.CallGraph;
@ -47,9 +48,13 @@ public class Util extends com.ibm.wala.cast.ipa.callgraph.Util {
public static JavaScriptTranslatorFactory getTranslatorFactory() {
return translatorFactory;
}
public static AnalysisCache makeCache(boolean keepIRs) {
return new AnalysisCache(AstIRFactory.makeDefaultFactory(keepIRs));
}
public static AnalysisOptions makeOptions(AnalysisScope scope, boolean keepIRs, IClassHierarchy cha, Iterable<Entrypoint> roots) {
final AnalysisOptions options = new AnalysisOptions(scope, AstIRFactory.makeDefaultFactory(keepIRs), roots);
final AnalysisOptions options = new AnalysisOptions(scope, /* AstIRFactory.makeDefaultFactory(keepIRs), */ roots);
com.ibm.wala.ipa.callgraph.impl.Util.addDefaultSelectors(options, cha);
options.setSelector(new StandardFunctionTargetSelector(cha, options.getMethodTargetSelector()));

View File

@ -12,6 +12,7 @@ import com.ibm.wala.cast.js.ipa.callgraph.JSCFABuilder;
import com.ibm.wala.cast.js.ipa.callgraph.JSZeroXCFABuilder;
import com.ibm.wala.cast.js.ipa.callgraph.Util;
import com.ibm.wala.cast.js.loader.JavaScriptLoaderFactory;
import com.ibm.wala.ipa.callgraph.AnalysisCache;
import com.ibm.wala.ipa.callgraph.AnalysisOptions;
import com.ibm.wala.ipa.callgraph.AnalysisScope;
import com.ibm.wala.ipa.callgraph.CallGraph;
@ -28,8 +29,9 @@ class dumpCallGraph {
IClassHierarchy cha = Util.makeHierarchy(scope, loaders);
Iterable<Entrypoint> roots = Util.makeScriptRoots(cha);
AnalysisOptions options = Util.makeOptions(scope, false, cha, roots);
JSCFABuilder builder = new JSZeroXCFABuilder(cha, options, null, null, null, ZeroXInstanceKeys.ALLOCATIONS);
AnalysisCache cache = Util.makeCache(false);
JSCFABuilder builder = new JSZeroXCFABuilder(cha, options, cache, null, null, null, ZeroXInstanceKeys.ALLOCATIONS);
CallGraph cg = builder.makeCallGraph(options);