A - Defines the lattice for procedure summariesT - Type that is used for the variable contextpublic abstract class VarContextDataFlow<T extends AbstractValue<T>> extends PreciseDataFlow<VarContext<T>> implements DataFlowDispatch<VarContext<T>>
PreciseDataFlow.PreciseCFGBuilder<FlowItem extends polyglot.visit.DataFlow.Item>polyglot.visit.DataFlow.BoolItem<FlowItem extends polyglot.visit.DataFlow.Item>, polyglot.visit.DataFlow.ConditionNavigator<FlowItem extends polyglot.visit.DataFlow.Item>, polyglot.visit.DataFlow.FlowGraphSource<FlowItem extends polyglot.visit.DataFlow.Item>, polyglot.visit.DataFlow.Frame<FlowItem extends polyglot.visit.DataFlow.Item>, polyglot.visit.DataFlow.Item| Modifier and Type | Field and Description |
|---|---|
static boolean |
DONT_TRACK_BOTTOM
Change this if we want bottom policies to stick around
|
protected FinalVarContext<T> |
output
output variable context
|
static boolean |
WARN_ON_MISSING_EDGES
Determines whether to warn on missing dataflow edges
|
protected WorkQueue<?> |
workQueue
Analysis work queue
|
| Constructor and Description |
|---|
VarContextDataFlow(AnalysisUtilVarContextDataFlow<?,T> autil,
WorkQueue<?> workQueue,
polyglot.frontend.Job job,
polyglot.types.TypeSystem ts,
polyglot.ast.NodeFactory nf,
boolean forward)
Create a new dataflow visitor
|
VarContextDataFlow(AnalysisUtilVarContextDataFlow<?,T> autil,
WorkQueue<?> workQueue,
polyglot.frontend.Job job,
polyglot.types.TypeSystem ts,
polyglot.ast.NodeFactory nf,
boolean forward,
boolean dataflowOnEntry,
boolean trackBackEdges)
Create a new dataflow visitor
|
| Modifier and Type | Method and Description |
|---|---|
protected static <T extends AbstractValue<T>> |
argumentsOnResultStack(polyglot.ast.Term t,
VarContext<T> vc)
Get the number of argument results on the stack
|
protected AnalysisUtilVarContextDataFlow<?,T> |
autil() |
protected void |
checkInvariants(java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<T>> m,
polyglot.visit.FlowGraph<VarContext<T>> graph,
polyglot.visit.FlowGraph.Peer<VarContext<T>> peer)
Check that our dataflow invariants hold
|
protected VarContext<T> |
confluence(java.util.List<VarContext<T>> items,
polyglot.visit.FlowGraph.Peer<VarContext<T>> peer,
polyglot.visit.FlowGraph<VarContext<T>> graph) |
protected VarContext<T> |
constructMissingContextForEdgeKey(polyglot.visit.FlowGraph.EdgeKey ek,
FinalVarContext<T> f,
polyglot.visit.FlowGraph.Peer<VarContext<T>> peer)
If an edge is missing this method is called to approximate the variable
context
|
protected VarContext<T> |
createInitialItem(polyglot.visit.FlowGraph<VarContext<T>> graph,
polyglot.ast.Term node,
boolean entry)
Create an initial Item for the dataflow analysis.
|
FinalVarContext<T> |
dataflow(polyglot.ast.CodeNode cd,
VarContext<T> in)
Construct a graph for the given code and call super
DataFlow.dataflow(FlowGraph) on it |
static ExitMap.Key |
edgeKeyConvert(polyglot.visit.FlowGraph.EdgeKey ek)
Convert
FlowGraph edge keys to FinalVarContext edge keys |
java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<T>> |
finalVarContextToDataFlowMap(FinalVarContext<T> f,
java.util.Set<polyglot.visit.FlowGraph.EdgeKey> succEdgeKeys,
polyglot.visit.FlowGraph.Peer<VarContext<T>> peer)
Converts a FinalVarContext to a map from EdgeKeys to Items.
|
protected java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<T>> |
flow(java.util.List<VarContext<T>> inItems,
java.util.List<polyglot.visit.FlowGraph.EdgeKey> inItemKeys,
polyglot.visit.FlowGraph<VarContext<T>> graph,
polyglot.visit.FlowGraph.Peer<VarContext<T>> peer) |
java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<T>> |
flow(VarContext<T> trueItem,
VarContext<T> falseItem,
VarContext<T> otherItem,
polyglot.visit.FlowGraph<VarContext<T>> graph,
polyglot.visit.FlowGraph.Peer<VarContext<T>> peer)
Produce new variable contexts from the input contexts and
FlowGraph.Peer |
java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<T>> |
flowArrayAccess(polyglot.ast.ArrayAccess n,
VarContext<T> dfIn,
polyglot.visit.FlowGraph<VarContext<T>> graph,
polyglot.visit.FlowGraph.Peer<VarContext<T>> peer)
Compute the dataflow for
n |
java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<T>> |
flowArrayAccessAssign(polyglot.ast.ArrayAccessAssign n,
VarContext<T> dfIn,
polyglot.visit.FlowGraph<VarContext<T>> graph,
polyglot.visit.FlowGraph.Peer<VarContext<T>> peer)
Compute the dataflow for
n |
java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<T>> |
flowArrayInit(polyglot.ast.ArrayInit n,
VarContext<T> dfIn,
polyglot.visit.FlowGraph<VarContext<T>> graph,
polyglot.visit.FlowGraph.Peer<VarContext<T>> peer)
Compute the dataflow for
n |
java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<T>> |
flowAssert(polyglot.ast.Assert n,
VarContext<T> dfIn,
polyglot.visit.FlowGraph<VarContext<T>> graph,
polyglot.visit.FlowGraph.Peer<VarContext<T>> peer)
Compute the dataflow for
n |
java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<T>> |
flowAssign(polyglot.ast.Assign n,
VarContext<T> dfIn,
polyglot.visit.FlowGraph<VarContext<T>> graph,
polyglot.visit.FlowGraph.Peer<VarContext<T>> peer)
Compute the dataflow for
n |
java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<T>> |
flowBinary(polyglot.ast.Binary n,
VarContext<T> dfIn,
VarContext<T> trueItem,
VarContext<T> falseItem,
polyglot.visit.FlowGraph<VarContext<T>> graph,
polyglot.visit.FlowGraph.Peer<VarContext<T>> peer)
Compute the dataflow for
n |
java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<T>> |
flowBlock(polyglot.ast.Block n,
VarContext<T> dfIn,
polyglot.visit.FlowGraph<VarContext<T>> graph,
polyglot.visit.FlowGraph.Peer<VarContext<T>> peer)
Compute the dataflow for
n |
java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<T>> |
flowBranch(polyglot.ast.Branch n,
VarContext<T> dfIn,
polyglot.visit.FlowGraph<VarContext<T>> graph,
polyglot.visit.FlowGraph.Peer<VarContext<T>> peer)
Compute the dataflow for
n |
java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<T>> |
flowCall(polyglot.ast.Call n,
VarContext<T> dfIn,
polyglot.visit.FlowGraph<VarContext<T>> graph,
polyglot.visit.FlowGraph.Peer<VarContext<T>> peer)
Compute the dataflow for
n |
java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<T>> |
flowCast(polyglot.ast.Cast n,
VarContext<T> dfIn,
polyglot.visit.FlowGraph<VarContext<T>> graph,
polyglot.visit.FlowGraph.Peer<VarContext<T>> peer)
Compute the dataflow for
n |
java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<T>> |
flowCatch(polyglot.ast.Catch n,
VarContext<T> dfIn,
polyglot.visit.FlowGraph<VarContext<T>> graph,
polyglot.visit.FlowGraph.Peer<VarContext<T>> peer)
Compute the dataflow for
n |
java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<T>> |
flowCodeDecl(polyglot.ast.CodeDecl n,
VarContext<T> dfIn,
polyglot.visit.FlowGraph<VarContext<T>> graph,
polyglot.visit.FlowGraph.Peer<VarContext<T>> peer)
Compute the dataflow for
n |
java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<T>> |
flowConditional(polyglot.ast.Conditional n,
VarContext<T> dfIn,
polyglot.visit.FlowGraph<VarContext<T>> graph,
polyglot.visit.FlowGraph.Peer<VarContext<T>> peer)
Compute the dataflow for
n |
java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<T>> |
flowConstructorCall(polyglot.ast.ConstructorCall n,
VarContext<T> dfIn,
polyglot.visit.FlowGraph<VarContext<T>> graph,
polyglot.visit.FlowGraph.Peer<VarContext<T>> peer)
Compute the dataflow for
n |
java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<T>> |
flowConstructorDecl(polyglot.ast.ConstructorDecl n,
VarContext<T> dfIn,
polyglot.visit.FlowGraph<VarContext<T>> graph,
polyglot.visit.FlowGraph.Peer<VarContext<T>> peer)
Compute the dataflow for
n |
java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<T>> |
flowDo(polyglot.ast.Do n,
VarContext<T> dfIn,
polyglot.visit.FlowGraph<VarContext<T>> graph,
polyglot.visit.FlowGraph.Peer<VarContext<T>> peer)
Compute the dataflow for
n |
java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<T>> |
flowEmpty(polyglot.ast.Empty n,
VarContext<T> dfIn,
polyglot.visit.FlowGraph<VarContext<T>> graph,
polyglot.visit.FlowGraph.Peer<VarContext<T>> peer)
Compute the dataflow for
n |
java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<T>> |
flowEval(polyglot.ast.Eval n,
VarContext<T> dfIn,
polyglot.visit.FlowGraph<VarContext<T>> graph,
polyglot.visit.FlowGraph.Peer<VarContext<T>> peer)
Compute the dataflow for
n |
java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<T>> |
flowExpr(polyglot.ast.Expr n,
VarContext<T> dfIn,
polyglot.visit.FlowGraph<VarContext<T>> graph,
polyglot.visit.FlowGraph.Peer<VarContext<T>> peer)
Compute the dataflow for
n |
java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<T>> |
flowField(polyglot.ast.Field n,
VarContext<T> dfIn,
polyglot.visit.FlowGraph<VarContext<T>> graph,
polyglot.visit.FlowGraph.Peer<VarContext<T>> peer)
Compute the dataflow for
n |
java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<T>> |
flowFieldAssign(polyglot.ast.FieldAssign n,
VarContext<T> dfIn,
polyglot.visit.FlowGraph<VarContext<T>> graph,
polyglot.visit.FlowGraph.Peer<VarContext<T>> peer)
Compute the dataflow for
n |
java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<T>> |
flowFieldDecl(polyglot.ast.FieldDecl n,
VarContext<T> dfIn,
polyglot.visit.FlowGraph<VarContext<T>> graph,
polyglot.visit.FlowGraph.Peer<VarContext<T>> peer)
Compute the dataflow for
n |
java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<T>> |
flowFinally(polyglot.ast.Block n,
VarContext<T> dfIn,
polyglot.visit.FlowGraph<VarContext<T>> graph,
polyglot.visit.FlowGraph.Peer<VarContext<T>> peer)
Compute the dataflow for
n |
java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<T>> |
flowFormal(polyglot.ast.Formal n,
VarContext<T> dfIn,
polyglot.visit.FlowGraph<VarContext<T>> graph,
polyglot.visit.FlowGraph.Peer<VarContext<T>> peer)
Compute the dataflow for
n |
java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<T>> |
flowIf(polyglot.ast.If n,
VarContext<T> dfIn,
polyglot.visit.FlowGraph<VarContext<T>> graph,
polyglot.visit.FlowGraph.Peer<VarContext<T>> peer)
Compute the dataflow for
n |
protected abstract java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<T>> |
flowImpl(VarContext<T> trueItem,
VarContext<T> falseItem,
VarContext<T> otherItem,
polyglot.visit.FlowGraph<VarContext<T>> graph,
polyglot.visit.FlowGraph.Peer<VarContext<T>> peer) |
java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<T>> |
flowInitializer(polyglot.ast.Initializer n,
VarContext<T> dfIn,
polyglot.visit.FlowGraph<VarContext<T>> graph,
polyglot.visit.FlowGraph.Peer<VarContext<T>> peer)
Compute the dataflow for
n |
java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<T>> |
flowInstanceof(polyglot.ast.Instanceof n,
VarContext<T> dfIn,
polyglot.visit.FlowGraph<VarContext<T>> graph,
polyglot.visit.FlowGraph.Peer<VarContext<T>> peer)
Compute the dataflow for
n |
java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<T>> |
flowLabeled(polyglot.ast.Labeled n,
VarContext<T> dfIn,
polyglot.visit.FlowGraph<VarContext<T>> graph,
polyglot.visit.FlowGraph.Peer<VarContext<T>> peer)
Compute the dataflow for
n |
java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<T>> |
flowLit(polyglot.ast.Lit n,
VarContext<T> dfIn,
polyglot.visit.FlowGraph<VarContext<T>> graph,
polyglot.visit.FlowGraph.Peer<VarContext<T>> peer)
Compute the dataflow for
n |
java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<T>> |
flowLocal(polyglot.ast.Local n,
VarContext<T> dfIn,
polyglot.visit.FlowGraph<VarContext<T>> graph,
polyglot.visit.FlowGraph.Peer<VarContext<T>> peer)
Compute the dataflow for
n |
java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<T>> |
flowLocalAssign(polyglot.ast.LocalAssign n,
VarContext<T> dfIn,
polyglot.visit.FlowGraph<VarContext<T>> graph,
polyglot.visit.FlowGraph.Peer<VarContext<T>> peer)
Compute the dataflow for
n |
java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<T>> |
flowLocalDecl(polyglot.ast.LocalDecl n,
VarContext<T> dfIn,
polyglot.visit.FlowGraph<VarContext<T>> graph,
polyglot.visit.FlowGraph.Peer<VarContext<T>> peer)
Compute the dataflow for
n |
java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<T>> |
flowMethodDecl(polyglot.ast.MethodDecl n,
VarContext<T> dfIn,
polyglot.visit.FlowGraph<VarContext<T>> graph,
polyglot.visit.FlowGraph.Peer<VarContext<T>> peer)
Compute the dataflow for
n |
java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<T>> |
flowNew(polyglot.ast.New n,
VarContext<T> dfIn,
polyglot.visit.FlowGraph<VarContext<T>> graph,
polyglot.visit.FlowGraph.Peer<VarContext<T>> peer)
Compute the dataflow for
n |
java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<T>> |
flowNewArray(polyglot.ast.NewArray n,
VarContext<T> dfIn,
polyglot.visit.FlowGraph<VarContext<T>> graph,
polyglot.visit.FlowGraph.Peer<VarContext<T>> peer)
Compute the dataflow for
n |
java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<T>> |
flowReturn(polyglot.ast.Return n,
VarContext<T> dfIn,
polyglot.visit.FlowGraph<VarContext<T>> graph,
polyglot.visit.FlowGraph.Peer<VarContext<T>> peer)
Compute the dataflow for
n |
java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<T>> |
flowSpecial(polyglot.ast.Special n,
VarContext<T> dfIn,
polyglot.visit.FlowGraph<VarContext<T>> graph,
polyglot.visit.FlowGraph.Peer<VarContext<T>> peer)
Compute the dataflow for
n |
java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<T>> |
flowStmt(polyglot.ast.Stmt n,
VarContext<T> dfIn,
polyglot.visit.FlowGraph<VarContext<T>> graph,
polyglot.visit.FlowGraph.Peer<VarContext<T>> peer)
Compute the dataflow for
n |
java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<T>> |
flowSuppress(Suppress n,
VarContext<T> dfIn,
polyglot.visit.FlowGraph<VarContext<T>> graph,
polyglot.visit.FlowGraph.Peer<VarContext<T>> peer)
Compute the dataflow for
n |
java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<T>> |
flowSynchronized(polyglot.ast.Synchronized n,
VarContext<T> dfIn,
polyglot.visit.FlowGraph<VarContext<T>> graph,
polyglot.visit.FlowGraph.Peer<VarContext<T>> peer)
Compute the dataflow for
n |
java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<T>> |
flowThrow(polyglot.ast.Throw n,
VarContext<T> dfIn,
polyglot.visit.FlowGraph<VarContext<T>> graph,
polyglot.visit.FlowGraph.Peer<VarContext<T>> peer)
Compute the dataflow for
n |
java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<T>> |
flowTry(polyglot.ast.Try n,
VarContext<T> dfIn,
polyglot.visit.FlowGraph<VarContext<T>> graph,
polyglot.visit.FlowGraph.Peer<VarContext<T>> peer)
Compute the dataflow for
n |
java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<T>> |
flowTypeNode(polyglot.ast.TypeNode n,
VarContext<T> dfIn,
polyglot.visit.FlowGraph<VarContext<T>> graph,
polyglot.visit.FlowGraph.Peer<VarContext<T>> peer)
Compute the dataflow for
n |
java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<T>> |
flowUnary(polyglot.ast.Unary n,
VarContext<T> dfIn,
VarContext<T> trueItem,
VarContext<T> falseItem,
polyglot.visit.FlowGraph<VarContext<T>> graph,
polyglot.visit.FlowGraph.Peer<VarContext<T>> peer)
Compute the dataflow for
n |
java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<T>> |
flowWhile(polyglot.ast.While n,
VarContext<T> dfIn,
polyglot.visit.FlowGraph<VarContext<T>> graph,
polyglot.visit.FlowGraph.Peer<VarContext<T>> peer)
Compute the dataflow for
n |
java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<T>> |
ignoreNode(VarContext<T> dfIn,
polyglot.visit.FlowGraph<VarContext<T>> graph,
polyglot.visit.FlowGraph.Peer<VarContext<T>> peer)
Ignore the node (i.e., it is a no-op).
|
protected static polyglot.visit.FlowGraph.EdgeKey |
keyConvert(ExitMap.Key k)
Convert
FinalVarContext edge keys to FlowGraph edge keys |
protected void |
post(polyglot.visit.FlowGraph<VarContext<T>> graph,
polyglot.ast.Term root) |
protected void |
postFieldDecl(polyglot.visit.FlowGraph<VarContext<T>> graph,
polyglot.visit.FlowGraph.Peer<VarContext<T>> p)
Handle the post-processing for a finish peer for a FieldDecl specially.
|
protected VarContext<T> |
safeConfluence(java.util.List<VarContext<T>> items,
java.util.List<polyglot.visit.FlowGraph.EdgeKey> itemKeys,
polyglot.visit.FlowGraph.Peer<VarContext<T>> peer,
polyglot.visit.FlowGraph<VarContext<T>> graph) |
protected void |
setWarnOnEdgesMissingData(boolean warn)
Set whether to warn on missing dataflow edges
|
createCFGBuilder, currentContext, dataFlowNodeIdentifierForPeer, dataFlowNodeIdentifierForPeer, initGraph, peerForDataFlowNodeIdentifiercheck, check, confluence, constructItemsFromCondition, createFrame, createInitialItem, currentFlowGraph, dataflow, dataflow, dataflow, dumpFlowGraph, enterCall, filterItems, filterItemsExceptionSubclass, filterItemsNonError, filterItemsNonException, findSCCs, flow, flow, flow, flowBooleanConditions, flowToBooleanFlow, hasTrueFalseBranches, initGraph, itemsToMap, itemToMap, lang, leave, leaveCall, safeConfluence, safeConfluencebegin, catchErrors, enter, enterCall, enterError, errorQueue, hasErrors, job, leaveCall, leaveCall, nodeFactory, typeSystembypass, bypass, bypassChildren, override, visitChildrenpublic static final boolean DONT_TRACK_BOTTOM
public static boolean WARN_ON_MISSING_EDGES
protected final WorkQueue<?> workQueue
protected FinalVarContext<T extends AbstractValue<T>> output
public VarContextDataFlow(AnalysisUtilVarContextDataFlow<?,T> autil, WorkQueue<?> workQueue, polyglot.frontend.Job job, polyglot.types.TypeSystem ts, polyglot.ast.NodeFactory nf, boolean forward)
autil - Analysis helper classworkQueue - Analysis work queuejob - Polyglot compiler Jobts - Polyglot type systemnf - factory for creating AST nodesforward - forward or backward dataflowpublic VarContextDataFlow(AnalysisUtilVarContextDataFlow<?,T> autil, WorkQueue<?> workQueue, polyglot.frontend.Job job, polyglot.types.TypeSystem ts, polyglot.ast.NodeFactory nf, boolean forward, boolean dataflowOnEntry, boolean trackBackEdges)
autil - Analysis helper classworkQueue - Analysis work queuejob - Polyglot compiler Jobts - Polyglot type systemnf - factory for creating AST nodesforward - forward or backward dataflowdataflowOnEntry - true if we want to process the entry nodetrackBackEdges - true if the dataflow tracks backward FlowGraphprotected AnalysisUtilVarContextDataFlow<?,T> autil()
autil in class PreciseDataFlow<VarContext<T extends AbstractValue<T>>>protected VarContext<T> createInitialItem(polyglot.visit.FlowGraph<VarContext<T>> graph, polyglot.ast.Term node, boolean entry)
createInitialItem in class polyglot.visit.DataFlow<VarContext<T extends AbstractValue<T>>>public FinalVarContext<T> dataflow(polyglot.ast.CodeNode cd, VarContext<T> in) throws polyglot.types.SemanticException
DataFlow.dataflow(FlowGraph) on itcd - Code to flowin - initial variable contextcdpolyglot.types.SemanticException - thrown on an analysis errorprotected final java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<T>> flow(java.util.List<VarContext<T>> inItems, java.util.List<polyglot.visit.FlowGraph.EdgeKey> inItemKeys, polyglot.visit.FlowGraph<VarContext<T>> graph, polyglot.visit.FlowGraph.Peer<VarContext<T>> peer)
flow in class polyglot.visit.DataFlow<VarContext<T extends AbstractValue<T>>>public final java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<T>> flow(VarContext<T> trueItem, VarContext<T> falseItem, VarContext<T> otherItem, polyglot.visit.FlowGraph<VarContext<T>> graph, polyglot.visit.FlowGraph.Peer<VarContext<T>> peer)
FlowGraph.Peerflow in class polyglot.visit.DataFlow<VarContext<T extends AbstractValue<T>>>inItems - all the Items flowing into the node.inItemKeys - the FlowGraph.EdgeKeys for the items in the list inItemsgraph - the FlowGraphpeer - the Peerprotected void checkInvariants(java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<T>> m, polyglot.visit.FlowGraph<VarContext<T>> graph, polyglot.visit.FlowGraph.Peer<VarContext<T>> peer)
m - map holding the variable context for each exit pathgraph - the FlowGraphpeer - the Peerprotected VarContext<T> safeConfluence(java.util.List<VarContext<T>> items, java.util.List<polyglot.visit.FlowGraph.EdgeKey> itemKeys, polyglot.visit.FlowGraph.Peer<VarContext<T>> peer, polyglot.visit.FlowGraph<VarContext<T>> graph)
safeConfluence in class polyglot.visit.DataFlow<VarContext<T extends AbstractValue<T>>>protected VarContext<T> confluence(java.util.List<VarContext<T>> items, polyglot.visit.FlowGraph.Peer<VarContext<T>> peer, polyglot.visit.FlowGraph<VarContext<T>> graph)
confluence in class polyglot.visit.DataFlow<VarContext<T extends AbstractValue<T>>>protected abstract java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<T>> flowImpl(VarContext<T> trueItem, VarContext<T> falseItem, VarContext<T> otherItem, polyglot.visit.FlowGraph<VarContext<T>> graph, polyglot.visit.FlowGraph.Peer<VarContext<T>> peer)
protected void post(polyglot.visit.FlowGraph<VarContext<T>> graph, polyglot.ast.Term root) throws polyglot.types.SemanticException
post in class polyglot.visit.DataFlow<VarContext<T extends AbstractValue<T>>>polyglot.types.SemanticExceptionprotected void postFieldDecl(polyglot.visit.FlowGraph<VarContext<T>> graph, polyglot.visit.FlowGraph.Peer<VarContext<T>> p)
graph - p - public static ExitMap.Key edgeKeyConvert(polyglot.visit.FlowGraph.EdgeKey ek)
FlowGraph edge keys to FinalVarContext edge keysek - FlowGraph key to convertFinalVarContext edge keyprotected static polyglot.visit.FlowGraph.EdgeKey keyConvert(ExitMap.Key k)
FinalVarContext edge keys to FlowGraph edge keysek - FinalVarContext key to convertFlowGraph edge keypublic final java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<T>> finalVarContextToDataFlowMap(FinalVarContext<T> f, java.util.Set<polyglot.visit.FlowGraph.EdgeKey> succEdgeKeys, polyglot.visit.FlowGraph.Peer<VarContext<T>> peer)
f - variable context to convertsuccEdgeKeys - edge keys to retainnode - AST node where this is called (used for debugging)protected void setWarnOnEdgesMissingData(boolean warn)
warn - protected VarContext<T> constructMissingContextForEdgeKey(polyglot.visit.FlowGraph.EdgeKey ek, FinalVarContext<T> f, polyglot.visit.FlowGraph.Peer<VarContext<T>> peer)
ek - edge key of missing edgef - the finalVarContext that we were using.protected static <T extends AbstractValue<T>> int argumentsOnResultStack(polyglot.ast.Term t, VarContext<T> vc)
t - AST node to compute the number of arguments fortpublic java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<T>> flowField(polyglot.ast.Field n, VarContext<T> dfIn, polyglot.visit.FlowGraph<VarContext<T>> graph, polyglot.visit.FlowGraph.Peer<VarContext<T>> peer)
DataFlowDispatchnflowField in interface DataFlowDispatch<VarContext<T extends AbstractValue<T>>>n - AST node to compute the dataflow fordfIn - input dataflow itemgraph - dataflow graphpeer - occurance of the dataflow node in the flowgraphpublic java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<T>> flowReturn(polyglot.ast.Return n, VarContext<T> dfIn, polyglot.visit.FlowGraph<VarContext<T>> graph, polyglot.visit.FlowGraph.Peer<VarContext<T>> peer)
DataFlowDispatchnflowReturn in interface DataFlowDispatch<VarContext<T extends AbstractValue<T>>>n - AST node to compute the dataflow fordfIn - input dataflow itemgraph - dataflow graphpeer - occurance of the dataflow node in the flowgraphpublic java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<T>> flowAssert(polyglot.ast.Assert n, VarContext<T> dfIn, polyglot.visit.FlowGraph<VarContext<T>> graph, polyglot.visit.FlowGraph.Peer<VarContext<T>> peer)
DataFlowDispatchnflowAssert in interface DataFlowDispatch<VarContext<T extends AbstractValue<T>>>n - AST node to compute the dataflow fordfIn - input dataflow itemgraph - dataflow graphpeer - occurance of the dataflow node in the flowgraphpublic java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<T>> flowThrow(polyglot.ast.Throw n, VarContext<T> dfIn, polyglot.visit.FlowGraph<VarContext<T>> graph, polyglot.visit.FlowGraph.Peer<VarContext<T>> peer)
DataFlowDispatchnflowThrow in interface DataFlowDispatch<VarContext<T extends AbstractValue<T>>>n - AST node to compute the dataflow fordfIn - input dataflow itemgraph - dataflow graphpeer - occurance of the dataflow node in the flowgraphpublic java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<T>> flowConditional(polyglot.ast.Conditional n, VarContext<T> dfIn, polyglot.visit.FlowGraph<VarContext<T>> graph, polyglot.visit.FlowGraph.Peer<VarContext<T>> peer)
DataFlowDispatchnflowConditional in interface DataFlowDispatch<VarContext<T extends AbstractValue<T>>>n - AST node to compute the dataflow fordfIn - input dataflow itemgraph - dataflow graphpeer - occurance of the dataflow node in the flowgraphpublic java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<T>> flowCall(polyglot.ast.Call n, VarContext<T> dfIn, polyglot.visit.FlowGraph<VarContext<T>> graph, polyglot.visit.FlowGraph.Peer<VarContext<T>> peer)
DataFlowDispatchnflowCall in interface DataFlowDispatch<VarContext<T extends AbstractValue<T>>>n - AST node to compute the dataflow fordfIn - input dataflow itemgraph - dataflow graphpeer - occurance of the dataflow node in the flowgraphpublic java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<T>> flowNew(polyglot.ast.New n, VarContext<T> dfIn, polyglot.visit.FlowGraph<VarContext<T>> graph, polyglot.visit.FlowGraph.Peer<VarContext<T>> peer)
DataFlowDispatchnflowNew in interface DataFlowDispatch<VarContext<T extends AbstractValue<T>>>n - AST node to compute the dataflow fordfIn - input dataflow itemgraph - dataflow graphpeer - occurance of the dataflow node in the flowgraphpublic java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<T>> flowNewArray(polyglot.ast.NewArray n, VarContext<T> dfIn, polyglot.visit.FlowGraph<VarContext<T>> graph, polyglot.visit.FlowGraph.Peer<VarContext<T>> peer)
DataFlowDispatchnflowNewArray in interface DataFlowDispatch<VarContext<T extends AbstractValue<T>>>n - AST node to compute the dataflow fordfIn - input dataflow itemgraph - dataflow graphpeer - occurance of the dataflow node in the flowgraphpublic java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<T>> flowConstructorCall(polyglot.ast.ConstructorCall n, VarContext<T> dfIn, polyglot.visit.FlowGraph<VarContext<T>> graph, polyglot.visit.FlowGraph.Peer<VarContext<T>> peer)
DataFlowDispatchnflowConstructorCall in interface DataFlowDispatch<VarContext<T extends AbstractValue<T>>>n - AST node to compute the dataflow fordfIn - input dataflow itemgraph - dataflow graphpeer - occurance of the dataflow node in the flowgraphpublic java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<T>> flowUnary(polyglot.ast.Unary n, VarContext<T> dfIn, VarContext<T> trueItem, VarContext<T> falseItem, polyglot.visit.FlowGraph<VarContext<T>> graph, polyglot.visit.FlowGraph.Peer<VarContext<T>> peer)
DataFlowDispatchnflowUnary in interface DataFlowDispatch<VarContext<T extends AbstractValue<T>>>n - AST node to compute the dataflow fordfIn - input dataflow itemgraph - dataflow graphpeer - occurance of the dataflow node in the flowgraphpublic java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<T>> flowBinary(polyglot.ast.Binary n, VarContext<T> dfIn, VarContext<T> trueItem, VarContext<T> falseItem, polyglot.visit.FlowGraph<VarContext<T>> graph, polyglot.visit.FlowGraph.Peer<VarContext<T>> peer)
DataFlowDispatchnflowBinary in interface DataFlowDispatch<VarContext<T extends AbstractValue<T>>>n - AST node to compute the dataflow fordfIn - input dataflow itemgraph - dataflow graphpeer - occurance of the dataflow node in the flowgraphpublic java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<T>> flowAssign(polyglot.ast.Assign n, VarContext<T> dfIn, polyglot.visit.FlowGraph<VarContext<T>> graph, polyglot.visit.FlowGraph.Peer<VarContext<T>> peer)
nn - AST node to compute the dataflow fordfIn - input dataflow itemgraph - dataflow graphpeer - occurance of the dataflow node in the flowgraphpublic java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<T>> flowTypeNode(polyglot.ast.TypeNode n, VarContext<T> dfIn, polyglot.visit.FlowGraph<VarContext<T>> graph, polyglot.visit.FlowGraph.Peer<VarContext<T>> peer)
DataFlowDispatchnflowTypeNode in interface DataFlowDispatch<VarContext<T extends AbstractValue<T>>>n - AST node to compute the dataflow fordfIn - input dataflow itemgraph - dataflow graphpeer - occurance of the dataflow node in the flowgraphpublic java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<T>> flowInstanceof(polyglot.ast.Instanceof n, VarContext<T> dfIn, polyglot.visit.FlowGraph<VarContext<T>> graph, polyglot.visit.FlowGraph.Peer<VarContext<T>> peer)
DataFlowDispatchnflowInstanceof in interface DataFlowDispatch<VarContext<T extends AbstractValue<T>>>n - AST node to compute the dataflow fordfIn - input dataflow itemgraph - dataflow graphpeer - occurance of the dataflow node in the flowgraphpublic java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<T>> flowCast(polyglot.ast.Cast n, VarContext<T> dfIn, polyglot.visit.FlowGraph<VarContext<T>> graph, polyglot.visit.FlowGraph.Peer<VarContext<T>> peer)
DataFlowDispatchnflowCast in interface DataFlowDispatch<VarContext<T extends AbstractValue<T>>>n - AST node to compute the dataflow fordfIn - input dataflow itemgraph - dataflow graphpeer - occurance of the dataflow node in the flowgraphpublic java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<T>> flowLocalDecl(polyglot.ast.LocalDecl n, VarContext<T> dfIn, polyglot.visit.FlowGraph<VarContext<T>> graph, polyglot.visit.FlowGraph.Peer<VarContext<T>> peer)
DataFlowDispatchnflowLocalDecl in interface DataFlowDispatch<VarContext<T extends AbstractValue<T>>>n - AST node to compute the dataflow fordfIn - input dataflow itemgraph - dataflow graphpeer - occurance of the dataflow node in the flowgraphpublic java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<T>> flowFormal(polyglot.ast.Formal n, VarContext<T> dfIn, polyglot.visit.FlowGraph<VarContext<T>> graph, polyglot.visit.FlowGraph.Peer<VarContext<T>> peer)
DataFlowDispatchnflowFormal in interface DataFlowDispatch<VarContext<T extends AbstractValue<T>>>n - AST node to compute the dataflow fordfIn - input dataflow itemgraph - dataflow graphpeer - occurance of the dataflow node in the flowgraphpublic java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<T>> flowLit(polyglot.ast.Lit n, VarContext<T> dfIn, polyglot.visit.FlowGraph<VarContext<T>> graph, polyglot.visit.FlowGraph.Peer<VarContext<T>> peer)
DataFlowDispatchnflowLit in interface DataFlowDispatch<VarContext<T extends AbstractValue<T>>>n - AST node to compute the dataflow fordfIn - input dataflow itemgraph - dataflow graphpeer - occurance of the dataflow node in the flowgraphpublic java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<T>> flowEmpty(polyglot.ast.Empty n, VarContext<T> dfIn, polyglot.visit.FlowGraph<VarContext<T>> graph, polyglot.visit.FlowGraph.Peer<VarContext<T>> peer)
DataFlowDispatchnflowEmpty in interface DataFlowDispatch<VarContext<T extends AbstractValue<T>>>n - AST node to compute the dataflow fordfIn - input dataflow itemgraph - dataflow graphpeer - occurance of the dataflow node in the flowgraphpublic java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<T>> flowLocalAssign(polyglot.ast.LocalAssign n, VarContext<T> dfIn, polyglot.visit.FlowGraph<VarContext<T>> graph, polyglot.visit.FlowGraph.Peer<VarContext<T>> peer)
DataFlowDispatchnflowLocalAssign in interface DataFlowDispatch<VarContext<T extends AbstractValue<T>>>n - AST node to compute the dataflow fordfIn - input dataflow itemgraph - dataflow graphpeer - occurance of the dataflow node in the flowgraphpublic java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<T>> flowArrayAccessAssign(polyglot.ast.ArrayAccessAssign n, VarContext<T> dfIn, polyglot.visit.FlowGraph<VarContext<T>> graph, polyglot.visit.FlowGraph.Peer<VarContext<T>> peer)
DataFlowDispatchnflowArrayAccessAssign in interface DataFlowDispatch<VarContext<T extends AbstractValue<T>>>n - AST node to compute the dataflow fordfIn - input dataflow itemgraph - dataflow graphpeer - occurance of the dataflow node in the flowgraphpublic java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<T>> flowFieldAssign(polyglot.ast.FieldAssign n, VarContext<T> dfIn, polyglot.visit.FlowGraph<VarContext<T>> graph, polyglot.visit.FlowGraph.Peer<VarContext<T>> peer)
DataFlowDispatchnflowFieldAssign in interface DataFlowDispatch<VarContext<T extends AbstractValue<T>>>n - AST node to compute the dataflow fordfIn - input dataflow itemgraph - dataflow graphpeer - occurance of the dataflow node in the flowgraphpublic java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<T>> flowFieldDecl(polyglot.ast.FieldDecl n, VarContext<T> dfIn, polyglot.visit.FlowGraph<VarContext<T>> graph, polyglot.visit.FlowGraph.Peer<VarContext<T>> peer)
DataFlowDispatchnflowFieldDecl in interface DataFlowDispatch<VarContext<T extends AbstractValue<T>>>n - AST node to compute the dataflow fordfIn - input dataflow itemgraph - dataflow graphpeer - occurance of the dataflow node in the flowgraphpublic java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<T>> flowArrayAccess(polyglot.ast.ArrayAccess n, VarContext<T> dfIn, polyglot.visit.FlowGraph<VarContext<T>> graph, polyglot.visit.FlowGraph.Peer<VarContext<T>> peer)
DataFlowDispatchnflowArrayAccess in interface DataFlowDispatch<VarContext<T extends AbstractValue<T>>>n - AST node to compute the dataflow fordfIn - input dataflow itemgraph - dataflow graphpeer - occurrence of the dataflow node in the flowgraphpublic java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<T>> flowArrayInit(polyglot.ast.ArrayInit n, VarContext<T> dfIn, polyglot.visit.FlowGraph<VarContext<T>> graph, polyglot.visit.FlowGraph.Peer<VarContext<T>> peer)
DataFlowDispatchnflowArrayInit in interface DataFlowDispatch<VarContext<T extends AbstractValue<T>>>n - AST node to compute the dataflow fordfIn - input dataflow itemgraph - dataflow graphpeer - occurance of the dataflow node in the flowgraphpublic java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<T>> flowStmt(polyglot.ast.Stmt n, VarContext<T> dfIn, polyglot.visit.FlowGraph<VarContext<T>> graph, polyglot.visit.FlowGraph.Peer<VarContext<T>> peer)
nn - AST node to compute the dataflow fordfIn - input dataflow itemgraph - dataflow graphpeer - occurance of the dataflow node in the flowgraphpublic java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<T>> flowTry(polyglot.ast.Try n, VarContext<T> dfIn, polyglot.visit.FlowGraph<VarContext<T>> graph, polyglot.visit.FlowGraph.Peer<VarContext<T>> peer)
DataFlowDispatchnflowTry in interface DataFlowDispatch<VarContext<T extends AbstractValue<T>>>n - AST node to compute the dataflow fordfIn - input dataflow itemgraph - dataflow graphpeer - occurance of the dataflow node in the flowgraphpublic java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<T>> flowCatch(polyglot.ast.Catch n, VarContext<T> dfIn, polyglot.visit.FlowGraph<VarContext<T>> graph, polyglot.visit.FlowGraph.Peer<VarContext<T>> peer)
DataFlowDispatchnflowCatch in interface DataFlowDispatch<VarContext<T extends AbstractValue<T>>>n - AST node to compute the dataflow fordfIn - input dataflow itemgraph - dataflow graphpeer - occurance of the dataflow node in the flowgraphpublic java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<T>> flowFinally(polyglot.ast.Block n, VarContext<T> dfIn, polyglot.visit.FlowGraph<VarContext<T>> graph, polyglot.visit.FlowGraph.Peer<VarContext<T>> peer)
DataFlowDispatchnflowFinally in interface DataFlowDispatch<VarContext<T extends AbstractValue<T>>>n - AST node to compute the dataflow fordfIn - input dataflow itemgraph - dataflow graphpeer - occurance of the dataflow node in the flowgraphpublic java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<T>> flowEval(polyglot.ast.Eval n, VarContext<T> dfIn, polyglot.visit.FlowGraph<VarContext<T>> graph, polyglot.visit.FlowGraph.Peer<VarContext<T>> peer)
DataFlowDispatchnflowEval in interface DataFlowDispatch<VarContext<T extends AbstractValue<T>>>n - AST node to compute the dataflow fordfIn - input dataflow itemgraph - dataflow graphpeer - occurance of the dataflow node in the flowgraphpublic java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<T>> flowBranch(polyglot.ast.Branch n, VarContext<T> dfIn, polyglot.visit.FlowGraph<VarContext<T>> graph, polyglot.visit.FlowGraph.Peer<VarContext<T>> peer)
DataFlowDispatchnflowBranch in interface DataFlowDispatch<VarContext<T extends AbstractValue<T>>>n - AST node to compute the dataflow fordfIn - input dataflow itemgraph - dataflow graphpeer - occurance of the dataflow node in the flowgraphpublic java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<T>> flowLabeled(polyglot.ast.Labeled n, VarContext<T> dfIn, polyglot.visit.FlowGraph<VarContext<T>> graph, polyglot.visit.FlowGraph.Peer<VarContext<T>> peer)
DataFlowDispatchnflowLabeled in interface DataFlowDispatch<VarContext<T extends AbstractValue<T>>>n - AST node to compute the dataflow fordfIn - input dataflow itemgraph - dataflow graphpeer - occurance of the dataflow node in the flowgraphpublic java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<T>> flowExpr(polyglot.ast.Expr n, VarContext<T> dfIn, polyglot.visit.FlowGraph<VarContext<T>> graph, polyglot.visit.FlowGraph.Peer<VarContext<T>> peer)
DataFlowDispatchnflowExpr in interface DataFlowDispatch<VarContext<T extends AbstractValue<T>>>n - AST node to compute the dataflow fordfIn - input dataflow itemgraph - dataflow graphpeer - occurance of the dataflow node in the flowgraphpublic java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<T>> flowIf(polyglot.ast.If n, VarContext<T> dfIn, polyglot.visit.FlowGraph<VarContext<T>> graph, polyglot.visit.FlowGraph.Peer<VarContext<T>> peer)
DataFlowDispatchnflowIf in interface DataFlowDispatch<VarContext<T extends AbstractValue<T>>>n - AST node to compute the dataflow fordfIn - input dataflow itemgraph - dataflow graphpeer - occurance of the dataflow node in the flowgraphpublic java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<T>> flowBlock(polyglot.ast.Block n, VarContext<T> dfIn, polyglot.visit.FlowGraph<VarContext<T>> graph, polyglot.visit.FlowGraph.Peer<VarContext<T>> peer)
DataFlowDispatchnflowBlock in interface DataFlowDispatch<VarContext<T extends AbstractValue<T>>>n - AST node to compute the dataflow fordfIn - input dataflow itemgraph - dataflow graphpeer - occurance of the dataflow node in the flowgraphpublic java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<T>> flowWhile(polyglot.ast.While n, VarContext<T> dfIn, polyglot.visit.FlowGraph<VarContext<T>> graph, polyglot.visit.FlowGraph.Peer<VarContext<T>> peer)
DataFlowDispatchnflowWhile in interface DataFlowDispatch<VarContext<T extends AbstractValue<T>>>n - AST node to compute the dataflow fordfIn - input dataflow itemgraph - dataflow graphpeer - occurance of the dataflow node in the flowgraphpublic java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<T>> flowDo(polyglot.ast.Do n, VarContext<T> dfIn, polyglot.visit.FlowGraph<VarContext<T>> graph, polyglot.visit.FlowGraph.Peer<VarContext<T>> peer)
DataFlowDispatchnflowDo in interface DataFlowDispatch<VarContext<T extends AbstractValue<T>>>n - AST node to compute the dataflow fordfIn - input dataflow itemgraph - dataflow graphpeer - occurance of the dataflow node in the flowgraphpublic java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<T>> flowLocal(polyglot.ast.Local n, VarContext<T> dfIn, polyglot.visit.FlowGraph<VarContext<T>> graph, polyglot.visit.FlowGraph.Peer<VarContext<T>> peer)
DataFlowDispatchnflowLocal in interface DataFlowDispatch<VarContext<T extends AbstractValue<T>>>n - AST node to compute the dataflow fordfIn - input dataflow itemgraph - dataflow graphpeer - occurance of the dataflow node in the flowgraphpublic java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<T>> flowSuppress(Suppress n, VarContext<T> dfIn, polyglot.visit.FlowGraph<VarContext<T>> graph, polyglot.visit.FlowGraph.Peer<VarContext<T>> peer)
DataFlowDispatchnflowSuppress in interface DataFlowDispatch<VarContext<T extends AbstractValue<T>>>n - AST node to compute the dataflow fordfIn - input dataflow itemgraph - dataflow graphpeer - occurance of the dataflow node in the flowgraphpublic java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<T>> flowSynchronized(polyglot.ast.Synchronized n, VarContext<T> dfIn, polyglot.visit.FlowGraph<VarContext<T>> graph, polyglot.visit.FlowGraph.Peer<VarContext<T>> peer)
DataFlowDispatchnflowSynchronized in interface DataFlowDispatch<VarContext<T extends AbstractValue<T>>>n - AST node to compute the dataflow fordfIn - input dataflow itemgraph - dataflow graphpeer - occurance of the dataflow node in the flowgraphpublic java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<T>> flowSpecial(polyglot.ast.Special n, VarContext<T> dfIn, polyglot.visit.FlowGraph<VarContext<T>> graph, polyglot.visit.FlowGraph.Peer<VarContext<T>> peer)
DataFlowDispatchnflowSpecial in interface DataFlowDispatch<VarContext<T extends AbstractValue<T>>>n - AST node to compute the dataflow fordfIn - input dataflow itemgraph - dataflow graphpeer - occurance of the dataflow node in the flowgraphpublic java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<T>> flowCodeDecl(polyglot.ast.CodeDecl n, VarContext<T> dfIn, polyglot.visit.FlowGraph<VarContext<T>> graph, polyglot.visit.FlowGraph.Peer<VarContext<T>> peer)
nn - AST node to compute the dataflow fordfIn - input dataflow itemgraph - dataflow graphpeer - occurance of the dataflow node in the flowgraphpublic java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<T>> flowMethodDecl(polyglot.ast.MethodDecl n, VarContext<T> dfIn, polyglot.visit.FlowGraph<VarContext<T>> graph, polyglot.visit.FlowGraph.Peer<VarContext<T>> peer)
DataFlowDispatchnflowMethodDecl in interface DataFlowDispatch<VarContext<T extends AbstractValue<T>>>n - AST node to compute the dataflow fordfIn - input dataflow itemgraph - dataflow graphpeer - occurance of the dataflow node in the flowgraphpublic java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<T>> flowConstructorDecl(polyglot.ast.ConstructorDecl n, VarContext<T> dfIn, polyglot.visit.FlowGraph<VarContext<T>> graph, polyglot.visit.FlowGraph.Peer<VarContext<T>> peer)
DataFlowDispatchnflowConstructorDecl in interface DataFlowDispatch<VarContext<T extends AbstractValue<T>>>n - AST node to compute the dataflow fordfIn - input dataflow itemgraph - dataflow graphpeer - occurance of the dataflow node in the flowgraphpublic java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<T>> flowInitializer(polyglot.ast.Initializer n, VarContext<T> dfIn, polyglot.visit.FlowGraph<VarContext<T>> graph, polyglot.visit.FlowGraph.Peer<VarContext<T>> peer)
DataFlowDispatchnflowInitializer in interface DataFlowDispatch<VarContext<T extends AbstractValue<T>>>n - AST node to compute the dataflow fordfIn - input dataflow itemgraph - dataflow graphpeer - occurance of the dataflow node in the flowgraphpublic java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<T>> ignoreNode(VarContext<T> dfIn, polyglot.visit.FlowGraph<VarContext<T>> graph, polyglot.visit.FlowGraph.Peer<VarContext<T>> peer)
DataFlowDispatchignoreNode in interface DataFlowDispatch<VarContext<T extends AbstractValue<T>>>