diff --git a/clang/include/clang/AST/ParentMap.h b/clang/include/clang/AST/ParentMap.h index 199a360ca0dc..c669991ccc08 100644 --- a/clang/include/clang/AST/ParentMap.h +++ b/clang/include/clang/AST/ParentMap.h @@ -24,11 +24,16 @@ public: ParentMap(Stmt* ASTRoot); ~ParentMap(); - Stmt* getParent(Stmt*) const; + Stmt *getParent(Stmt*) const; + Stmt *getParentIgnoreParens(Stmt *) const; - const Stmt* getParent(const Stmt* S) const { + const Stmt *getParent(const Stmt* S) const { return getParent(const_cast(S)); } + + const Stmt *getParentIgnoreParens(const Stmt *S) const { + return getParentIgnoreParens(const_cast(S)); + } bool hasParent(Stmt* S) const { return getParent(S) != 0; diff --git a/clang/lib/AST/ParentMap.cpp b/clang/lib/AST/ParentMap.cpp index 939e6f9be529..9d87daa0bfd8 100644 --- a/clang/lib/AST/ParentMap.cpp +++ b/clang/lib/AST/ParentMap.cpp @@ -46,6 +46,11 @@ Stmt* ParentMap::getParent(Stmt* S) const { return I == M->end() ? 0 : I->second; } +Stmt *ParentMap::getParentIgnoreParens(Stmt *S) const { + do { S = getParent(S); } while (S && isa(S)); + return S; +} + bool ParentMap::isConsumedExpr(Expr* E) const { Stmt *P = getParent(E); Stmt *DirectChild = E;