diff options
author | Alexander Kornienko <alexfh@google.com> | 2012-07-31 09:37:40 +0000 |
---|---|---|
committer | Alexander Kornienko <alexfh@google.com> | 2012-07-31 09:37:40 +0000 |
commit | 171af64ef10ae816ed2a4f15f5d17aca1d71769f (patch) | |
tree | 975b767431050b8c1bcc59f42d176f6007e87988 /lib/Frontend/ASTConsumers.cpp | |
parent | ff104a12d61d34af67f12a7a966847c821d7afa8 (diff) |
Added -ast-list option to dump filterable AST decl node names.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@161040 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Frontend/ASTConsumers.cpp')
-rw-r--r-- | lib/Frontend/ASTConsumers.cpp | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/lib/Frontend/ASTConsumers.cpp b/lib/Frontend/ASTConsumers.cpp index 80f94397aa..bb1a4e6644 100644 --- a/lib/Frontend/ASTConsumers.cpp +++ b/lib/Frontend/ASTConsumers.cpp @@ -86,6 +86,29 @@ namespace { bool Dump; std::string FilterString; }; + + class ASTDeclNodeLister : public ASTConsumer, + public RecursiveASTVisitor<ASTDeclNodeLister> { + typedef RecursiveASTVisitor<ASTPrinter> base; + + public: + ASTDeclNodeLister(raw_ostream *Out = NULL) + : Out(Out ? *Out : llvm::outs()) {} + + virtual void HandleTranslationUnit(ASTContext &Context) { + TraverseDecl(Context.getTranslationUnitDecl()); + } + + bool shouldWalkTypesOfTypeLocs() const { return false; } + + virtual bool VisitNamedDecl(NamedDecl *D) { + Out << D->getQualifiedNameAsString() << "\n"; + return true; + } + + private: + raw_ostream &Out; + }; } // end anonymous namespace ASTConsumer *clang::CreateASTPrinter(raw_ostream *Out, @@ -97,6 +120,10 @@ ASTConsumer *clang::CreateASTDumper(StringRef FilterString) { return new ASTPrinter(0, /*Dump=*/ true, FilterString); } +ASTConsumer *clang::CreateASTDeclNodeLister() { + return new ASTDeclNodeLister(0); +} + //===----------------------------------------------------------------------===// /// ASTViewer - AST Visualization |