public class PostDominatorDataFlow extends PreciseDataFlow<accrue.analysis.domination.ImmediatePostDominator>
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 DominationAnalysisUtil |
autil |
protected java.util.Map<polyglot.visit.FlowGraph.Peer<accrue.analysis.domination.ImmediatePostDominator>,accrue.analysis.domination.ImmediatePostDominator> |
postdoms |
Constructor and Description |
---|
PostDominatorDataFlow(polyglot.frontend.Job job,
polyglot.types.TypeSystem ts,
polyglot.ast.NodeFactory nf,
DominationAnalysisUtil autil) |
Modifier and Type | Method and Description |
---|---|
protected void |
check(polyglot.visit.FlowGraph<accrue.analysis.domination.ImmediatePostDominator> graph,
polyglot.visit.FlowGraph.Peer<accrue.analysis.domination.ImmediatePostDominator> p) |
protected void |
check(polyglot.visit.FlowGraph<accrue.analysis.domination.ImmediatePostDominator> graph,
polyglot.ast.Term n,
boolean entry,
accrue.analysis.domination.ImmediatePostDominator inItem,
java.util.Map<polyglot.visit.FlowGraph.EdgeKey,accrue.analysis.domination.ImmediatePostDominator> outItems) |
protected accrue.analysis.domination.ImmediatePostDominator |
confluence(java.util.List<accrue.analysis.domination.ImmediatePostDominator> items,
polyglot.visit.FlowGraph.Peer<accrue.analysis.domination.ImmediatePostDominator> peer,
polyglot.visit.FlowGraph<accrue.analysis.domination.ImmediatePostDominator> graph) |
protected accrue.analysis.domination.ImmediatePostDominator |
createInitialItem(polyglot.visit.FlowGraph<accrue.analysis.domination.ImmediatePostDominator> graph,
polyglot.ast.Term node,
boolean entry)
Create an initial Item for the dataflow analysis.
|
protected void |
dataflow(polyglot.visit.FlowGraph<accrue.analysis.domination.ImmediatePostDominator> graph) |
protected java.util.Map<polyglot.visit.FlowGraph.EdgeKey,accrue.analysis.domination.ImmediatePostDominator> |
flow(java.util.List<accrue.analysis.domination.ImmediatePostDominator> inItems,
java.util.List<polyglot.visit.FlowGraph.EdgeKey> inItemKeys,
polyglot.visit.FlowGraph<accrue.analysis.domination.ImmediatePostDominator> graph,
polyglot.visit.FlowGraph.Peer<accrue.analysis.domination.ImmediatePostDominator> peer) |
protected accrue.analysis.domination.ImmediatePostDominator |
intersect(accrue.analysis.domination.ImmediatePostDominator a,
accrue.analysis.domination.ImmediatePostDominator b) |
protected accrue.analysis.domination.ImmediatePostDominator |
intersect(java.util.List<polyglot.visit.FlowGraph.Edge<accrue.analysis.domination.ImmediatePostDominator>> edges,
polyglot.visit.FlowGraph<accrue.analysis.domination.ImmediatePostDominator> graph)
Find immediate postdominator for all edges in edges.
|
protected accrue.analysis.domination.ImmediatePostDominator |
ipd(polyglot.visit.FlowGraph.Edge<accrue.analysis.domination.ImmediatePostDominator> e,
polyglot.visit.FlowGraph<accrue.analysis.domination.ImmediatePostDominator> graph) |
void |
performDataflow(polyglot.ast.CodeNode cd) |
protected void |
record(accrue.analysis.domination.ImmediatePostDominator ipd,
polyglot.visit.FlowGraph.Peer<accrue.analysis.domination.ImmediatePostDominator> p) |
autil, createCFGBuilder, currentContext, dataFlowNodeIdentifierForPeer, dataFlowNodeIdentifierForPeer, initGraph, peerForDataFlowNodeIdentifier
confluence, constructItemsFromCondition, createFrame, createInitialItem, currentFlowGraph, 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 final DominationAnalysisUtil autil
protected final java.util.Map<polyglot.visit.FlowGraph.Peer<accrue.analysis.domination.ImmediatePostDominator>,accrue.analysis.domination.ImmediatePostDominator> postdoms
public PostDominatorDataFlow(polyglot.frontend.Job job, polyglot.types.TypeSystem ts, polyglot.ast.NodeFactory nf, DominationAnalysisUtil autil)
protected accrue.analysis.domination.ImmediatePostDominator createInitialItem(polyglot.visit.FlowGraph<accrue.analysis.domination.ImmediatePostDominator> graph, polyglot.ast.Term node, boolean entry)
createInitialItem
in class polyglot.visit.DataFlow<accrue.analysis.domination.ImmediatePostDominator>
public void performDataflow(polyglot.ast.CodeNode cd) throws polyglot.types.SemanticException
polyglot.types.SemanticException
protected void dataflow(polyglot.visit.FlowGraph<accrue.analysis.domination.ImmediatePostDominator> graph)
dataflow
in class polyglot.visit.DataFlow<accrue.analysis.domination.ImmediatePostDominator>
protected java.util.Map<polyglot.visit.FlowGraph.EdgeKey,accrue.analysis.domination.ImmediatePostDominator> flow(java.util.List<accrue.analysis.domination.ImmediatePostDominator> inItems, java.util.List<polyglot.visit.FlowGraph.EdgeKey> inItemKeys, polyglot.visit.FlowGraph<accrue.analysis.domination.ImmediatePostDominator> graph, polyglot.visit.FlowGraph.Peer<accrue.analysis.domination.ImmediatePostDominator> peer)
flow
in class polyglot.visit.DataFlow<accrue.analysis.domination.ImmediatePostDominator>
protected void check(polyglot.visit.FlowGraph<accrue.analysis.domination.ImmediatePostDominator> graph, polyglot.visit.FlowGraph.Peer<accrue.analysis.domination.ImmediatePostDominator> p) throws polyglot.types.SemanticException
check
in class polyglot.visit.DataFlow<accrue.analysis.domination.ImmediatePostDominator>
polyglot.types.SemanticException
protected void record(accrue.analysis.domination.ImmediatePostDominator ipd, polyglot.visit.FlowGraph.Peer<accrue.analysis.domination.ImmediatePostDominator> p)
protected void check(polyglot.visit.FlowGraph<accrue.analysis.domination.ImmediatePostDominator> graph, polyglot.ast.Term n, boolean entry, accrue.analysis.domination.ImmediatePostDominator inItem, java.util.Map<polyglot.visit.FlowGraph.EdgeKey,accrue.analysis.domination.ImmediatePostDominator> outItems) throws polyglot.types.SemanticException
check
in class polyglot.visit.DataFlow<accrue.analysis.domination.ImmediatePostDominator>
polyglot.types.SemanticException
protected accrue.analysis.domination.ImmediatePostDominator confluence(java.util.List<accrue.analysis.domination.ImmediatePostDominator> items, polyglot.visit.FlowGraph.Peer<accrue.analysis.domination.ImmediatePostDominator> peer, polyglot.visit.FlowGraph<accrue.analysis.domination.ImmediatePostDominator> graph)
confluence
in class polyglot.visit.DataFlow<accrue.analysis.domination.ImmediatePostDominator>
protected accrue.analysis.domination.ImmediatePostDominator intersect(java.util.List<polyglot.visit.FlowGraph.Edge<accrue.analysis.domination.ImmediatePostDominator>> edges, polyglot.visit.FlowGraph<accrue.analysis.domination.ImmediatePostDominator> graph)
protected accrue.analysis.domination.ImmediatePostDominator intersect(accrue.analysis.domination.ImmediatePostDominator a, accrue.analysis.domination.ImmediatePostDominator b)
protected accrue.analysis.domination.ImmediatePostDominator ipd(polyglot.visit.FlowGraph.Edge<accrue.analysis.domination.ImmediatePostDominator> e, polyglot.visit.FlowGraph<accrue.analysis.domination.ImmediatePostDominator> graph)