support for 1-CFA analysis

git-svn-id: https://wala.svn.sourceforge.net/svnroot/wala/trunk@1985 f5eafffb-2e1d-0410-98e4-8ec43c5233c4
This commit is contained in:
dolby-oss 2007-11-06 04:14:03 +00:00
parent 465c247fa1
commit f10ec15eb8
4 changed files with 59 additions and 15 deletions

View File

@ -0,0 +1,37 @@
/******************************************************************************
* Copyright (c) 2002 - 2006 IBM Corporation.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
*****************************************************************************/
package com.ibm.wala.cast.js.client.impl;
import com.ibm.wala.cast.ipa.callgraph.StandardFunctionTargetSelector;
import com.ibm.wala.cast.js.ipa.callgraph.*;
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;
import com.ibm.wala.ipa.callgraph.propagation.cfa.ZeroXInstanceKeys;
import com.ibm.wala.ipa.cha.IClassHierarchy;
/**
* @author Julian Dolby (dolby@us.ibm.com)
*
* A factory to create call graph builders using 0-CFA
*/
public class OneCFABuilderFactory implements CallGraphBuilderFactory {
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 JSZeroOrOneXCFABuilder(cha, options, cache, null, null, null, ZeroXInstanceKeys.NONE, true);
}
}

View File

@ -11,7 +11,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.cast.js.ipa.callgraph.*;
import com.ibm.wala.client.CallGraphBuilderFactory;
import com.ibm.wala.ipa.callgraph.AnalysisCache;
import com.ibm.wala.ipa.callgraph.AnalysisOptions;
@ -32,6 +32,6 @@ public class ZeroCFABuilderFactory implements CallGraphBuilderFactory {
com.ibm.wala.ipa.callgraph.impl.Util.addDefaultSelectors(options, cha);
options.setSelector(new StandardFunctionTargetSelector(cha, options.getMethodTargetSelector()));
return new JSZeroXCFABuilder(cha, options, cache, null, null, null, ZeroXInstanceKeys.NONE);
return new JSZeroOrOneXCFABuilder(cha, options, cache, null, null, null, ZeroXInstanceKeys.NONE, false);
}
}

View File

@ -18,19 +18,19 @@ import com.ibm.wala.ipa.callgraph.ReflectionSpecification;
import com.ibm.wala.ipa.callgraph.impl.DefaultContextSelector;
import com.ibm.wala.ipa.callgraph.impl.DelegatingContextSelector;
import com.ibm.wala.ipa.callgraph.propagation.SSAContextInterpreter;
import com.ibm.wala.ipa.callgraph.propagation.cfa.ZeroXInstanceKeys;
import com.ibm.wala.ipa.callgraph.propagation.cfa.*;
import com.ibm.wala.ipa.cha.IClassHierarchy;
/**
* @author sfink
*
* 0-1-CFA Call graph builder, optimized to not disambiguate instances of
* 0-x-CFA Call graph builder, optimized to not disambiguate instances of
* "uninteresting" types
*/
public class JSZeroXCFABuilder extends JSCFABuilder {
public class JSZeroOrOneXCFABuilder extends JSCFABuilder {
public JSZeroXCFABuilder(IClassHierarchy cha, AnalysisOptions options, AnalysisCache cache, ContextSelector appContextSelector,
SSAContextInterpreter appContextInterpreter, ReflectionSpecification reflect, int instancePolicy) {
public JSZeroOrOneXCFABuilder(IClassHierarchy cha, AnalysisOptions options, AnalysisCache cache, ContextSelector appContextSelector,
SSAContextInterpreter appContextInterpreter, ReflectionSpecification reflect, int instancePolicy, boolean doOneCFA) {
super(cha, options, cache);
SSAContextInterpreter contextInterpreter = makeDefaultContextInterpreters(appContextInterpreter, options, cha, reflect);
@ -40,7 +40,9 @@ public class JSZeroXCFABuilder extends JSCFABuilder {
ContextSelector def = new DefaultContextSelector(cha, options.getMethodTargetSelector());
ContextSelector contextSelector = appContextSelector == null ? def : new DelegatingContextSelector(appContextSelector, def);
if (doOneCFA) {
contextSelector = new OneLevelContextSelector(contextSelector);
}
setContextSelector(contextSelector);
setInstanceKeys(new JavaScriptScopeMappingInstanceKeys(cha, this, new ZeroXInstanceKeys(options, cha, contextInterpreter,
@ -63,15 +65,21 @@ public class JSZeroXCFABuilder extends JSCFABuilder {
* deployment descriptor abstraction
* @return a 0-1-Opt-CFA Call Graph Builder.
*/
public static JSCFABuilder make(AnalysisOptions options, AnalysisCache cache, IClassHierarchy cha, ClassLoader cl, AnalysisScope scope,
String[] xmlFiles, byte instancePolicy) {
public static JSCFABuilder make(AnalysisOptions options,
AnalysisCache cache,
IClassHierarchy cha,
ClassLoader cl,
AnalysisScope scope,
String[] xmlFiles,
byte instancePolicy,
boolean doOneCFA)
{
com.ibm.wala.ipa.callgraph.impl.Util.addDefaultSelectors(options, cha);
for (int i = 0; i < xmlFiles.length; i++) {
com.ibm.wala.ipa.callgraph.impl.Util.addBypassLogic(options, scope, cl, xmlFiles[i], cha);
}
return new JSZeroXCFABuilder(cha, options, cache, null, null, options.getReflectionSpec(), instancePolicy);
return new JSZeroOrOneXCFABuilder(cha, options, cache, null, null, options.getReflectionSpec(), instancePolicy, doOneCFA);
}
/*

View File

@ -8,8 +8,7 @@
* Contributors:
* IBM Corporation - initial API and implementation
*****************************************************************************/
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.*;
import com.ibm.wala.cast.js.ipa.callgraph.Util;
import com.ibm.wala.cast.js.loader.JavaScriptLoaderFactory;
import com.ibm.wala.ipa.callgraph.AnalysisCache;
@ -31,7 +30,7 @@ class dumpCallGraph {
AnalysisOptions options = Util.makeOptions(scope, false, cha, roots);
AnalysisCache cache = Util.makeCache(false);
JSCFABuilder builder = new JSZeroXCFABuilder(cha, options, cache, null, null, null, ZeroXInstanceKeys.ALLOCATIONS);
JSCFABuilder builder = new JSZeroOrOneXCFABuilder(cha, options, cache, null, null, null, ZeroXInstanceKeys.ALLOCATIONS, false);
CallGraph cg = builder.makeCallGraph(options);