Extraction of correlated read/write pairs needs to be done _before_

property read expansion. Extended TranslatorToCAst to support this.
Various other changes to make it possible to plug in the correlated pair
extractor.

git-svn-id: https://wala.svn.sourceforge.net/svnroot/wala/trunk@4411 f5eafffb-2e1d-0410-98e4-8ec43c5233c4
This commit is contained in:
msridhar1 2012-01-06 21:49:48 +00:00
parent d33880c5ce
commit ea76fd31ab
4 changed files with 40 additions and 26 deletions

View File

@ -11,22 +11,42 @@
package com.ibm.wala.cast.js.translator;
import java.io.IOException;
import java.util.LinkedList;
import java.util.List;
import org.mozilla.javascript.RhinoToAstTranslator;
import com.ibm.wala.cast.ir.translator.TranslatorToCAst;
import com.ibm.wala.cast.js.translator.PropertyReadExpander.ExpanderKey;
import com.ibm.wala.cast.tree.CAst;
import com.ibm.wala.cast.tree.CAstEntity;
import com.ibm.wala.cast.tree.impl.CAstImpl;
import com.ibm.wala.cast.tree.impl.CAstRewriter;
import com.ibm.wala.cast.tree.impl.CAstRewriter.CopyKey;
import com.ibm.wala.cast.tree.impl.CAstRewriter.RewriteContext;
import com.ibm.wala.cast.tree.impl.CAstRewriterFactory;
import com.ibm.wala.classLoader.SourceFileModule;
import com.ibm.wala.classLoader.SourceModule;
public class CAstRhinoTranslator implements TranslatorToCAst {
private final List<CAstRewriterFactory> rewriters = new LinkedList<CAstRewriterFactory>();
private final SourceModule M;
public CAstRhinoTranslator(SourceModule M) {
public CAstRhinoTranslator(SourceModule M) {
this.M = M;
}
this.addRewriter(new CAstRewriterFactory<PropertyReadExpander.RewriteContext, ExpanderKey>() {
public CAstRewriter<PropertyReadExpander.RewriteContext, ExpanderKey> createCAstRewriter(CAst ast) {
return new PropertyReadExpander(ast);
}
}, true);
}
public <C extends RewriteContext<K>, K extends CopyKey<K>> void addRewriter(CAstRewriterFactory<C, K> factory, boolean prepend) {
if(prepend)
rewriters.add(0, factory);
else
rewriters.add(factory);
}
public CAstEntity translateToCAst() throws IOException {
String N;
@ -37,9 +57,9 @@ public class CAstRhinoTranslator implements TranslatorToCAst {
}
CAstImpl Ast = new CAstImpl();
return
new PropertyReadExpander(Ast).rewrite(
new RhinoToAstTranslator(Ast, M, N).translate());
}
CAstEntity entity = new RhinoToAstTranslator(Ast, M, N).translate();
for(CAstRewriterFactory rwf : rewriters)
entity = rwf.createCAstRewriter(Ast).rewrite(entity);
return entity;
}
}

View File

@ -275,9 +275,9 @@ public class ForInContextSelector implements ContextSelector {
} else if(value == null) {
return new ConstantKey<String>("null", stringClass);
}
} else if(key != null && key.getConcreteType() == numberClass) {
} /*else if(key != null && key.getConcreteType() == numberClass) {
return key;
}
}*/
return new ConcreteTypeKey(stringClass);
}

View File

@ -10,7 +10,6 @@
*****************************************************************************/
package com.ibm.wala.cast.js.loader;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.Collection;
import java.util.Collections;
@ -58,7 +57,6 @@ import com.ibm.wala.cast.tree.CAst;
import com.ibm.wala.cast.tree.CAstEntity;
import com.ibm.wala.cast.tree.CAstQualifier;
import com.ibm.wala.cast.tree.CAstSourcePositionMap;
import com.ibm.wala.cast.tree.impl.CAstRewriter;
import com.ibm.wala.cast.tree.impl.CAstRewriterFactory;
import com.ibm.wala.cast.types.AstMethodReference;
import com.ibm.wala.cfg.AbstractCFG;
@ -868,21 +866,13 @@ public class JavaScriptLoader extends CAstAbstractModuleLoader {
super.init(all);
}
@SuppressWarnings("unchecked")
@Override
protected TranslatorToCAst getTranslatorToCAst(final CAst ast, SourceModule module) {
final TranslatorToCAst baseTranslator = translatorFactory.make(ast, module);
return new TranslatorToCAst() {
@Override
public CAstEntity translateToCAst() throws IOException {
CAstEntity e = baseTranslator.translateToCAst();
if(preprocessor != null) {
CAstRewriter rewriter = preprocessor.createCAstRewriter(ast);
e = rewriter.rewrite(e);
}
return e;
}
};
TranslatorToCAst translator = translatorFactory.make(ast, module);
if(preprocessor != null)
translator.addRewriter(preprocessor, true);
return translator;
}
@Override

View File

@ -3,8 +3,12 @@ package com.ibm.wala.cast.ir.translator;
import java.io.IOException;
import com.ibm.wala.cast.tree.CAstEntity;
import com.ibm.wala.cast.tree.impl.CAstRewriter.CopyKey;
import com.ibm.wala.cast.tree.impl.CAstRewriter.RewriteContext;
import com.ibm.wala.cast.tree.impl.CAstRewriterFactory;
public interface TranslatorToCAst {
public <C extends RewriteContext<K>, K extends CopyKey<K>> void addRewriter(CAstRewriterFactory<C, K> factory, boolean prepend);
public CAstEntity translateToCAst() throws IOException;