blob: d618db8147dad51d41669ef3a4d6f9a486ad648d [file] [log] [blame]
Ted Kremenek9caf8b12007-10-18 00:24:38 +00001//===--- StmtIterator.cpp - Iterators for Statements ------------------------===//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file was developed by Ted Kremenek and is distributed under
6// the University of Illinois Open Source License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9//
10// This file defines internal methods for StmtIterator.
11//
12//===----------------------------------------------------------------------===//
13
14#include "clang/AST/StmtIterator.h"
Ted Kremenekc325e7f2007-10-18 18:19:31 +000015#include "clang/AST/Expr.h"
Ted Kremenek9caf8b12007-10-18 00:24:38 +000016#include "clang/AST/Decl.h"
17
18using namespace clang;
19
Ted Kremenekc325e7f2007-10-18 18:19:31 +000020void StmtIteratorBase::NextDecl() {
21 assert (FirstDecl && Ptr.D);
22
23 do Ptr.D = Ptr.D->getNextDeclarator();
24 while (Ptr.D != NULL && !isa<VarDecl>(Ptr.D));
Ted Kremenekc7c326a2007-10-18 16:25:40 +000025}
26
Ted Kremenekc325e7f2007-10-18 18:19:31 +000027StmtIteratorBase::StmtIteratorBase(ScopedDecl* d) {
Ted Kremenekc7c326a2007-10-18 16:25:40 +000028 assert (d);
29
Ted Kremenekc325e7f2007-10-18 18:19:31 +000030 while (d != NULL) {
31 if (VarDecl* V = dyn_cast<VarDecl>(d))
32 if (V->getInit()) break;
33
34 d = d->getNextDeclarator();
35 }
36
37 FirstDecl = d;
38 Ptr.D = d;
39}
40
41void StmtIteratorBase::PrevDecl() {
42 assert (FirstDecl);
43 assert (Ptr.D != FirstDecl);
Ted Kremenekc7c326a2007-10-18 16:25:40 +000044
45 // March through the list of decls until we find the decl just before
46 // the one we currently point
47
Ted Kremenekc325e7f2007-10-18 18:19:31 +000048 ScopedDecl* d = FirstDecl;
49 ScopedDecl* lastVD = d;
Ted Kremenekc7c326a2007-10-18 16:25:40 +000050
Ted Kremenekc325e7f2007-10-18 18:19:31 +000051 while (d->getNextDeclarator() != Ptr.D) {
52 if (VarDecl* V = dyn_cast<VarDecl>(d))
53 if (V->getInit())
54 lastVD = d;
55
56 d = d->getNextDeclarator();
57 }
58
59 Ptr.D = lastVD;
Ted Kremenekc7c326a2007-10-18 16:25:40 +000060}
Ted Kremenek9caf8b12007-10-18 00:24:38 +000061
Ted Kremenekc325e7f2007-10-18 18:19:31 +000062Stmt* StmtIteratorBase::GetInitializer() const {
63 return cast<VarDecl>(Ptr.D)->getInit();
Ted Kremenek9caf8b12007-10-18 00:24:38 +000064}