diff options
author | Ted Kremenek <kremenek@apple.com> | 2009-12-23 22:31:49 +0000 |
---|---|---|
committer | Ted Kremenek <kremenek@apple.com> | 2009-12-23 22:31:49 +0000 |
commit | b03f630a5d4256220ac48a6f04b765c34c9e8993 (patch) | |
tree | ae0359d1dcdd280f53fb9dd273a1c6febadaf06d | |
parent | f28c687866aed1ed7b4b9ddf44a51673861236cf (diff) | |
download | clang-b03f630a5d4256220ac48a6f04b765c34c9e8993.tar.gz clang-b03f630a5d4256220ac48a6f04b765c34c9e8993.tar.bz2 clang-b03f630a5d4256220ac48a6f04b765c34c9e8993.tar.xz |
Increase StmtIterator size by one pointer (separating out the Stmt** from the union including Decl* and Decl**).
This change is setup for adding StmtIterator support for condition variables in IfStmt, WhileStmt, etc.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@92070 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | include/clang/AST/StmtIterator.h | 23 | ||||
-rw-r--r-- | lib/AST/StmtIterator.cpp | 6 |
2 files changed, 15 insertions, 14 deletions
diff --git a/include/clang/AST/StmtIterator.h b/include/clang/AST/StmtIterator.h index f1aa2cd50f..0ed83fe4ec 100644 --- a/include/clang/AST/StmtIterator.h +++ b/include/clang/AST/StmtIterator.h @@ -28,11 +28,12 @@ class StmtIteratorBase { protected: enum { DeclMode = 0x1, SizeOfTypeVAMode = 0x2, DeclGroupMode = 0x3, Flags = 0x3 }; - - union { Stmt** stmt; Decl* decl; Decl** DGI; }; + + Stmt **stmt; + union { Decl *decl; Decl **DGI; }; uintptr_t RawVAPtr; - Decl** DGE; - + Decl **DGE; + bool inDecl() const { return (RawVAPtr & Flags) == DeclMode; } @@ -64,11 +65,11 @@ protected: Stmt*& GetDeclExpr() const; - StmtIteratorBase(Stmt** s) : stmt(s), RawVAPtr(0) {} - StmtIteratorBase(Decl* d); - StmtIteratorBase(VariableArrayType* t); - StmtIteratorBase(Decl** dgi, Decl** dge); - StmtIteratorBase() : stmt(NULL), RawVAPtr(0) {} + StmtIteratorBase(Stmt **s) : stmt(s), decl(0), RawVAPtr(0) {} + StmtIteratorBase(Decl *d); + StmtIteratorBase(VariableArrayType *t); + StmtIteratorBase(Decl **dgi, Decl **dge); + StmtIteratorBase() : stmt(0), decl(0), RawVAPtr(0) {} }; @@ -106,11 +107,11 @@ public: } bool operator==(const DERIVED& RHS) const { - return stmt == RHS.stmt && RawVAPtr == RHS.RawVAPtr; + return stmt == RHS.stmt && decl == RHS.decl && RawVAPtr == RHS.RawVAPtr; } bool operator!=(const DERIVED& RHS) const { - return stmt != RHS.stmt || RawVAPtr != RHS.RawVAPtr; + return stmt != RHS.stmt || decl != RHS.decl || RawVAPtr != RHS.RawVAPtr; } REFERENCE operator*() const { diff --git a/lib/AST/StmtIterator.cpp b/lib/AST/StmtIterator.cpp index 4f62b66e25..0f1d85c399 100644 --- a/lib/AST/StmtIterator.cpp +++ b/lib/AST/StmtIterator.cpp @@ -114,18 +114,18 @@ bool StmtIteratorBase::HandleDecl(Decl* D) { } StmtIteratorBase::StmtIteratorBase(Decl* d) - : decl(d), RawVAPtr(DeclMode) { + : stmt(0), decl(d), RawVAPtr(DeclMode) { assert (decl); NextDecl(false); } StmtIteratorBase::StmtIteratorBase(Decl** dgi, Decl** dge) - : DGI(dgi), RawVAPtr(DeclGroupMode), DGE(dge) { + : stmt(0), DGI(dgi), RawVAPtr(DeclGroupMode), DGE(dge) { NextDecl(false); } StmtIteratorBase::StmtIteratorBase(VariableArrayType* t) -: decl(0), RawVAPtr(SizeOfTypeVAMode) { + : stmt(0), decl(0), RawVAPtr(SizeOfTypeVAMode) { RawVAPtr |= reinterpret_cast<uintptr_t>(t); } |