accrue.analysis.domination

## Class NonFatalPostDominatorDataFlow

- java.lang.Object
- - polyglot.visit.NodeVisitor
  - - polyglot.visit.HaltingVisitor
    - - polyglot.visit.ErrorHandlingVisitor
      - - polyglot.visit.DataFlow<FlowItem>
        - - accrue.analysis.interprocanalysis.PreciseDataFlow<accrue.analysis.domination.ImmediatePostDominator>
          - - accrue.analysis.domination.PostDominatorDataFlow
            - - accrue.analysis.domination.NonFatalPostDominatorDataFlow

- All Implemented Interfaces:
    java.lang.Cloneable, polyglot.util.Copy<polyglot.visit.NodeVisitor>

      public class NonFatalPostDominatorDataFlow
      extends PostDominatorDataFlow

  This class performs a postdominator analysis identical to its parent except that it ignores exceptional control flow edges that are fatal. Analyses based on these results will be correct for normal program termination.

- - ### Nested Class Summary

    - ### Nested classes/interfaces inherited from class accrue.analysis.interprocanalysis.PreciseDataFlow

      `PreciseDataFlow.PreciseCFGBuilder<FlowItem extends polyglot.visit.DataFlow.Item>`

    - ### Nested classes/interfaces inherited from class polyglot.visit.DataFlow

      `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`

    - ### Nested classes/interfaces inherited from interface polyglot.util.Copy

      `polyglot.util.Copy.Util`

  - ### Field Summary

    - ### Fields inherited from class accrue.analysis.domination.PostDominatorDataFlow

      `autil, postdoms`

    - ### Fields inherited from class polyglot.visit.DataFlow

      `dataflowOnEntry, detectBackEdges, flowCounter, flowgraphStack, forward`

    - ### Fields inherited from class polyglot.visit.ErrorHandlingVisitor

      `error, job, nf, ts`

    - ### Fields inherited from class polyglot.visit.HaltingVisitor

      `bypass, bypassParent`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `NonFatalPostDominatorDataFlow(polyglot.frontend.Job job, polyglot.types.TypeSystem ts, polyglot.ast.NodeFactory nf, DominationAnalysisUtil autil)`

  - ### Method Summary

    Methods
    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 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 java.util.List<polyglot.visit.FlowGraph.Edge<accrue.analysis.domination.ImmediatePostDominator>>` | `nonFatalPeers(polyglot.visit.FlowGraph.Peer<accrue.analysis.domination.ImmediatePostDominator> peer)`

    - ### Methods inherited from class accrue.analysis.domination.PostDominatorDataFlow

      `check, confluence, createInitialItem, dataflow, intersect, intersect, ipd, performDataflow, record`

    - ### Methods inherited from class accrue.analysis.interprocanalysis.PreciseDataFlow

      `autil, createCFGBuilder, currentContext, dataFlowNodeIdentifierForPeer, dataFlowNodeIdentifierForPeer, initGraph, peerForDataFlowNodeIdentifier`

    - ### Methods inherited from class polyglot.visit.DataFlow

      `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`

    - ### Methods inherited from class polyglot.visit.ErrorHandlingVisitor

      `begin, catchErrors, enter, enterCall, enterError, errorQueue, hasErrors, job, leaveCall, leaveCall, nodeFactory, typeSystem`

    - ### Methods inherited from class polyglot.visit.HaltingVisitor

      `bypass, bypass, bypassChildren, override, visitChildren`

    - ### Methods inherited from class polyglot.visit.NodeVisitor

      `copy, enter, finish, finish, leave, override, toString, visitEdge, visitEdgeNoOverride`

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait`

- - ### Constructor Detail

    - #### NonFatalPostDominatorDataFlow

          public NonFatalPostDominatorDataFlow(polyglot.frontend.Job job,
                                       polyglot.types.TypeSystem ts,
                                       polyglot.ast.NodeFactory nf,
                                       DominationAnalysisUtil autil)

  - ### Method Detail

    - #### flow

          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)

      Overrides:
        `flow` in class `PostDominatorDataFlow`

    - #### check

          protected void check(polyglot.visit.FlowGraph<accrue.analysis.domination.ImmediatePostDominator> graph,
                   polyglot.visit.FlowGraph.Peer<accrue.analysis.domination.ImmediatePostDominator> p)
                        throws polyglot.types.SemanticException

      Overrides:
        `check` in class `PostDominatorDataFlow`
      Throws:
        `polyglot.types.SemanticException`

    - #### nonFatalPeers

          protected java.util.List<polyglot.visit.FlowGraph.Edge<accrue.analysis.domination.ImmediatePostDominator>> nonFatalPeers(polyglot.visit.FlowGraph.Peer<accrue.analysis.domination.ImmediatePostDominator> peer)