accrue.analysis.ctldep

## Class CtlDepDataFlow

- java.lang.Object
- - polyglot.visit.NodeVisitor
  - - polyglot.visit.HaltingVisitor
    - - polyglot.visit.ErrorHandlingVisitor
      - - polyglot.visit.DataFlow<FlowItem>
        - - accrue.analysis.interprocanalysis.PreciseDataFlow<CDAbsVal>
          - - accrue.analysis.ctldep.CtlDepDataFlow

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

      public class CtlDepDataFlow
      extends PreciseDataFlow<CDAbsVal>

- - ### 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
    Modifier and Type | Field and Description
    --- | ---
    `protected CtlDepAnalysisUtil` | `autil`
    `protected CDAbsVal` | `ENTRY`
    `protected polyglot.util.SubtypeSet` | `ignoredExceptions`

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

      `dataflowOnEntry, detectBackEdges, flowCounter, flowgraphStack, forward, postordering`

    - ### 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
    `CtlDepDataFlow(CtlDepAnalysisUtil autil, polyglot.frontend.Job job, polyglot.types.TypeSystem ts, polyglot.ast.NodeFactory nf)`

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `static void` | `addResults(java.lang.String resultKey, AccrueExt rec, AnalysisContext ctx, polyglot.visit.FlowGraph.PeerKey pk, java.util.Set<EdgeIdentifier> results)` Adds a set of results to the current set
    `CtlDepAnalysisUtil` | `autil()`
    `protected void` | `check(polyglot.visit.FlowGraph<CDAbsVal> graph, polyglot.visit.FlowGraph.Peer<CDAbsVal> p)`
    `protected void` | `check(polyglot.visit.FlowGraph<CDAbsVal> graph, polyglot.ast.Term n, boolean entry, CDAbsVal inItem, java.util.Map<polyglot.visit.FlowGraph.EdgeKey,CDAbsVal> outItems)`
    `protected CDAbsVal` | `confluence(java.util.List<CDAbsVal> items, polyglot.visit.FlowGraph.Peer<CDAbsVal> peer, polyglot.visit.FlowGraph<CDAbsVal> graph)`
    `protected CDAbsVal` | `createInitialItem(polyglot.visit.FlowGraph<CDAbsVal> graph, polyglot.ast.Term node, boolean entry)`
    `ExitMap<CDAbsVal>` | `dataflow(polyglot.ast.CodeNode cd, CDAbsVal in)`
    `protected java.util.Map<polyglot.visit.FlowGraph.EdgeKey,CDAbsVal>` | `flow(java.util.List<CDAbsVal> inItems, java.util.List<polyglot.visit.FlowGraph.EdgeKey> inItemKeys, polyglot.visit.FlowGraph<CDAbsVal> graph, polyglot.visit.FlowGraph.Peer<CDAbsVal> peer)`
    `protected java.util.Map<polyglot.visit.FlowGraph.EdgeKey,CDAbsVal>` | `flowControlDeps(CDAbsVal dfIn, polyglot.visit.FlowGraph<CDAbsVal> graph, polyglot.visit.FlowGraph.Peer<CDAbsVal> peer)`
    `DataFlowNodeIdentifier` | `idForPeer(polyglot.visit.FlowGraph.Peer<CDAbsVal> p)`
    `void` | `recordBranches(CDAbsVal dfIn, polyglot.visit.FlowGraph<CDAbsVal> graph, polyglot.visit.FlowGraph.Peer<CDAbsVal> peer)`
    `CDAbsVal` | `removePostDomDeps(DataFlowNodeIdentifier nodeID, CDAbsVal dfIn)`
    `boolean` | `throwsNonFatalExceptions(polyglot.ast.Term n)` Returns true if this node throws exceptions that may be caught.

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

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

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

      `confluence, constructItemsFromCondition, createFrame, createInitialItem, currentFlowGraph, dataflow, 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`

