reflect function statements into 'window' object. i have checked that
firefox does this.
This commit is contained in:
parent
d528c16b0f
commit
0117b88698
|
@ -17,10 +17,12 @@ import com.ibm.wala.cast.js.ssa.JSInstructionFactory;
|
|||
import com.ibm.wala.cast.js.translator.JSAstTranslator;
|
||||
import com.ibm.wala.cast.js.translator.JavaScriptTranslatorFactory;
|
||||
import com.ibm.wala.cast.tree.CAst;
|
||||
import com.ibm.wala.cast.tree.CAstEntity;
|
||||
import com.ibm.wala.cast.tree.CAstNode;
|
||||
import com.ibm.wala.cast.tree.impl.CAstImpl;
|
||||
import com.ibm.wala.cast.tree.impl.CAstOperator;
|
||||
import com.ibm.wala.cast.tree.rewrite.CAstRewriterFactory;
|
||||
import com.ibm.wala.cast.tree.visit.CAstVisitor;
|
||||
import com.ibm.wala.classLoader.IClassLoader;
|
||||
import com.ibm.wala.ipa.cha.IClassHierarchy;
|
||||
|
||||
|
@ -99,6 +101,18 @@ public class WebPageLoaderFactory extends JavaScriptLoaderFactory {
|
|||
|
||||
super.doLocalWrite(context, nm, rval);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void leaveFunctionStmt(CAstNode n, WalkContext context, CAstVisitor<WalkContext> visitor) {
|
||||
super.leaveFunctionStmt(n, context, visitor);
|
||||
if (isScriptBody(context)) {
|
||||
CAstEntity fn = (CAstEntity) n.getChild(0).getValue();
|
||||
int fnValue = context.currentScope().lookup(fn.getName()).valueNumber();
|
||||
assert fnValue > 0;
|
||||
int windowVal = super.doLocalRead(context, "this");
|
||||
context.cfg().addInstruction(((JSInstructionFactory) insts).PutInstruction(windowVal, fnValue, fn.getName()));
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
};
|
||||
|
|
Loading…
Reference in New Issue