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