public class CtlDepDataFlow extends PreciseDataFlow<CDAbsVal>
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 |
---|---|
protected CtlDepAnalysisUtil |
autil |
protected CDAbsVal |
ENTRY |
protected polyglot.util.SubtypeSet |
ignoredExceptions |
Constructor and Description |
---|
CtlDepDataFlow(CtlDepAnalysisUtil autil,
polyglot.frontend.Job job,
polyglot.types.TypeSystem ts,
polyglot.ast.NodeFactory nf) |
Modifier and Type | Method and Description |
---|---|
static void |
addResults(java.lang.String resultKey,
AccrueExt rec,
AnalysisContext ctx,
polyglot.visit.FlowGraph.PeerKey pk,
java.util.Set<EdgeIdentifier> results)
Adds a set of results to the current set
|
CtlDepAnalysisUtil |
autil() |
protected void |
check(polyglot.visit.FlowGraph<CDAbsVal> graph,
polyglot.visit.FlowGraph.Peer<CDAbsVal> p) |
protected void |
check(polyglot.visit.FlowGraph<CDAbsVal> graph,
polyglot.ast.Term n,
boolean entry,
CDAbsVal inItem,
java.util.Map<polyglot.visit.FlowGraph.EdgeKey,CDAbsVal> outItems) |
protected CDAbsVal |
confluence(java.util.List<CDAbsVal> items,
polyglot.visit.FlowGraph.Peer<CDAbsVal> peer,
polyglot.visit.FlowGraph<CDAbsVal> graph) |
protected CDAbsVal |
createInitialItem(polyglot.visit.FlowGraph<CDAbsVal> graph,
polyglot.ast.Term node,
boolean entry) |
ExitMap<CDAbsVal> |
dataflow(polyglot.ast.CodeNode cd,
CDAbsVal in) |
protected java.util.Map<polyglot.visit.FlowGraph.EdgeKey,CDAbsVal> |
flow(java.util.List<CDAbsVal> inItems,
java.util.List<polyglot.visit.FlowGraph.EdgeKey> inItemKeys,
polyglot.visit.FlowGraph<CDAbsVal> graph,
polyglot.visit.FlowGraph.Peer<CDAbsVal> peer) |
protected java.util.Map<polyglot.visit.FlowGraph.EdgeKey,CDAbsVal> |
flowControlDeps(CDAbsVal dfIn,
polyglot.visit.FlowGraph<CDAbsVal> graph,
polyglot.visit.FlowGraph.Peer<CDAbsVal> peer) |
DataFlowNodeIdentifier |
idForPeer(polyglot.visit.FlowGraph.Peer<CDAbsVal> p) |
void |
recordBranches(CDAbsVal dfIn,
polyglot.visit.FlowGraph<CDAbsVal> graph,
polyglot.visit.FlowGraph.Peer<CDAbsVal> peer) |
CDAbsVal |
removePostDomDeps(DataFlowNodeIdentifier nodeID,
CDAbsVal dfIn) |
boolean |
throwsNonFatalExceptions(polyglot.ast.Term n)
Returns true if this node throws exceptions that may be caught.
|
createCFGBuilder, currentContext, dataFlowNodeIdentifierForPeer, dataFlowNodeIdentifierForPeer, initGraph, peerForDataFlowNodeIdentifier
confluence, constructItemsFromCondition, createFrame, createInitialItem, currentFlowGraph, dataflow, dataflow, dataflow, dumpFlowGraph, enterCall, filterItems, filterItemsExceptionSubclass, filterItemsNonError, filterItemsNonException, findSCCs, 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
protected CtlDepAnalysisUtil autil
protected polyglot.util.SubtypeSet ignoredExceptions
protected CDAbsVal ENTRY
public CtlDepDataFlow(CtlDepAnalysisUtil autil, polyglot.frontend.Job job, polyglot.types.TypeSystem ts, polyglot.ast.NodeFactory nf)
public ExitMap<CDAbsVal> dataflow(polyglot.ast.CodeNode cd, CDAbsVal in) throws polyglot.types.SemanticException
polyglot.types.SemanticException
protected void check(polyglot.visit.FlowGraph<CDAbsVal> graph, polyglot.visit.FlowGraph.Peer<CDAbsVal> p) throws polyglot.types.SemanticException
check
in class polyglot.visit.DataFlow<CDAbsVal>
polyglot.types.SemanticException
protected CDAbsVal confluence(java.util.List<CDAbsVal> items, polyglot.visit.FlowGraph.Peer<CDAbsVal> peer, polyglot.visit.FlowGraph<CDAbsVal> graph)
confluence
in class polyglot.visit.DataFlow<CDAbsVal>
protected java.util.Map<polyglot.visit.FlowGraph.EdgeKey,CDAbsVal> flow(java.util.List<CDAbsVal> inItems, java.util.List<polyglot.visit.FlowGraph.EdgeKey> inItemKeys, polyglot.visit.FlowGraph<CDAbsVal> graph, polyglot.visit.FlowGraph.Peer<CDAbsVal> peer)
flow
in class polyglot.visit.DataFlow<CDAbsVal>
public DataFlowNodeIdentifier idForPeer(polyglot.visit.FlowGraph.Peer<CDAbsVal> p)
protected CDAbsVal createInitialItem(polyglot.visit.FlowGraph<CDAbsVal> graph, polyglot.ast.Term node, boolean entry)
createInitialItem
in class polyglot.visit.DataFlow<CDAbsVal>
public CtlDepAnalysisUtil autil()
autil
in class PreciseDataFlow<CDAbsVal>
public CDAbsVal removePostDomDeps(DataFlowNodeIdentifier nodeID, CDAbsVal dfIn)
protected java.util.Map<polyglot.visit.FlowGraph.EdgeKey,CDAbsVal> flowControlDeps(CDAbsVal dfIn, polyglot.visit.FlowGraph<CDAbsVal> graph, polyglot.visit.FlowGraph.Peer<CDAbsVal> peer)
public boolean throwsNonFatalExceptions(polyglot.ast.Term n)
public static void addResults(java.lang.String resultKey, AccrueExt rec, AnalysisContext ctx, polyglot.visit.FlowGraph.PeerKey pk, java.util.Set<EdgeIdentifier> results)
resultKey
- The key of the analysis result to record.rec
- The extension object to record these results on.ctx
- The AnalysisContext to associate these results with.pk
- The PeerKey to associate these results with.results
- protected void check(polyglot.visit.FlowGraph<CDAbsVal> graph, polyglot.ast.Term n, boolean entry, CDAbsVal inItem, java.util.Map<polyglot.visit.FlowGraph.EdgeKey,CDAbsVal> outItems) throws polyglot.types.SemanticException
check
in class polyglot.visit.DataFlow<CDAbsVal>
polyglot.types.SemanticException