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, peerForDataFlowNodeIdentifierconfluence, 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, safeConfluencebegin, catchErrors, enter, enterCall, enterError, errorQueue, hasErrors, job, leaveCall, leaveCall, nodeFactory, typeSystembypass, bypass, bypassChildren, override, visitChildrenprotected 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.SemanticExceptionprotected 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.SemanticExceptionprotected 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