diff options
author | Ted Kremenek <kremenek@apple.com> | 2010-11-12 18:26:58 +0000 |
---|---|---|
committer | Ted Kremenek <kremenek@apple.com> | 2010-11-12 18:26:58 +0000 |
commit | 3b19144e24ac0bbe80e5fd68ce48d7baea3f2881 (patch) | |
tree | f7fcd09c7b4d69fa7e43052d778c16f90bb2cef2 /clang/tools/libclang | |
parent | 73227d792bc205ba6a18ccff7a3b5d96981d1a03 (diff) | |
download | bcm5719-llvm-3b19144e24ac0bbe80e5fd68ce48d7baea3f2881.tar.gz bcm5719-llvm-3b19144e24ac0bbe80e5fd68ce48d7baea3f2881.zip |
CursorVisitor: migrate 'IfStmt' over to data-recursive algorithm.
llvm-svn: 118910
Diffstat (limited to 'clang/tools/libclang')
-rw-r--r-- | clang/tools/libclang/CIndex.cpp | 37 |
1 files changed, 19 insertions, 18 deletions
diff --git a/clang/tools/libclang/CIndex.cpp b/clang/tools/libclang/CIndex.cpp index c1b2fb64dee..af4d7ee1cd3 100644 --- a/clang/tools/libclang/CIndex.cpp +++ b/clang/tools/libclang/CIndex.cpp @@ -153,6 +153,14 @@ DEF_JOB(StmtVisit, Stmt, StmtVisitKind) DEF_JOB(MemberExprParts, MemberExpr, MemberExprPartsKind) #undef DEF_JOB +static inline void WLAddStmt(VisitorWorkList &WL, CXCursor Parent, Stmt *S) { + if (S) + WL.push_back(StmtVisit(S, Parent)); +} +static inline void WLAddDecl(VisitorWorkList &WL, CXCursor Parent, Decl *D) { + if (D) + WL.push_back(DeclVisit(D, Parent)); +} // Cursor visitor. class CursorVisitor : public DeclVisitor<CursorVisitor, bool>, @@ -322,7 +330,6 @@ public: bool VisitStmt(Stmt *S); bool VisitDeclStmt(DeclStmt *S); bool VisitGotoStmt(GotoStmt *S); - bool VisitIfStmt(IfStmt *S); bool VisitWhileStmt(WhileStmt *S); bool VisitForStmt(ForStmt *S); @@ -357,9 +364,10 @@ public: #define DATA_RECURSIVE_VISIT(NAME)\ bool Visit##NAME(NAME *S) { return VisitDataRecursive(S); } DATA_RECURSIVE_VISIT(BinaryOperator) - DATA_RECURSIVE_VISIT(MemberExpr) DATA_RECURSIVE_VISIT(CXXMemberCallExpr) DATA_RECURSIVE_VISIT(CXXOperatorCallExpr) + DATA_RECURSIVE_VISIT(IfStmt) + DATA_RECURSIVE_VISIT(MemberExpr) DATA_RECURSIVE_VISIT(SwitchStmt) // Data-recursive visitor functions. @@ -1464,22 +1472,6 @@ bool CursorVisitor::VisitGotoStmt(GotoStmt *S) { return Visit(MakeCursorLabelRef(S->getLabel(), S->getLabelLoc(), TU)); } -bool CursorVisitor::VisitIfStmt(IfStmt *S) { - if (VarDecl *Var = S->getConditionVariable()) { - if (Visit(MakeCXCursor(Var, TU))) - return true; - } - - if (S->getCond() && Visit(MakeCXCursor(S->getCond(), StmtParent, TU))) - return true; - if (S->getThen() && Visit(MakeCXCursor(S->getThen(), StmtParent, TU))) - return true; - if (S->getElse() && Visit(MakeCXCursor(S->getElse(), StmtParent, TU))) - return true; - - return false; -} - bool CursorVisitor::VisitWhileStmt(WhileStmt *S) { if (VarDecl *Var = S->getConditionVariable()) { if (Visit(MakeCXCursor(Var, TU))) @@ -1919,6 +1911,14 @@ void CursorVisitor::EnqueueWorkList(VisitorWorkList &WL, Stmt *S) { WL.push_back(StmtVisit(B->getLHS(), C)); break; } + case Stmt::IfStmtClass: { + IfStmt *If = cast<IfStmt>(S); + WLAddStmt(WL, C, If->getElse()); + WLAddStmt(WL, C, If->getThen()); + WLAddStmt(WL, C, If->getCond()); + WLAddDecl(WL, C, If->getConditionVariable()); + break; + } case Stmt::MemberExprClass: { MemberExpr *M = cast<MemberExpr>(S); WL.push_back(MemberExprParts(M, C)); @@ -1993,6 +1993,7 @@ bool CursorVisitor::RunVisitorWorkList(VisitorWorkList &WL) { case Stmt::CXXMemberCallExprClass: case Stmt::CXXOperatorCallExprClass: case Stmt::DefaultStmtClass: + case Stmt::IfStmtClass: case Stmt::MemberExprClass: case Stmt::ParenExprClass: case Stmt::SwitchStmtClass: |