/** A local variable is used in an unknown construct. */ void localEscapes(Local l) { // nodes escape globally globEscape.addAll(locals.get(l)); if (doCheck) { sanityCheck(); } }
/** return right statement . */ void returnLocal(Local right) { // strong update on ret ret.clear(); ret.addAll(locals.get(right)); if (doCheck) { sanityCheck(); } }
/** Returns an iterator over all edges that have u as their source unit. */ public Iterator edgesOutOf(Unit u) { return new ArrayList(unitMap.get(u)).iterator(); }
/** Returns an iterator over all edges that have m as their source method. */ public Iterator edgesOutOf(MethodOrMethodContext m) { return new ArrayList(srcMap.get(m)).iterator(); }
/** Returns an iterator over all edges that have m as their target method. */ public Iterator edgesInto(MethodOrMethodContext m) { return new ArrayList(tgtMap.get(m)).iterator(); }
public void removeAll(Stmt s) { for (Local var : stmtToVar.get(s)) { varToStmt.remove(var); } stmtToVar.remove(s); }
static private void dumpMultiMap(String name, MultiMap s) { logger.debug("" + name); Iterator it = s.keySet().iterator(); while (it.hasNext()) { Object o = it.next(); logger.debug(" " + o.toString()); Iterator itt = s.get(o).iterator(); while (itt.hasNext()) { logger.debug(" " + itt.next().toString()); } } }
protected String varNodeReps(VarNode v) { StringBuffer ret = new StringBuffer(); ret.append("<ul>\n"); for (Iterator vvIt = mergedNodes.get(v).iterator(); vvIt.hasNext();) { final VarNode vv = (VarNode) vvIt.next(); ret.append(varNode("", vv)); } ret.append("</ul>\n"); return ret.toString(); }
protected void internalPassNode(PurityNode node, Set<PurityNode> dest, boolean consider_inside) { if (!dest.contains(node)) { dest.add(node); internalPassEdges(edges.get(node), dest, consider_inside); } }
public void setArgArrayNonDetSize(Local argArray, Context context) { assert context == null; final Set<InvokeCallSite> invokeSites = invokeArgsToInvokeSite.get(argArray); if (invokeSites != null) { if (invokeArgsToSize.containsKey(argArray)) { return; } invokeArgsToSize.put(argArray, null); resolveInvoke(invokeSites); } }
public boolean wantTypes(Local receiver) { return receiverToSites.get(receiver) != null || baseToInvokeSite.get(receiver) != null; }
protected final boolean localsRemove(Local local) { Iterator it = locals.get(local).iterator(); while (it.hasNext()) { Object node = it.next(); backLocals.remove(node, local); } return locals.remove(local); }
protected void dumpMethod(SootMethod m, JarOutputStream jarOut) throws IOException { jarOut.putNextEntry(new ZipEntry("" + toFileName(m.toString()) + ".html")); final PrintWriter out = new PrintWriter(jarOut); out.println("<html>"); out.println("This is method " + htmlify(m.toString()) + "<hr>"); for (Iterator it = methodToNodes.get(m).iterator(); it.hasNext();) { out.println(varNode("nodes/", (VarNode) it.next())); } out.println("</html>"); out.flush(); }
protected void internalPassEdges(Set toColor, Set<PurityNode> dest, boolean consider_inside) { Iterator it = toColor.iterator(); while (it.hasNext()) { PurityEdge edge = (PurityEdge) it.next(); if (consider_inside || !edge.isInside()) { PurityNode node = edge.getTarget(); if (!dest.contains(node)) { dest.add(node); internalPassEdges(edges.get(node), dest, consider_inside); } } } }
public void addBaseType(Local base, Context context, Type ty) { assert context == null; final Set<InvokeCallSite> invokeSites = baseToInvokeSite.get(base); if (invokeSites != null) { if (reachingBaseTypes.put(base, ty)) { resolveInvoke(invokeSites); } } }
public void addInvokeArgType(Local argArray, Context context, Type t) { assert context == null; final Set<InvokeCallSite> invokeSites = invokeArgsToInvokeSite.get(argArray); if (invokeSites != null) { if (reachingArgTypes.put(argArray, t)) { resolveInvoke(invokeSites); } } }
public void addInvokeArgType(AllocDotField df, Context context, Type type) { if (!allocDotFieldToLocal.containsKey(df)) { return; } for (Local l : allocDotFieldToLocal.get(df)) { addInvokeArgType(l, context, type); } }
/** Copy assignment left = right. */ void assignLocalToLocal(Local right, Local left) { // strong update on local localsRemove(left); localsPutAll(left, locals.get(right)); if (doCheck) { sanityCheck(); } }
@Override public boolean putAll(MultiMap<K, V> m) { boolean hasNew = false; for (K key : m.keySet()) { if (putAll(key, m.get(key))) { hasNew = true; } } return hasNew; }
protected void flowThrough(FlowSet<ValueBox> out, Unit u, FlowSet<ValueBox> in) { Local def = localDefed(u); out.copy(in); if (def != null) { Collection<ValueBox> boxesDefed = localToUseBoxes.get(def); for (ValueBox vb : in) { if (boxesDefed.contains(vb)) { in.remove(vb); } } } in.union(unitToLocalUseBoxes.get(u)); }