diff options
| author | Douglas Gregor <dgregor@apple.com> | 2009-05-21 20:55:50 +0000 |
|---|---|---|
| committer | Douglas Gregor <dgregor@apple.com> | 2009-05-21 20:55:50 +0000 |
| commit | 7f5601e55f7f16abdb88130a56241f6c3b059694 (patch) | |
| tree | c0c0e9d9f4aa3773d3a558504bedf237f09d6849 /clang/lib/Frontend/ASTConsumers.cpp | |
| parent | 0ac904455e15edb67403e278c1e913f41f896e5c (diff) | |
| download | bcm5719-llvm-7f5601e55f7f16abdb88130a56241f6c3b059694.tar.gz bcm5719-llvm-7f5601e55f7f16abdb88130a56241f6c3b059694.zip | |
AST XML dump, from Olaf Krzikalla!
llvm-svn: 72224
Diffstat (limited to 'clang/lib/Frontend/ASTConsumers.cpp')
| -rw-r--r-- | clang/lib/Frontend/ASTConsumers.cpp | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/clang/lib/Frontend/ASTConsumers.cpp b/clang/lib/Frontend/ASTConsumers.cpp index 53034e96d92..ba482b049a5 100644 --- a/clang/lib/Frontend/ASTConsumers.cpp +++ b/clang/lib/Frontend/ASTConsumers.cpp @@ -12,6 +12,7 @@ //===----------------------------------------------------------------------===// #include "clang/Frontend/ASTConsumers.h" +#include "clang/Frontend/DocumentXML.h" #include "clang/Frontend/PathDiagnosticClients.h" #include "clang/Basic/Diagnostic.h" #include "clang/Basic/SourceManager.h" @@ -587,6 +588,41 @@ ASTConsumer *clang::CreateASTPrinter(llvm::raw_ostream* out) { } //===----------------------------------------------------------------------===// +/// ASTPrinterXML - XML-printer of ASTs + +namespace { + class ASTPrinterXML : public ASTConsumer { + DocumentXML Doc; + + public: + ASTPrinterXML(llvm::raw_ostream& o) : Doc("CLANG_XML", o) {} + + void Initialize(ASTContext &Context) { + Doc.initialize(Context); + } + + virtual void HandleTranslationUnit(ASTContext &Ctx) { + Doc.addSubNode("TranslationUnit"); + for (DeclContext::decl_iterator + D = Ctx.getTranslationUnitDecl()->decls_begin(Ctx), + DEnd = Ctx.getTranslationUnitDecl()->decls_end(Ctx); + D != DEnd; + ++D) + { + Doc.PrintDecl(*D); + } + Doc.toParent(); + Doc.finalize(); + } + }; +} // end anonymous namespace + + +ASTConsumer *clang::CreateASTPrinterXML(llvm::raw_ostream* out) { + return new ASTPrinterXML(out ? *out : llvm::outs()); +} + +//===----------------------------------------------------------------------===// /// ASTDumper - Low-level dumper of ASTs namespace { |

