aboutsummaryrefslogtreecommitdiff
path: root/lib/Frontend/ASTConsumers.cpp
diff options
context:
space:
mode:
authorAlexander Kornienko <alexfh@google.com>2012-07-31 09:37:40 +0000
committerAlexander Kornienko <alexfh@google.com>2012-07-31 09:37:40 +0000
commit171af64ef10ae816ed2a4f15f5d17aca1d71769f (patch)
tree975b767431050b8c1bcc59f42d176f6007e87988 /lib/Frontend/ASTConsumers.cpp
parentff104a12d61d34af67f12a7a966847c821d7afa8 (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.cpp27
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