summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTed Kremenek <kremenek@apple.com>2009-12-23 22:31:49 +0000
committerTed Kremenek <kremenek@apple.com>2009-12-23 22:31:49 +0000
commitb03f630a5d4256220ac48a6f04b765c34c9e8993 (patch)
treeae0359d1dcdd280f53fb9dd273a1c6febadaf06d
parentf28c687866aed1ed7b4b9ddf44a51673861236cf (diff)
downloadclang-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.h23
-rw-r--r--lib/AST/StmtIterator.cpp6
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);
}