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, peerForDataFlowNodeIdentifier
check, 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, safeConfluence
begin, catchErrors, enter, enterCall, enterError, errorQueue, hasErrors, job, leaveCall, leaveCall, nodeFactory, typeSystem
bypass, bypass, bypassChildren, override, visitChildren
public 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 Job
ts
- 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 Job
ts
- 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 contextcd
polyglot.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.Peer
flow
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.SemanticException
protected 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 fort
public 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)
DataFlowDispatch
n
flowField
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)
DataFlowDispatch
n
flowReturn
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)
DataFlowDispatch
n
flowAssert
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)
DataFlowDispatch
n
flowThrow
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)
DataFlowDispatch
n
flowConditional
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)
DataFlowDispatch
n
flowCall
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)
DataFlowDispatch
n
flowNew
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)
DataFlowDispatch
n
flowNewArray
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)
DataFlowDispatch
n
flowConstructorCall
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)
DataFlowDispatch
n
flowUnary
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)
DataFlowDispatch
n
flowBinary
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)
n
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>> flowTypeNode(polyglot.ast.TypeNode n, VarContext<T> dfIn, polyglot.visit.FlowGraph<VarContext<T>> graph, polyglot.visit.FlowGraph.Peer<VarContext<T>> peer)
DataFlowDispatch
n
flowTypeNode
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)
DataFlowDispatch
n
flowInstanceof
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)
DataFlowDispatch
n
flowCast
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)
DataFlowDispatch
n
flowLocalDecl
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)
DataFlowDispatch
n
flowFormal
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)
DataFlowDispatch
n
flowLit
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)
DataFlowDispatch
n
flowEmpty
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)
DataFlowDispatch
n
flowLocalAssign
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)
DataFlowDispatch
n
flowArrayAccessAssign
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)
DataFlowDispatch
n
flowFieldAssign
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)
DataFlowDispatch
n
flowFieldDecl
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)
DataFlowDispatch
n
flowArrayAccess
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)
DataFlowDispatch
n
flowArrayInit
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)
n
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>> flowTry(polyglot.ast.Try n, VarContext<T> dfIn, polyglot.visit.FlowGraph<VarContext<T>> graph, polyglot.visit.FlowGraph.Peer<VarContext<T>> peer)
DataFlowDispatch
n
flowTry
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)
DataFlowDispatch
n
flowCatch
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)
DataFlowDispatch
n
flowFinally
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)
DataFlowDispatch
n
flowEval
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)
DataFlowDispatch
n
flowBranch
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)
DataFlowDispatch
n
flowLabeled
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)
DataFlowDispatch
n
flowExpr
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)
DataFlowDispatch
n
flowIf
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)
DataFlowDispatch
n
flowBlock
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)
DataFlowDispatch
n
flowWhile
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)
DataFlowDispatch
n
flowDo
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)
DataFlowDispatch
n
flowLocal
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)
DataFlowDispatch
n
flowSuppress
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)
DataFlowDispatch
n
flowSynchronized
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)
DataFlowDispatch
n
flowSpecial
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)
n
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>> flowMethodDecl(polyglot.ast.MethodDecl n, VarContext<T> dfIn, polyglot.visit.FlowGraph<VarContext<T>> graph, polyglot.visit.FlowGraph.Peer<VarContext<T>> peer)
DataFlowDispatch
n
flowMethodDecl
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)
DataFlowDispatch
n
flowConstructorDecl
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)
DataFlowDispatch
n
flowInitializer
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)
DataFlowDispatch
ignoreNode
in interface DataFlowDispatch<VarContext<T extends AbstractValue<T>>>