Subversion Repositories QNX 8.QNX8 LLVM/Clang compiler suite

Rev

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

  1. //===--- ParentMap.h - Mappings from Stmts to their Parents -----*- 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 ParentMap class.
  10. //
  11. //===----------------------------------------------------------------------===//
  12.  
  13. #ifndef LLVM_CLANG_AST_PARENTMAP_H
  14. #define LLVM_CLANG_AST_PARENTMAP_H
  15.  
  16. namespace clang {
  17. class Stmt;
  18. class Expr;
  19.  
  20. class ParentMap {
  21.   void* Impl;
  22. public:
  23.   ParentMap(Stmt* ASTRoot);
  24.   ~ParentMap();
  25.  
  26.   /// Adds and/or updates the parent/child-relations of the complete
  27.   /// stmt tree of S. All children of S including indirect descendants are
  28.   /// visited and updated or inserted but not the parents of S.
  29.   void addStmt(Stmt* S);
  30.  
  31.   /// Manually sets the parent of \p S to \p Parent.
  32.   ///
  33.   /// If \p S is already in the map, this method will update the mapping.
  34.   void setParent(const Stmt *S, const Stmt *Parent);
  35.  
  36.   Stmt *getParent(Stmt*) const;
  37.   Stmt *getParentIgnoreParens(Stmt *) const;
  38.   Stmt *getParentIgnoreParenCasts(Stmt *) const;
  39.   Stmt *getParentIgnoreParenImpCasts(Stmt *) const;
  40.   Stmt *getOuterParenParent(Stmt *) const;
  41.  
  42.   const Stmt *getParent(const Stmt* S) const {
  43.     return getParent(const_cast<Stmt*>(S));
  44.   }
  45.  
  46.   const Stmt *getParentIgnoreParens(const Stmt *S) const {
  47.     return getParentIgnoreParens(const_cast<Stmt*>(S));
  48.   }
  49.  
  50.   const Stmt *getParentIgnoreParenCasts(const Stmt *S) const {
  51.     return getParentIgnoreParenCasts(const_cast<Stmt*>(S));
  52.   }
  53.  
  54.   bool hasParent(const Stmt *S) const { return getParent(S) != nullptr; }
  55.  
  56.   bool isConsumedExpr(Expr *E) const;
  57.  
  58.   bool isConsumedExpr(const Expr *E) const {
  59.     return isConsumedExpr(const_cast<Expr*>(E));
  60.   }
  61. };
  62.  
  63. } // end clang namespace
  64. #endif
  65.