private static JavaScriptInvoke getInvokeInstruction(CGNode caller, CallSiteReference site) { IR callerIR = caller.getIR(); SSAAbstractInvokeInstruction callInstrs[] = callerIR.getCalls(site); assert callInstrs.length == 1; return (JavaScriptInvoke) callInstrs[0]; }
private static SSAAbstractInvokeInstruction[] getCallInstrs(CGNode node, CallSiteReference site) { return node.getIR().getCalls(site); }
private static SSAAbstractInvokeInstruction[] getCallInstrs(CGNode node, CallSiteReference site) { return node.getIR().getCalls(site); }
private static int getNumberOfArgsPassed(CGNode caller, CallSiteReference site) { IR callerIR = caller.getIR(); SSAAbstractInvokeInstruction callStmts[] = callerIR.getCalls(site); assert callStmts.length == 1; int nargs = callStmts[0].getNumberOfPositionalParameters(); return nargs; }
private static int getNumberOfArgsPassed(CGNode caller, CallSiteReference site) { IR callerIR = caller.getIR(); SSAAbstractInvokeInstruction callStmts[] = callerIR.getCalls(site); assert callStmts.length == 1; int nargs = callStmts[0].getNumberOfPositionalParameters(); return nargs; }
@Override public IntSet getRelevantParameters(CGNode caller, CallSiteReference site) { if (caller.getIR().getCalls(site)[0].getNumberOfUses() > index) { return IntSetUtil.make(new int[]{index}).union(base.getRelevantParameters(caller, site)); } else { return base.getRelevantParameters(caller, site); } }
@Override public IMethod getCalleeTarget(CGNode caller, CallSiteReference site, IClass receiver) { if (site.getDeclaredTarget().equals(JavaScriptMethods.ctorReference)) { IR callerIR = caller.getIR(); SSAAbstractInvokeInstruction callStmts[] = callerIR.getCalls(site); assert callStmts.length == 1; int nargs = callStmts[0].getNumberOfPositionalParameters(); return constructors.findOrCreateConstructorMethod(callerIR, callStmts[0], receiver, nargs - 1); } else { return base.getCalleeTarget(caller, site, receiver); } }
@Override public IntSet getRelevantParameters(CGNode caller, CallSiteReference site) { // 0 for function (synthetic apply), 1 for this (function being invoked), 2 // for this arg of function being invoked, // 3 for arguments array MutableIntSet params = IntSetUtil.make(); for(int i = 0; i < 4 && i < caller.getIR().getCalls(site)[0].getNumberOfUses(); i++) { params.add(i); } return params.union(base.getRelevantParameters(caller, site)); }
@Override public IntSet getRelevantParameters(CGNode caller, CallSiteReference site) { if (caller.getIR().getCalls(site)[0].getNumberOfUses() > index) { return IntSetUtil.make(new int[]{index}).union(base.getRelevantParameters(caller, site)); } else { return base.getRelevantParameters(caller, site); } }
@Override public IntSet getRelevantParameters(CGNode caller, CallSiteReference site) { if (caller.getIR().getCalls(site)[0].getNumberOfUses() > 1) { return IntSetUtil.make(new int[]{1}).union(base.getRelevantParameters(caller, site)); } else { return base.getRelevantParameters(caller, site); } }
@Override public IMethod getCalleeTarget(CGNode caller, CallSiteReference site, IClass receiver) { if (site.getDeclaredTarget().equals(JavaScriptMethods.ctorReference)) { IR callerIR = caller.getIR(); SSAAbstractInvokeInstruction callStmts[] = callerIR.getCalls(site); assert callStmts.length == 1; int nargs = callStmts[0].getNumberOfPositionalParameters(); return constructors.findOrCreateConstructorMethod(callerIR, callStmts[0], receiver, nargs - 1); } else { return base.getCalleeTarget(caller, site, receiver); } }
@Override public IntSet getRelevantParameters(CGNode caller, CallSiteReference site) { if (caller.getIR().getCalls(site)[0].getNumberOfUses() > 1) { return IntSetUtil.make(new int[]{1}).union(base.getRelevantParameters(caller, site)); } else { return base.getRelevantParameters(caller, site); } }
@Override public IntSet getRelevantParameters(CGNode caller, CallSiteReference site) { // 0 for function (synthetic apply), 1 for this (function being invoked), 2 // for this arg of function being invoked, // 3 for arguments array MutableIntSet params = IntSetUtil.make(); for(int i = 0; i < 4 && i < caller.getIR().getCalls(site)[0].getNumberOfUses(); i++) { params.add(i); } return params.union(base.getRelevantParameters(caller, site)); }
@Override public Context getCalleeTarget(CGNode caller, CallSiteReference site, IMethod callee, InstanceKey[] actualParameters) { Context baseContext = base.getCalleeTarget(caller, site, callee, actualParameters); if (caller.getMethod() instanceof Retranslatable) { int v = -1; for (SSAAbstractInvokeInstruction x : caller.getIR().getCalls(site)) { if (v == -1) { v = x.getNumberOfPositionalParameters(); } else { if (v != x.getNumberOfPositionalParameters()) { return baseContext; } } } return new ArgumentCountContext(v, baseContext); } else { return baseContext; } }
@Override public Context getCalleeTarget(CGNode caller, CallSiteReference site, IMethod callee, InstanceKey[] actualParameters) { Context baseContext = base.getCalleeTarget(caller, site, callee, actualParameters); if (caller.getMethod() instanceof Retranslatable) { int v = -1; for (SSAAbstractInvokeInstruction x : caller.getIR().getCalls(site)) { if (v == -1) { v = x.getNumberOfPositionalParameters(); } else { if (v != x.getNumberOfPositionalParameters()) { return baseContext; } } } return new ArgumentCountContext(v, baseContext); } else { return baseContext; } }
@Override public IntSet getRelevantParameters(CGNode caller, CallSiteReference site) { MutableIntSet s = IntSetUtil.make(); for(int i = 0; i < caller.getIR().getCalls(site)[0].getNumberOfUses(); i++) { if (!caller.getMethod().getDeclaringClass().getClassLoader().getLanguage().methodsHaveDeclaredParameterTypes() || dispatchIndex(site, i)) { s.add(i); } } return s; }
@Override public IntSet getRelevantParameters(CGNode caller, CallSiteReference site) { MutableIntSet s = IntSetUtil.make(); for(int i = 0; i < caller.getIR().getCalls(site)[0].getNumberOfUses(); i++) { if (!caller.getMethod().getDeclaringClass().getClassLoader().getLanguage().methodsHaveDeclaredParameterTypes() || dispatchIndex(site, i)) { s.add(i); } } return s; }
@Override public IntSet getRelevantParameters(CGNode caller, CallSiteReference site) { IMethod resolved = caller.getMethod().getClassHierarchy().resolveMethod(site.getDeclaredTarget()); if (isClassFactory(resolved != null? resolved.getReference(): site.getDeclaredTarget())) { SSAAbstractInvokeInstruction[] invokeInstructions = caller.getIR().getCalls(site); if (invokeInstructions.length >= 1) { if (invokeInstructions[0].isStatic()) { return thisParameter; } else { return firstParameter; } } else { return EmptyIntSet.instance; } } else { return EmptyIntSet.instance; } } }
private IntSet identifyDependentParameters(CGNode caller, CallSiteReference site) { MutableIntSet dependentParameters = IntSetUtil.make(); SSAAbstractInvokeInstruction inst = caller.getIR().getCalls(site)[0]; DefUse du = caller.getDU(); for(int i = 0; i < inst.getNumberOfPositionalParameters(); i++) { MutableIntSet values = IntSetUtil.make(); values.add(inst.getUse(i)); collectValues(du, du.getDef(inst.getUse(i)), values); if (values.contains(index+1)) dependentParameters.add(i); } return dependentParameters; }
private IntSet identifyDependentParameters(CGNode caller, CallSiteReference site) { MutableIntSet dependentParameters = IntSetUtil.make(); SSAAbstractInvokeInstruction inst = caller.getIR().getCalls(site)[0]; DefUse du = caller.getDU(); for(int i = 0; i < inst.getNumberOfPositionalParameters(); i++) { MutableIntSet values = IntSetUtil.make(); values.add(inst.getUse(i)); collectValues(du, du.getDef(inst.getUse(i)), values); if (values.contains(index+1)) dependentParameters.add(i); } return dependentParameters; }