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, 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, visitChildrenpublic 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.SemanticExceptionprotected 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.SemanticExceptionprotected 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.SemanticExceptionprotected 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)
-