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:
parent
d33880c5ce
commit
ea76fd31ab
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
Loading…
Reference in New Issue