diff options
author | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2009-07-29 23:40:39 +0000 |
---|---|---|
committer | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2009-07-29 23:40:39 +0000 |
commit | 81e84560c85c5d3727072f5b9e8bd2a963adf8e7 (patch) | |
tree | 95bc2e903f621b54c3f55cc2459786f9f2f633a9 /lib/Index/DeclReferenceMap.cpp | |
parent | 27bd0dcb85cbb5dd3ca3fefc6369f34d6ccaa8b6 (diff) |
Use helper class ASTVisitor to fully traverse an AST.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@77539 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Index/DeclReferenceMap.cpp')
-rw-r--r-- | lib/Index/DeclReferenceMap.cpp | 91 |
1 files changed, 11 insertions, 80 deletions
diff --git a/lib/Index/DeclReferenceMap.cpp b/lib/Index/DeclReferenceMap.cpp index f99f4ae84d..1e6ae21a64 100644 --- a/lib/Index/DeclReferenceMap.cpp +++ b/lib/Index/DeclReferenceMap.cpp @@ -14,111 +14,42 @@ #include "clang/Index/DeclReferenceMap.h" #include "clang/Index/ASTLocation.h" -#include "clang/AST/Decl.h" -#include "clang/AST/Stmt.h" -#include "clang/AST/DeclVisitor.h" -#include "clang/AST/StmtVisitor.h" +#include "ASTVisitor.h" #include "llvm/Support/Compiler.h" using namespace clang; using namespace idx; namespace { -class VISIBILITY_HIDDEN StmtMapper : public StmtVisitor<StmtMapper> { +class VISIBILITY_HIDDEN RefMapper : public ASTVisitor<RefMapper> { DeclReferenceMap::MapTy ⤅ - Decl *Parent; public: - StmtMapper(DeclReferenceMap::MapTy &map, Decl *parent) - : Map(map), Parent(parent) { } + RefMapper(DeclReferenceMap::MapTy &map) : Map(map) { } - void VisitDeclStmt(DeclStmt *Node); void VisitDeclRefExpr(DeclRefExpr *Node); void VisitMemberExpr(MemberExpr *Node); void VisitObjCIvarRefExpr(ObjCIvarRefExpr *Node); - void VisitStmt(Stmt *Node); -}; - -class VISIBILITY_HIDDEN DeclMapper : public DeclVisitor<DeclMapper> { - DeclReferenceMap::MapTy ⤅ - -public: - DeclMapper(DeclReferenceMap::MapTy &map) - : Map(map) { } - - void VisitDeclContext(DeclContext *DC); - void VisitVarDecl(VarDecl *D); - void VisitFunctionDecl(FunctionDecl *D); - void VisitObjCMethodDecl(ObjCMethodDecl *D); - void VisitBlockDecl(BlockDecl *D); - void VisitDecl(Decl *D); }; } // anonymous namespace //===----------------------------------------------------------------------===// -// StmtMapper Implementation +// RefMapper Implementation //===----------------------------------------------------------------------===// -void StmtMapper::VisitDeclStmt(DeclStmt *Node) { - DeclMapper Mapper(Map); - for (DeclStmt::decl_iterator - I = Node->decl_begin(), E = Node->decl_end(); I != E; ++I) - Mapper.Visit(*I); -} - -void StmtMapper::VisitDeclRefExpr(DeclRefExpr *Node) { +void RefMapper::VisitDeclRefExpr(DeclRefExpr *Node) { NamedDecl *PrimD = cast<NamedDecl>(Node->getDecl()->getCanonicalDecl()); - Map.insert(std::make_pair(PrimD, ASTLocation(Parent, Node))); + Map.insert(std::make_pair(PrimD, ASTLocation(CurrentDecl, Node))); } -void StmtMapper::VisitMemberExpr(MemberExpr *Node) { +void RefMapper::VisitMemberExpr(MemberExpr *Node) { NamedDecl *PrimD = cast<NamedDecl>(Node->getMemberDecl()->getCanonicalDecl()); - Map.insert(std::make_pair(PrimD, ASTLocation(Parent, Node))); -} - -void StmtMapper::VisitObjCIvarRefExpr(ObjCIvarRefExpr *Node) { - Map.insert(std::make_pair(Node->getDecl(), ASTLocation(Parent, Node))); -} - -void StmtMapper::VisitStmt(Stmt *Node) { - for (Stmt::child_iterator - I = Node->child_begin(), E = Node->child_end(); I != E; ++I) - Visit(*I); -} - -//===----------------------------------------------------------------------===// -// DeclMapper Implementation -//===----------------------------------------------------------------------===// - -void DeclMapper::VisitDeclContext(DeclContext *DC) { - for (DeclContext::decl_iterator - I = DC->decls_begin(), E = DC->decls_end(); I != E; ++I) - Visit(*I); -} - -void DeclMapper::VisitFunctionDecl(FunctionDecl *D) { - if (D->isThisDeclarationADefinition()) - StmtMapper(Map, D).Visit(D->getBody()); -} - -void DeclMapper::VisitObjCMethodDecl(ObjCMethodDecl *D) { - if (D->getBody()) - StmtMapper(Map, D).Visit(D->getBody()); -} - -void DeclMapper::VisitBlockDecl(BlockDecl *D) { - StmtMapper(Map, D).Visit(D->getBody()); -} - -void DeclMapper::VisitVarDecl(VarDecl *D) { - if (Expr *Init = D->getInit()) - StmtMapper(Map, D).Visit(Init); + Map.insert(std::make_pair(PrimD, ASTLocation(CurrentDecl, Node))); } -void DeclMapper::VisitDecl(Decl *D) { - if (DeclContext *DC = dyn_cast<DeclContext>(D)) - VisitDeclContext(DC); +void RefMapper::VisitObjCIvarRefExpr(ObjCIvarRefExpr *Node) { + Map.insert(std::make_pair(Node->getDecl(), ASTLocation(CurrentDecl, Node))); } //===----------------------------------------------------------------------===// @@ -126,7 +57,7 @@ void DeclMapper::VisitDecl(Decl *D) { //===----------------------------------------------------------------------===// DeclReferenceMap::DeclReferenceMap(ASTContext &Ctx) { - DeclMapper(Map).Visit(Ctx.getTranslationUnitDecl()); + RefMapper(Map).Visit(Ctx.getTranslationUnitDecl()); } DeclReferenceMap::astlocation_iterator |