diff options
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 |