Subversion Repositories QNX 8.QNX8 LLVM/Clang compiler suite

Rev

Blame | Last modification | View Log | Download | RSS feed

  1. //===--- CFGStmtMap.h - Map from Stmt* to CFGBlock* -----------*- C++ -*-===//
  2. //
  3. // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
  4. // See https://llvm.org/LICENSE.txt for license information.
  5. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
  6. //
  7. //===----------------------------------------------------------------------===//
  8. //
  9. //  This file defines the CFGStmtMap class, which defines a mapping from
  10. //  Stmt* to CFGBlock*
  11. //
  12. //===----------------------------------------------------------------------===//
  13.  
  14. #ifndef LLVM_CLANG_ANALYSIS_CFGSTMTMAP_H
  15. #define LLVM_CLANG_ANALYSIS_CFGSTMTMAP_H
  16.  
  17. #include "clang/Analysis/CFG.h"
  18.  
  19. namespace clang {
  20.  
  21. class ParentMap;
  22. class Stmt;
  23.  
  24. class CFGStmtMap {
  25.   ParentMap *PM;
  26.   void *M;
  27.  
  28.   CFGStmtMap(ParentMap *pm, void *m) : PM(pm), M(m) {}
  29.  
  30. public:
  31.   ~CFGStmtMap();
  32.  
  33.   /// Returns a new CFGMap for the given CFG.  It is the caller's
  34.   /// responsibility to 'delete' this object when done using it.
  35.   static CFGStmtMap *Build(CFG* C, ParentMap *PM);
  36.  
  37.   /// Returns the CFGBlock the specified Stmt* appears in.  For Stmt* that
  38.   /// are terminators, the CFGBlock is the block they appear as a terminator,
  39.   /// and not the block they appear as a block-level expression (e.g, '&&').
  40.   /// CaseStmts and LabelStmts map to the CFGBlock they label.
  41.   CFGBlock *getBlock(Stmt * S);
  42.  
  43.   const CFGBlock *getBlock(const Stmt * S) const {
  44.     return const_cast<CFGStmtMap*>(this)->getBlock(const_cast<Stmt*>(S));
  45.   }
  46. };
  47.  
  48. } // end clang namespace
  49. #endif
  50.