From c8dcbed6e4cf3185b292f2a7458c335c002ac5c0 Mon Sep 17 00:00:00 2001 From: Stephen Kelly Date: Fri, 17 May 2019 13:59:15 +0000 Subject: [PATCH] Extract ASTDumper to a header file Summary: This class has member APIs which are useful to clients. Make it possible to use those APIs without adding them to dump() member functions. Doing so does not scale. The optional arguments to dump() should be designed to be useful in a debugging context. Reviewers: aaron.ballman Subscribers: cfe-commits Tags: #clang Differential Revision: https://reviews.llvm.org/D61835 llvm-svn: 361034 --- clang/include/clang/AST/ASTDumper.h | 56 +++++++++++++++++++++++++++++ clang/lib/AST/ASTDumper.cpp | 47 +----------------------- 2 files changed, 57 insertions(+), 46 deletions(-) create mode 100644 clang/include/clang/AST/ASTDumper.h diff --git a/clang/include/clang/AST/ASTDumper.h b/clang/include/clang/AST/ASTDumper.h new file mode 100644 index 000000000000..61202f057a80 --- /dev/null +++ b/clang/include/clang/AST/ASTDumper.h @@ -0,0 +1,56 @@ +//===--- ASTDumper.h - Dumping implementation for ASTs --------------------===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +#ifndef LLVM_CLANG_AST_ASTDUMPER_H +#define LLVM_CLANG_AST_ASTDUMPER_H + +#include "clang/AST/ASTNodeTraverser.h" +#include "clang/AST/TextNodeDumper.h" + +namespace clang { + +class ASTDumper : public ASTNodeTraverser { + + TextNodeDumper NodeDumper; + + raw_ostream &OS; + + const bool ShowColors; + +public: + ASTDumper(raw_ostream &OS, const comments::CommandTraits *Traits, + const SourceManager *SM) + : ASTDumper(OS, Traits, SM, SM && SM->getDiagnostics().getShowColors()) {} + + ASTDumper(raw_ostream &OS, const comments::CommandTraits *Traits, + const SourceManager *SM, bool ShowColors) + : ASTDumper(OS, Traits, SM, ShowColors, LangOptions()) {} + ASTDumper(raw_ostream &OS, const comments::CommandTraits *Traits, + const SourceManager *SM, bool ShowColors, + const PrintingPolicy &PrintPolicy) + : NodeDumper(OS, ShowColors, SM, PrintPolicy, Traits), OS(OS), + ShowColors(ShowColors) {} + + TextNodeDumper &doGetNodeDelegate() { return NodeDumper; } + + void dumpLookups(const DeclContext *DC, bool DumpDecls); + + template + void dumpTemplateDeclSpecialization(const SpecializationDecl *D, + bool DumpExplicitInst, bool DumpRefOnly); + template + void dumpTemplateDecl(const TemplateDecl *D, bool DumpExplicitInst); + + void VisitFunctionTemplateDecl(const FunctionTemplateDecl *D); + void VisitClassTemplateDecl(const ClassTemplateDecl *D); + void VisitVarTemplateDecl(const VarTemplateDecl *D); +}; + +} // namespace clang + +#endif diff --git a/clang/lib/AST/ASTDumper.cpp b/clang/lib/AST/ASTDumper.cpp index a1f9e3f53916..9dbf7125a551 100644 --- a/clang/lib/AST/ASTDumper.cpp +++ b/clang/lib/AST/ASTDumper.cpp @@ -11,11 +11,10 @@ // //===----------------------------------------------------------------------===// +#include "clang/AST/ASTDumper.h" #include "clang/AST/ASTContext.h" -#include "clang/AST/ASTNodeTraverser.h" #include "clang/AST/DeclLookups.h" #include "clang/AST/JSONNodeDumper.h" -#include "clang/AST/TextNodeDumper.h" #include "clang/Basic/Builtins.h" #include "clang/Basic/Module.h" #include "clang/Basic/SourceManager.h" @@ -23,50 +22,6 @@ using namespace clang; using namespace clang::comments; -//===----------------------------------------------------------------------===// -// ASTDumper Visitor -//===----------------------------------------------------------------------===// - -namespace { - -class ASTDumper : public ASTNodeTraverser { - - TextNodeDumper NodeDumper; - - raw_ostream &OS; - - const bool ShowColors; - -public: - ASTDumper(raw_ostream &OS, const CommandTraits *Traits, - const SourceManager *SM) - : ASTDumper(OS, Traits, SM, SM && SM->getDiagnostics().getShowColors()) {} - - ASTDumper(raw_ostream &OS, const CommandTraits *Traits, - const SourceManager *SM, bool ShowColors) - : ASTDumper(OS, Traits, SM, ShowColors, LangOptions()) {} - ASTDumper(raw_ostream &OS, const CommandTraits *Traits, - const SourceManager *SM, bool ShowColors, - const PrintingPolicy &PrintPolicy) - : NodeDumper(OS, ShowColors, SM, PrintPolicy, Traits), OS(OS), - ShowColors(ShowColors) {} - - TextNodeDumper &doGetNodeDelegate() { return NodeDumper; } - - void dumpLookups(const DeclContext *DC, bool DumpDecls); - - template - void dumpTemplateDeclSpecialization(const SpecializationDecl *D, - bool DumpExplicitInst, bool DumpRefOnly); - template - void dumpTemplateDecl(const TemplateDecl *D, bool DumpExplicitInst); - - void VisitFunctionTemplateDecl(const FunctionTemplateDecl *D); - void VisitClassTemplateDecl(const ClassTemplateDecl *D); - void VisitVarTemplateDecl(const VarTemplateDecl *D); -}; -} // namespace - void ASTDumper::dumpLookups(const DeclContext *DC, bool DumpDecls) { NodeDumper.AddChild([=] { OS << "StoredDeclsMap ";