- - ### Field Detail

    - #### autil

          protected CtlDepAnalysisUtil autil

    - #### ignoredExceptions

          protected polyglot.util.SubtypeSet ignoredExceptions

    - #### ENTRY

          protected CDAbsVal ENTRY

  - ### Constructor Detail

    - #### CtlDepDataFlow

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

  - ### Method Detail

    - #### dataflow

          public ExitMap<CDAbsVal> dataflow(polyglot.ast.CodeNode cd,
                                   CDAbsVal in)
                                     throws polyglot.types.SemanticException

      Throws:
        `polyglot.types.SemanticException`

    - #### check

          protected void check(polyglot.visit.FlowGraph<CDAbsVal> graph,
                   polyglot.visit.FlowGraph.Peer<CDAbsVal> p)
                        throws polyglot.types.SemanticException

      Overrides:
        `check` in class `polyglot.visit.DataFlow<CDAbsVal>`
      Throws:
        `polyglot.types.SemanticException`

    - #### confluence

          protected CDAbsVal confluence(java.util.List<CDAbsVal> items,
                            polyglot.visit.FlowGraph.Peer<CDAbsVal> peer,
                            polyglot.visit.FlowGraph<CDAbsVal> graph)

      Specified by:
        `confluence` in class `polyglot.visit.DataFlow<CDAbsVal>`

    - #### flow

          protected java.util.Map<polyglot.visit.FlowGraph.EdgeKey,CDAbsVal> flow(java.util.List<CDAbsVal> inItems,
                                                                      java.util.List<polyglot.visit.FlowGraph.EdgeKey> inItemKeys,
                                                                      polyglot.visit.FlowGraph<CDAbsVal> graph,
                                                                      polyglot.visit.FlowGraph.Peer<CDAbsVal> peer)

      Overrides:
        `flow` in class `polyglot.visit.DataFlow<CDAbsVal>`

    - #### idForPeer

          public DataFlowNodeIdentifier idForPeer(polyglot.visit.FlowGraph.Peer<CDAbsVal> p)

    - #### createInitialItem

          protected CDAbsVal createInitialItem(polyglot.visit.FlowGraph<CDAbsVal> graph,
                                   polyglot.ast.Term node,
                                   boolean entry)

      Specified by:
        `createInitialItem` in class `polyglot.visit.DataFlow<CDAbsVal>`

    - #### autil

          public CtlDepAnalysisUtil autil()

      Overrides:
        `autil` in class `PreciseDataFlow<CDAbsVal>`
      Returns:
        the analysis helper class

    - #### removePostDomDeps

          public CDAbsVal removePostDomDeps(DataFlowNodeIdentifier nodeID,
                                   CDAbsVal dfIn)

    - #### flowControlDeps

          protected java.util.Map<polyglot.visit.FlowGraph.EdgeKey,CDAbsVal> flowControlDeps(CDAbsVal dfIn,
                                                                                 polyglot.visit.FlowGraph<CDAbsVal> graph,
                                                                                 polyglot.visit.FlowGraph.Peer<CDAbsVal> peer)

    - #### throwsNonFatalExceptions

          public boolean throwsNonFatalExceptions(polyglot.ast.Term n)

      Returns true if this node throws exceptions that may be caught.

    - #### addResults

          public static void addResults(java.lang.String resultKey,
                        AccrueExt rec,
                        AnalysisContext ctx,
                        polyglot.visit.FlowGraph.PeerKey pk,
                        java.util.Set<EdgeIdentifier> results)

      Adds a set of results to the current set
      Parameters:
        `resultKey` - The key of the analysis result to record.
        `rec` - The extension object to record these results on.
        `ctx` - The AnalysisContext to associate these results with.
        `pk` - The PeerKey to associate these results with.
        `results` -

    - #### check

          protected void check(polyglot.visit.FlowGraph<CDAbsVal> graph,
                   polyglot.ast.Term n,
                   boolean entry,
                   CDAbsVal inItem,
                   java.util.Map<polyglot.visit.FlowGraph.EdgeKey,CDAbsVal> outItems)
                        throws polyglot.types.SemanticException

      Specified by:
        `check` in class `polyglot.visit.DataFlow<CDAbsVal>`
      Throws:
        `polyglot.types.SemanticException`

    - #### recordBranches

          public void recordBranches(CDAbsVal dfIn,
                            polyglot.visit.FlowGraph<CDAbsVal> graph,
                            polyglot.visit.FlowGraph.Peer<CDAbsVal> peer)