Class DelegatingCFG<I,T extends IBasicBlock<I>>

All Implemented Interfaces:
ControlFlowGraph<I,T>, MinimalCFG<T>, EdgeManager<T>, Graph<T>, NodeManager<T>, NumberedEdgeManager<T>, NumberedGraph<T>, NumberedNodeManager<T>, Iterable<T>

public class DelegatingCFG<I,T extends IBasicBlock<I>> extends AbstractNumberedGraph<T> implements ControlFlowGraph<I,T>
  • Field Details

  • Constructor Details

  • Method Details

    • getNodeManager

      protected NumberedNodeManager<T> getNodeManager()
      Specified by:
      getNodeManager in class AbstractNumberedGraph<T extends IBasicBlock<I>>
      Returns:
      the object which manages nodes in the graph
    • getEdgeManager

      protected NumberedEdgeManager<T> getEdgeManager()
      Specified by:
      getEdgeManager in class AbstractNumberedGraph<T extends IBasicBlock<I>>
      Returns:
      the object which manages edges in the graph
    • entry

      public T entry()
      Description copied from interface: MinimalCFG
      Return the entry basic block in the CFG
      Specified by:
      entry in interface MinimalCFG<I>
    • exit

      public T exit()
      Specified by:
      exit in interface MinimalCFG<I>
      Returns:
      the synthetic exit block for the cfg
    • getCatchBlocks

      public BitVector getCatchBlocks()
      Specified by:
      getCatchBlocks in interface ControlFlowGraph<I,T extends IBasicBlock<I>>
      Returns:
      the indices of the catch blocks, as a bit vector
    • getBlockForInstruction

      public T getBlockForInstruction(int index)
      Specified by:
      getBlockForInstruction in interface ControlFlowGraph<I,T extends IBasicBlock<I>>
      Parameters:
      index - an instruction index
      Returns:
      the basic block which contains this instruction.
    • getInstructions

      public I[] getInstructions()
      Specified by:
      getInstructions in interface ControlFlowGraph<I,T extends IBasicBlock<I>>
      Returns:
      the instructions of this CFG, as an array.
    • getProgramCounter

      public int getProgramCounter(int index)
      Description copied from interface: ControlFlowGraph
      TODO: move this into IR?
      Specified by:
      getProgramCounter in interface ControlFlowGraph<I,T extends IBasicBlock<I>>
      Parameters:
      index - an instruction index
      Returns:
      the program counter (bytecode index) corresponding to that instruction
    • getMethod

      public IMethod getMethod()
      Specified by:
      getMethod in interface ControlFlowGraph<I,T extends IBasicBlock<I>>
      Returns:
      the Method this CFG represents
    • getExceptionalSuccessors

      public List<T> getExceptionalSuccessors(T b)
      Description copied from interface: MinimalCFG
      The order of blocks returned must indicate the exception-handling scope. So the first block is the first candidate catch block, and so on. With this invariant one can compute the exceptional control flow for a given exception type.
      Specified by:
      getExceptionalSuccessors in interface MinimalCFG<I>
      Returns:
      the basic blocks which may be reached from b via exceptional control flow
    • getNormalSuccessors

      public Collection<T> getNormalSuccessors(T b)
      Description copied from interface: MinimalCFG
      The order of blocks returned should be arbitrary but deterministic.
      Specified by:
      getNormalSuccessors in interface MinimalCFG<I>
      Returns:
      the basic blocks which may be reached from b via normal control flow
    • getExceptionalPredecessors

      public Collection<T> getExceptionalPredecessors(T b)
      Description copied from interface: MinimalCFG
      The order of blocks returned should be arbitrary but deterministic.
      Specified by:
      getExceptionalPredecessors in interface MinimalCFG<I>
      Returns:
      the basic blocks from which b may be reached via exceptional control flow
    • getNormalPredecessors

      public Collection<T> getNormalPredecessors(T b)
      Description copied from interface: MinimalCFG
      The order of blocks returned should be arbitrary but deterministic.
      Specified by:
      getNormalPredecessors in interface MinimalCFG<I>
      Returns:
      the basic blocks from which b may be reached via normal control flow