FlowItem
- The DataFlow.Item that the dataflow propagatespublic abstract class PreciseDataFlow<FlowItem extends polyglot.visit.DataFlow.Item>
extends polyglot.visit.DataFlow<FlowItem>
Modifier and Type | Class and Description |
---|---|
static class |
PreciseDataFlow.PreciseCFGBuilder<FlowItem extends polyglot.visit.DataFlow.Item>
A more precise CFG builder that adds Exception edges only for
exceptions that might actually be thrown.
|
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
Constructor and Description |
---|
PreciseDataFlow(AnalysisUtil<?> autil,
polyglot.frontend.Job job,
polyglot.types.TypeSystem ts,
polyglot.ast.NodeFactory nf,
boolean forward)
Create a new dataflow visitor
|
PreciseDataFlow(AnalysisUtil<?> autil,
polyglot.frontend.Job job,
polyglot.types.TypeSystem ts,
polyglot.ast.NodeFactory nf,
boolean forward,
boolean dataflowOnEntry)
Create a new dataflow visitor
|
PreciseDataFlow(AnalysisUtil<?> autil,
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 AnalysisUtil<?> |
autil() |
protected polyglot.visit.CFGBuilder<FlowItem> |
createCFGBuilder(polyglot.types.TypeSystem ts,
polyglot.visit.FlowGraph<FlowItem> g) |
AnalysisContext |
currentContext() |
protected DataFlowNodeIdentifier |
dataFlowNodeIdentifierForPeer(polyglot.visit.FlowGraph.Peer<FlowItem> peer)
Get the dataflow identifier object for the given flowgraph peer
|
protected static <FlowItem extends polyglot.visit.DataFlow.Item> |
dataFlowNodeIdentifierForPeer(polyglot.visit.FlowGraph.Peer<FlowItem> peer,
AnalysisContext currentContext)
Get the dataflow identifier object for the given flowgraph peer in the
given context
|
protected polyglot.visit.FlowGraph<FlowItem> |
initGraph(polyglot.ast.CodeNode code,
polyglot.ast.Term root) |
protected static <FlowItem extends polyglot.visit.DataFlow.Item> |
peerForDataFlowNodeIdentifier(DataFlowNodeIdentifier bi,
polyglot.visit.FlowGraph<FlowItem> graph)
Get the flowgraph peer for the given dataflow identifier
|
check, check, confluence, confluence, constructItemsFromCondition, createFrame, createInitialItem, createInitialItem, currentFlowGraph, dataflow, dataflow, dataflow, dumpFlowGraph, enterCall, filterItems, filterItemsExceptionSubclass, filterItemsNonError, filterItemsNonException, findSCCs, flow, flow, flow, flow, flow, flowBooleanConditions, flowToBooleanFlow, hasTrueFalseBranches, initGraph, itemsToMap, itemToMap, lang, leave, leaveCall, post, safeConfluence, safeConfluence, safeConfluence
begin, catchErrors, enter, enterCall, enterError, errorQueue, hasErrors, job, leaveCall, leaveCall, nodeFactory, typeSystem
bypass, bypass, bypassChildren, override, visitChildren
public PreciseDataFlow(AnalysisUtil<?> autil, polyglot.frontend.Job job, polyglot.types.TypeSystem ts, polyglot.ast.NodeFactory nf, boolean forward)
autil
- Analysis helper classjob
- Polyglot compiler Job
ts
- Polyglot type systemnf
- factory for creating AST nodesforward
- forward or backward dataflowpublic PreciseDataFlow(AnalysisUtil<?> autil, polyglot.frontend.Job job, polyglot.types.TypeSystem ts, polyglot.ast.NodeFactory nf, boolean forward, boolean dataflowOnEntry)
context
- Initial analysis contextautil
- Analysis helper classjob
- Polyglot compiler Job
ts
- Polyglot type systemnf
- factory for creating AST nodesforward
- forward or backward dataflowdataflowOnEntry
- true if we want to process the entry nodepublic PreciseDataFlow(AnalysisUtil<?> autil, polyglot.frontend.Job job, polyglot.types.TypeSystem ts, polyglot.ast.NodeFactory nf, boolean forward, boolean dataflowOnEntry, boolean trackBackEdges)
autil
- Analysis helper classjob
- 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 flowgraph edgesprotected polyglot.visit.CFGBuilder<FlowItem> createCFGBuilder(polyglot.types.TypeSystem ts, polyglot.visit.FlowGraph<FlowItem> g)
createCFGBuilder
in class polyglot.visit.DataFlow<FlowItem extends polyglot.visit.DataFlow.Item>
protected polyglot.visit.FlowGraph<FlowItem> initGraph(polyglot.ast.CodeNode code, polyglot.ast.Term root)
initGraph
in class polyglot.visit.DataFlow<FlowItem extends polyglot.visit.DataFlow.Item>
public AnalysisContext currentContext()
protected AnalysisUtil<?> autil()
protected DataFlowNodeIdentifier dataFlowNodeIdentifierForPeer(polyglot.visit.FlowGraph.Peer<FlowItem> peer)
peer
- flowgraph peerprotected static <FlowItem extends polyglot.visit.DataFlow.Item> DataFlowNodeIdentifier dataFlowNodeIdentifierForPeer(polyglot.visit.FlowGraph.Peer<FlowItem> peer, AnalysisContext currentContext)
peer
- flowgraph peercurrentContext
- current analysis contextprotected static <FlowItem extends polyglot.visit.DataFlow.Item> polyglot.visit.FlowGraph.Peer<FlowItem> peerForDataFlowNodeIdentifier(DataFlowNodeIdentifier bi, polyglot.visit.FlowGraph<FlowItem> graph)
bi
- dataflow identifiergraph
- dataflow graph