public class DominatorDataFlow extends PreciseDataFlow<accrue.analysis.domination.ImmediateDominator>
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
Constructor and Description |
---|
DominatorDataFlow(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.ImmediateDominator> graph,
polyglot.visit.FlowGraph.Peer<accrue.analysis.domination.ImmediateDominator> p) |
protected void |
check(polyglot.visit.FlowGraph<accrue.analysis.domination.ImmediateDominator> graph,
polyglot.ast.Term n,
boolean entry,
accrue.analysis.domination.ImmediateDominator inItem,
java.util.Map<polyglot.visit.FlowGraph.EdgeKey,accrue.analysis.domination.ImmediateDominator> outItems) |
protected accrue.analysis.domination.ImmediateDominator |
confluence(java.util.List<accrue.analysis.domination.ImmediateDominator> items,
polyglot.visit.FlowGraph.Peer<accrue.analysis.domination.ImmediateDominator> peer,
polyglot.visit.FlowGraph<accrue.analysis.domination.ImmediateDominator> graph) |
protected accrue.analysis.domination.ImmediateDominator |
createInitialItem(polyglot.visit.FlowGraph<accrue.analysis.domination.ImmediateDominator> graph,
polyglot.ast.Term node,
boolean entry)
Create an initial Item for the dataflow analysis.
|
protected void |
dataflow(polyglot.visit.FlowGraph<accrue.analysis.domination.ImmediateDominator> graph) |
static <FlowItem extends polyglot.visit.DataFlow.Item> |
dominatorsOf(DataFlowNodeIdentifier source,
polyglot.visit.FlowGraph<FlowItem> graph,
AnalysisContext currentContext)
Returns the set of all dominators of the given Peer
|
protected java.util.Map<polyglot.visit.FlowGraph.EdgeKey,accrue.analysis.domination.ImmediateDominator> |
flow(java.util.List<accrue.analysis.domination.ImmediateDominator> inItems,
java.util.List<polyglot.visit.FlowGraph.EdgeKey> inItemKeys,
polyglot.visit.FlowGraph<accrue.analysis.domination.ImmediateDominator> graph,
polyglot.visit.FlowGraph.Peer<accrue.analysis.domination.ImmediateDominator> peer) |
void |
performDataflow(polyglot.ast.CodeNode cd) |
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
public DominatorDataFlow(polyglot.frontend.Job job, polyglot.types.TypeSystem ts, polyglot.ast.NodeFactory nf, DominationAnalysisUtil autil)
protected accrue.analysis.domination.ImmediateDominator createInitialItem(polyglot.visit.FlowGraph<accrue.analysis.domination.ImmediateDominator> graph, polyglot.ast.Term node, boolean entry)
createInitialItem
in class polyglot.visit.DataFlow<accrue.analysis.domination.ImmediateDominator>
protected void dataflow(polyglot.visit.FlowGraph<accrue.analysis.domination.ImmediateDominator> graph)
dataflow
in class polyglot.visit.DataFlow<accrue.analysis.domination.ImmediateDominator>
public void performDataflow(polyglot.ast.CodeNode cd) throws polyglot.types.SemanticException
polyglot.types.SemanticException
protected java.util.Map<polyglot.visit.FlowGraph.EdgeKey,accrue.analysis.domination.ImmediateDominator> flow(java.util.List<accrue.analysis.domination.ImmediateDominator> inItems, java.util.List<polyglot.visit.FlowGraph.EdgeKey> inItemKeys, polyglot.visit.FlowGraph<accrue.analysis.domination.ImmediateDominator> graph, polyglot.visit.FlowGraph.Peer<accrue.analysis.domination.ImmediateDominator> peer)
flow
in class polyglot.visit.DataFlow<accrue.analysis.domination.ImmediateDominator>
protected void check(polyglot.visit.FlowGraph<accrue.analysis.domination.ImmediateDominator> graph, polyglot.visit.FlowGraph.Peer<accrue.analysis.domination.ImmediateDominator> p) throws polyglot.types.SemanticException
check
in class polyglot.visit.DataFlow<accrue.analysis.domination.ImmediateDominator>
polyglot.types.SemanticException
protected void check(polyglot.visit.FlowGraph<accrue.analysis.domination.ImmediateDominator> graph, polyglot.ast.Term n, boolean entry, accrue.analysis.domination.ImmediateDominator inItem, java.util.Map<polyglot.visit.FlowGraph.EdgeKey,accrue.analysis.domination.ImmediateDominator> outItems) throws polyglot.types.SemanticException
check
in class polyglot.visit.DataFlow<accrue.analysis.domination.ImmediateDominator>
polyglot.types.SemanticException
protected accrue.analysis.domination.ImmediateDominator confluence(java.util.List<accrue.analysis.domination.ImmediateDominator> items, polyglot.visit.FlowGraph.Peer<accrue.analysis.domination.ImmediateDominator> peer, polyglot.visit.FlowGraph<accrue.analysis.domination.ImmediateDominator> graph)
confluence
in class polyglot.visit.DataFlow<accrue.analysis.domination.ImmediateDominator>
public static <FlowItem extends polyglot.visit.DataFlow.Item> java.util.Set<DataFlowNodeIdentifier> dominatorsOf(DataFlowNodeIdentifier source, polyglot.visit.FlowGraph<FlowItem> graph, AnalysisContext currentContext)
-