}
void StmtIteratorBase::NextDecl() {
- assert (FirstDecl && Ptr.D);
+ assert (FirstDecl && decl);
- do Ptr.D = Ptr.D->getNextDeclarator();
- while (Ptr.D != NULL && !declHasExpr(Ptr.D));
+ do decl = decl->getNextDeclarator();
+ while (decl != NULL && !declHasExpr(decl));
- if (Ptr.D == NULL) FirstDecl = NULL;
+ if (decl == NULL) FirstDecl = NULL;
}
StmtIteratorBase::StmtIteratorBase(ScopedDecl* d) {
d = d->getNextDeclarator();
FirstDecl = d;
- Ptr.D = d;
+ decl = d;
}
void StmtIteratorBase::PrevDecl() {
assert (FirstDecl);
- assert (Ptr.D != FirstDecl);
+ assert (decl != FirstDecl);
// March through the list of decls until we find the decl just before
// the one we currently point
ScopedDecl* d = FirstDecl;
ScopedDecl* lastVD = d;
- while (d->getNextDeclarator() != Ptr.D) {
+ while (d->getNextDeclarator() != decl) {
if (VarDecl* V = dyn_cast<VarDecl>(d))
if (V->getInit())
lastVD = d;
d = d->getNextDeclarator();
}
- Ptr.D = lastVD;
+ decl = lastVD;
}
Stmt*& StmtIteratorBase::GetDeclExpr() const {
- if (VarDecl* D = dyn_cast<VarDecl>(Ptr.D))
+ if (VarDecl* D = dyn_cast<VarDecl>(decl))
return reinterpret_cast<Stmt*&>(D->Init);
else {
- EnumConstantDecl* Decl = cast<EnumConstantDecl>(Ptr.D);
+ EnumConstantDecl* Decl = cast<EnumConstantDecl>(decl);
return reinterpret_cast<Stmt*&>(Decl->Init);
}
}
class Stmt;
class ScopedDecl;
-
+class VariableArrayType;
+
class StmtIteratorBase {
protected:
- union { Stmt** S; ScopedDecl* D; } Ptr;
+ union { Stmt** stmt; ScopedDecl* decl; };
ScopedDecl* FirstDecl;
+ VariableArrayType* vat;
void NextDecl();
void PrevDecl();
Stmt*& GetDeclExpr() const;
- StmtIteratorBase(Stmt** s) : FirstDecl(NULL) { Ptr.S = s; }
+ StmtIteratorBase(Stmt** s) : stmt(s), FirstDecl(NULL), vat(NULL) {}
StmtIteratorBase(ScopedDecl* d);
- StmtIteratorBase() : FirstDecl(NULL) { Ptr.S = NULL; }
+ StmtIteratorBase() : stmt(NULL), FirstDecl(NULL), vat(NULL) {}
};
DERIVED& operator++() {
if (FirstDecl) NextDecl();
- else ++Ptr.S;
+ else ++stmt;
return static_cast<DERIVED&>(*this);
}
DERIVED& operator--() {
if (FirstDecl) PrevDecl();
- else --Ptr.S;
+ else --stmt;
return static_cast<DERIVED&>(*this);
}
}
bool operator==(const DERIVED& RHS) const {
- return FirstDecl == RHS.FirstDecl && Ptr.S == RHS.Ptr.S;
+ return FirstDecl == RHS.FirstDecl && stmt == RHS.stmt;
}
bool operator!=(const DERIVED& RHS) const {
- return FirstDecl != RHS.FirstDecl || Ptr.S != RHS.Ptr.S;
+ return FirstDecl != RHS.FirstDecl || stmt != RHS.stmt;
}
REFERENCE operator*() const {
- return (REFERENCE) (FirstDecl ? GetDeclExpr() : *Ptr.S);
+ return (REFERENCE) (FirstDecl ? GetDeclExpr() : *stmt);
}
REFERENCE operator->() const { return operator*(); }