public class SimpleDemandPointerFlowGraph
extends com.ibm.wala.util.graph.impl.SlowSparseNumberedGraph<java.lang.Object>
This graph is constructed on-demand during a traversal.
The edges represent
Edges carry labels if they arise from loads/stores, or calls
| Modifier and Type | Class and Description |
|---|---|
protected class |
SimpleDemandPointerFlowGraph.StatementVisitor
A visitor that generates graph nodes and edges for an IR.
|
| Constructor and Description |
|---|
SimpleDemandPointerFlowGraph(CallGraph cg,
HeapModel heapModel,
MemoryAccessMap fam,
IClassHierarchy cha) |
| Modifier and Type | Method and Description |
|---|---|
protected void |
addBlockInstructionConstraints(CGNode node,
ControlFlowGraph<SSAInstruction,ISSABasicBlock> cfg,
ISSABasicBlock b,
SimpleDemandPointerFlowGraph.StatementVisitor v)
Add constraints for a particular basic block.
|
protected void |
addNodeInstructionConstraints(CGNode node,
IR ir,
DefUse du)
Add pointer flow constraints based on instructions in a given node
|
protected void |
addNodePassthruExceptionConstraints(CGNode node,
IR ir)
Add constraints to represent the flow of exceptions to the exceptional return value for this
node
|
void |
addSubgraphForNode(CGNode node) |
protected HeapModel |
getHeapModel() |
int |
getPredNodeCount(java.lang.Object N) |
com.ibm.wala.util.intset.IntSet |
getPredNodeNumbers(java.lang.Object node) |
java.util.Iterator<java.lang.Object> |
getPredNodes(java.lang.Object N) |
int |
getSuccNodeCount(java.lang.Object N) |
com.ibm.wala.util.intset.IntSet |
getSuccNodeNumbers(java.lang.Object node) |
java.util.Iterator<java.lang.Object> |
getSuccNodes(java.lang.Object N) |
boolean |
hasEdge(PointerKey src,
PointerKey dst) |
protected SimpleDemandPointerFlowGraph.StatementVisitor |
makeVisitor(ExplicitCallGraph.ExplicitNode node,
IR ir,
DefUse du) |
protected void |
unconditionallyAddConstraintsFromNode(CGNode node) |
copyInto, duplicate, getEdgeManager, getNodeManager, makegetMaxNumber, getNode, getNumber, iterateNodesaddEdge, addNode, containsNode, edgeString, getNumberOfNodes, hasEdge, iterator, removeAllIncidentEdges, removeEdge, removeIncomingEdges, removeNode, removeNodeAndEdges, removeOutgoingEdges, stream, toStringclone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, waitpublic SimpleDemandPointerFlowGraph(CallGraph cg, HeapModel heapModel, MemoryAccessMap fam, IClassHierarchy cha)
public void addSubgraphForNode(CGNode node)
protected HeapModel getHeapModel()
public com.ibm.wala.util.intset.IntSet getPredNodeNumbers(java.lang.Object node)
throws com.ibm.wala.util.debug.UnimplementedError
getPredNodeNumbers in interface com.ibm.wala.util.graph.NumberedEdgeManager<java.lang.Object>getPredNodeNumbers in class com.ibm.wala.util.graph.AbstractNumberedGraph<java.lang.Object>com.ibm.wala.util.debug.UnimplementedErrorpublic com.ibm.wala.util.intset.IntSet getSuccNodeNumbers(java.lang.Object node)
throws java.lang.IllegalArgumentException
getSuccNodeNumbers in interface com.ibm.wala.util.graph.NumberedEdgeManager<java.lang.Object>getSuccNodeNumbers in class com.ibm.wala.util.graph.AbstractNumberedGraph<java.lang.Object>java.lang.IllegalArgumentExceptionpublic int getPredNodeCount(java.lang.Object N)
throws com.ibm.wala.util.debug.UnimplementedError
getPredNodeCount in interface com.ibm.wala.util.graph.EdgeManager<java.lang.Object>getPredNodeCount in class com.ibm.wala.util.graph.AbstractGraph<java.lang.Object>com.ibm.wala.util.debug.UnimplementedErrorpublic java.util.Iterator<java.lang.Object> getPredNodes(java.lang.Object N)
throws java.lang.IllegalArgumentException
getPredNodes in interface com.ibm.wala.util.graph.EdgeManager<java.lang.Object>getPredNodes in class com.ibm.wala.util.graph.AbstractGraph<java.lang.Object>java.lang.IllegalArgumentExceptionpublic int getSuccNodeCount(java.lang.Object N)
throws com.ibm.wala.util.debug.UnimplementedError
getSuccNodeCount in interface com.ibm.wala.util.graph.EdgeManager<java.lang.Object>getSuccNodeCount in class com.ibm.wala.util.graph.AbstractGraph<java.lang.Object>com.ibm.wala.util.debug.UnimplementedErrorpublic java.util.Iterator<java.lang.Object> getSuccNodes(java.lang.Object N)
getSuccNodes in interface com.ibm.wala.util.graph.EdgeManager<java.lang.Object>getSuccNodes in class com.ibm.wala.util.graph.AbstractGraph<java.lang.Object>public boolean hasEdge(PointerKey src, PointerKey dst)
protected void unconditionallyAddConstraintsFromNode(CGNode node)
protected void addNodePassthruExceptionConstraints(CGNode node, IR ir)
protected void addNodeInstructionConstraints(CGNode node, IR ir, DefUse du)
protected void addBlockInstructionConstraints(CGNode node, ControlFlowGraph<SSAInstruction,ISSABasicBlock> cfg, ISSABasicBlock b, SimpleDemandPointerFlowGraph.StatementVisitor v)
protected SimpleDemandPointerFlowGraph.StatementVisitor makeVisitor(ExplicitCallGraph.ExplicitNode node, IR ir, DefUse du)