add one level of call-string sensitivity for Function.apply()
git-svn-id: https://wala.svn.sourceforge.net/svnroot/wala/trunk@4342 f5eafffb-2e1d-0410-98e4-8ec43c5233c4
This commit is contained in:
parent
9a3b4f3d8a
commit
fa1f572d60
|
@ -40,13 +40,16 @@ public class JavaScriptFunctionApplyContextSelector implements ContextSelector {
|
|||
public static class ApplyContext implements Context {
|
||||
private final Context delegate;
|
||||
|
||||
private final CallSiteReference site;
|
||||
|
||||
/**
|
||||
* was the argsList argument a non-null Array?
|
||||
*/
|
||||
private final boolean isNonNullArray;
|
||||
|
||||
ApplyContext(Context delegate, boolean isNonNullArray) {
|
||||
ApplyContext(Context delegate, CallSiteReference site, boolean isNonNullArray) {
|
||||
this.delegate = delegate;
|
||||
this.site = site;
|
||||
this.isNonNullArray = isNonNullArray;
|
||||
}
|
||||
|
||||
|
@ -65,6 +68,7 @@ public class JavaScriptFunctionApplyContextSelector implements ContextSelector {
|
|||
int result = 1;
|
||||
result = prime * result + ((delegate == null) ? 0 : delegate.hashCode());
|
||||
result = prime * result + (isNonNullArray ? 1231 : 1237);
|
||||
result = prime * result + ((site == null) ? 0 : site.hashCode());
|
||||
return result;
|
||||
}
|
||||
|
||||
|
@ -84,9 +88,21 @@ public class JavaScriptFunctionApplyContextSelector implements ContextSelector {
|
|||
return false;
|
||||
if (isNonNullArray != other.isNonNullArray)
|
||||
return false;
|
||||
if (site == null) {
|
||||
if (other.site != null)
|
||||
return false;
|
||||
} else if (!site.equals(other.site))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "ApplyContext [delegate=" + delegate + ", site=" + site + ", isNonNullArray=" + isNonNullArray + "]";
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
public Context getCalleeTarget(CGNode caller, CallSiteReference site, IMethod callee, InstanceKey[] receiver) {
|
||||
|
@ -98,7 +114,7 @@ public class JavaScriptFunctionApplyContextSelector implements ContextSelector {
|
|||
isNonNullArray = true;
|
||||
}
|
||||
}
|
||||
return new ApplyContext(base.getCalleeTarget(caller, site, callee, receiver), isNonNullArray);
|
||||
return new ApplyContext(base.getCalleeTarget(caller, site, callee, receiver), site, isNonNullArray);
|
||||
}
|
||||
return base.getCalleeTarget(caller, site, callee, receiver);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue