@Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; ApplyContext other = (ApplyContext) obj; if (!delegate.equals(other.delegate)) return false; if (!isNonNullArray.equals(other.isNonNullArray)) return false; return true; }
@Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + delegate.hashCode(); result = prime * result + isNonNullArray.hashCode(); return result; }
@Override public ContextItem get(ContextKey key) { if (PROPNAME_KEY.equals(key)) { return PROPNAME_MARKER; } else if(PROPNAME_PARM_INDEX.equals(key)) { return ContextItem.Value.make(index); } else if(INSTANCE_KEY_KEY.equals(key)) { return ContextItem.Value.make(((SingleInstanceFilter)get(ContextKey.PARAMETERS[index])).getInstance()); } else { return super.get(key); } }
@Override public Context getCalleeTarget(CGNode caller, CallSiteReference site, IMethod callee, final InstanceKey[] receiver) { Context baseContext = base.getCalleeTarget(caller, site, callee, receiver); if(receiver.length > index && receiver[index] instanceof ConstantKey) { Frequency f = usesFirstArgAsPropertyName(callee); if(f == Frequency.ALWAYS|| f == Frequency.SOMETIMES) return new PropNameContext(baseContext, receiver[index]); } if (PROPNAME_MARKER.equals(caller.getContext().get(PROPNAME_KEY))) { if (!identifyDependentParameters(caller, site).isEmpty()) { // use a MarkerForInContext to clone based on the InstanceKey used in the caller context @SuppressWarnings("unchecked") InstanceKey callerIk = ((ContextItem.Value<InstanceKey>)caller.getContext().get(INSTANCE_KEY_KEY)).getValue(); return new MarkerForInContext(baseContext, callerIk); } else { return baseContext; } } return baseContext; }
@Override public Context getCalleeTarget(CGNode caller, CallSiteReference site, IMethod callee, final InstanceKey[] receiver) { Context baseContext = base.getCalleeTarget(caller, site, callee, receiver); if(receiver.length > index && receiver[index] instanceof ConstantKey) { Frequency f = usesFirstArgAsPropertyName(callee); if(f == Frequency.ALWAYS|| f == Frequency.SOMETIMES) return new PropNameContext(baseContext, receiver[index]); } if (PROPNAME_MARKER.equals(caller.getContext().get(PROPNAME_KEY))) { if (!identifyDependentParameters(caller, site).isEmpty()) { // use a MarkerForInContext to clone based on the InstanceKey used in the caller context @SuppressWarnings("unchecked") InstanceKey callerIk = ((ContextItem.Value<InstanceKey>)caller.getContext().get(INSTANCE_KEY_KEY)).getValue(); return new MarkerForInContext(baseContext, callerIk); } else { return baseContext; } } return baseContext; }
@Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; ApplyContext other = (ApplyContext) obj; if (!delegate.equals(other.delegate)) return false; if (!isNonNullArray.equals(other.isNonNullArray)) return false; return true; }
@Override public ContextItem get(ContextKey name) { return (name == ARGUMENT_COUNT)? ContextItem.Value.make(argumentCount): base.get(name); }
/** * Like {@link PropNameContext#get(ContextKey)}, but don't return a * {@link SingleInstanceFilter} for the distinguishing {@link InstanceKey} */ @Override public ContextItem get(ContextKey key) { if (INSTANCE_KEY_KEY.equals(key)) { return ContextItem.Value.make(((SingleInstanceFilter)super.get(ContextKey.PARAMETERS[index])).getInstance()); } else { final ContextItem contextItem = super.get(key); return (contextItem instanceof SingleInstanceFilter) ? null : contextItem; } } }
public static <T> Value make(T v) { return new Value<>(v); }
@Override public IR getIR(CGNode node) { assert understands(node); @SuppressWarnings("unchecked") ContextItem.Value<Boolean> isNonNullArray = (ContextItem.Value<Boolean>) node.getContext().get(JavaScriptFunctionApplyContextSelector.APPLY_NON_NULL_ARGS); // isNonNullArray can be null if, e.g., due to recursion bounding we have no // information on the arguments parameter if (isNonNullArray == null || isNonNullArray.getValue()) { return makeIRForArgList(node); } else { return makeIRForNoArgList(node); } }
public static <T> Value make(T v) { return new Value<>(v); }
/** * Like {@link PropNameContext#get(ContextKey)}, but don't return a * {@link SingleInstanceFilter} for the distinguishing {@link InstanceKey} */ @Override public ContextItem get(ContextKey key) { if (INSTANCE_KEY_KEY.equals(key)) { return ContextItem.Value.make(((SingleInstanceFilter)super.get(ContextKey.PARAMETERS[index])).getInstance()); } else { final ContextItem contextItem = super.get(key); return (contextItem instanceof SingleInstanceFilter) ? null : contextItem; } } }
@Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + delegate.hashCode(); result = prime * result + isNonNullArray.hashCode(); return result; }
@Override public IR getIR(CGNode node) { assert understands(node); @SuppressWarnings("unchecked") ContextItem.Value<Boolean> isNonNullArray = (ContextItem.Value<Boolean>) node.getContext().get(JavaScriptFunctionApplyContextSelector.APPLY_NON_NULL_ARGS); // isNonNullArray can be null if, e.g., due to recursion bounding we have no // information on the arguments parameter if (isNonNullArray == null || isNonNullArray.getValue()) { return makeIRForArgList(node); } else { return makeIRForNoArgList(node); } }
ApplyContext(Context delegate, boolean isNonNullArray) { this.delegate = delegate; this.isNonNullArray = ContextItem.Value.make(isNonNullArray); }
@Override public ContextItem get(ContextKey name) { return (name == ARGUMENT_COUNT)? ContextItem.Value.make(argumentCount): base.get(name); }
ApplyContext(Context delegate, boolean isNonNullArray) { this.delegate = delegate; this.isNonNullArray = ContextItem.Value.make(isNonNullArray); }
@Override public ContextItem get(ContextKey key) { if (PROPNAME_KEY.equals(key)) { return PROPNAME_MARKER; } else if(PROPNAME_PARM_INDEX.equals(key)) { return ContextItem.Value.make(index); } else if(INSTANCE_KEY_KEY.equals(key)) { return ContextItem.Value.make(((SingleInstanceFilter)get(ContextKey.PARAMETERS[index])).getInstance()); } else { return super.get(key); } }