/** * Is a particular bit set? * * @param b the bit to check */ public boolean contains(int b) { if (V == null) { return false; } else { return V.contains(b); } }
/** * Is a particular bit set? * * @param b the bit to check */ public boolean contains(int b) { if (V == null) { return false; } else { return V.contains(b); } }
/** * Is a particular bit set? * * @param b the bit to check */ public boolean contains(int b) { if (V == null) { return false; } else { return V.contains(b); } }
@Override public boolean contains(int i) { return impl.contains(i); }
@Override public boolean contains(int i) { return impl.contains(i); }
@Override public boolean contains(int i) { return impl.contains(i); }
@Override public boolean hasEdge(T src, T dst) { return original.hasEdge(src, dst) || (outEdges.containsKey(src) && outEdges.get(src).contains(getNumber(dst))); }
@Override public boolean hasEdge(T src, T dst) { return original.hasEdge(src, dst) || (outEdges.containsKey(src) && outEdges.get(src).contains(getNumber(dst))); }
@Override public boolean hasEdge(T src, T dst) { return original.hasEdge(src, dst) || (outEdges.containsKey(src) && outEdges.get(src).contains(getNumber(dst))); }
/** * also update the flows-to set of interest if necessary */ @Override protected boolean handleTrackedPred(MutableIntSet curTrackedSet, PointerKeyAndState predPkAndState, IFlowLabel label) { boolean result = super.handleTrackedPred(curTrackedSet, predPkAndState, label); if (result && find(pkToTrackedSet, predPkAndState).contains(queriedIkAndStateNum)) { theFlowsToSet.add(predPkAndState); } return result; }
/** * also update the flows-to set of interest if necessary */ @Override protected boolean handleTrackedPred(MutableIntSet curTrackedSet, PointerKeyAndState predPkAndState, IFlowLabel label) { boolean result = super.handleTrackedPred(curTrackedSet, predPkAndState, label); if (result && find(pkToTrackedSet, predPkAndState).contains(queriedIkAndStateNum)) { theFlowsToSet.add(predPkAndState); } return result; }
/** * add edges to nodes in callers of n */ private void addCallerEdges(CGNode n) { final int num = cg.getNumber(n); if (!cgNodesWithCallerEdges.contains(num)) { cgNodesWithCallerEdges.add(num); ControlFlowGraph<SSAInstruction, T> cfg = getCFG(n); addInterproceduralEdgesForEntryAndExitBlocks(n, cfg); } }
/** * add edges to nodes in callers of n */ private void addCallerEdges(CGNode n) { final int num = cg.getNumber(n); if (!cgNodesWithCallerEdges.contains(num)) { cgNodesWithCallerEdges.add(num); ControlFlowGraph<SSAInstruction, T> cfg = getCFG(n); addInterproceduralEdgesForEntryAndExitBlocks(n, cfg); } }
/** * add enough nodes and edges to the graph to allow for computing predecessors of N */ private void initForPred(BasicBlockInContext<T> N) { CGNode node = getCGNode(N); addIntraproceduralNodesAndEdgesForCGNodeIfNeeded(node); int num = g.getNumber(N); if (!addedPreds.contains(num)) { addedPreds.add(num); if (N.getDelegate().isEntryBlock()) { addCallerEdges(node); } if (isReturn(N)) { addCalleeEdgesForReturn(node, N); } } }
/** * add enough nodes and edges to the graph to allow for computing successors of N */ private void initForSucc(BasicBlockInContext<T> N) { CGNode node = getCGNode(N); addIntraproceduralNodesAndEdgesForCGNodeIfNeeded(node); int num = g.getNumber(N); if (!addedSuccs.contains(num)) { addedSuccs.add(num); if (N.getDelegate().isExitBlock()) { addCallerEdges(node); } if (hasCall(N)) { addCalleeEdgesForCall(node, N); } } }
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; }