On Tue, Jan 15, 2019 at 4:39 AM Stephen Kelly via cfe-commits <cfe-commits@lists.llvm.org> wrote: > > Author: steveire > Date: Tue Jan 15 01:35:52 2019 > New Revision: 351175 > > URL: http://llvm.org/viewvc/llvm-project?rev=351175&view=rev > Log: > NFC: Move Decl node handling to TextNodeDumper > > Reviewers: aaron.ballman > > Subscribers: cfe-commits > > Differential Revision: https://reviews.llvm.org/D56643 > > Modified: > cfe/trunk/include/clang/AST/TextNodeDumper.h > cfe/trunk/lib/AST/ASTDumper.cpp > cfe/trunk/lib/AST/TextNodeDumper.cpp > > Modified: cfe/trunk/include/clang/AST/TextNodeDumper.h > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/TextNodeDumper.h?rev=351175&r1=351174&r2=351175&view=diff > ============================================================================== > --- cfe/trunk/include/clang/AST/TextNodeDumper.h (original) > +++ cfe/trunk/include/clang/AST/TextNodeDumper.h Tue Jan 15 01:35:52 2019 > @@ -165,6 +165,8 @@ public: > > void Visit(QualType T); > > + void Visit(const Decl *D); > + > void dumpPointer(const void *Ptr); > void dumpLocation(SourceLocation Loc); > void dumpSourceRange(SourceRange R); > > Modified: cfe/trunk/lib/AST/ASTDumper.cpp > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/ASTDumper.cpp?rev=351175&r1=351174&r2=351175&view=diff > ============================================================================== > --- cfe/trunk/lib/AST/ASTDumper.cpp (original) > +++ cfe/trunk/lib/AST/ASTDumper.cpp Tue Jan 15 01:35:52 2019 > @@ -435,35 +435,6 @@ void ASTDumper::dumpAttr(const Attr *A) > }); > } > > -static void dumpPreviousDeclImpl(raw_ostream &OS, ...) {} > - > -template<typename T> > -static void dumpPreviousDeclImpl(raw_ostream &OS, const Mergeable<T> *D) { > - const T *First = D->getFirstDecl(); > - if (First != D) > - OS << " first " << First; > -} > - > -template<typename T> > -static void dumpPreviousDeclImpl(raw_ostream &OS, const Redeclarable<T> *D) { > - const T *Prev = D->getPreviousDecl(); > - if (Prev) > - OS << " prev " << Prev; > -} > - > -/// Dump the previous declaration in the redeclaration chain for a > declaration, > -/// if any. > -static void dumpPreviousDecl(raw_ostream &OS, const Decl *D) { > - switch (D->getKind()) { > -#define DECL(DERIVED, BASE) \ > - case Decl::DERIVED: \ > - return dumpPreviousDeclImpl(OS, cast<DERIVED##Decl>(D)); > -#define ABSTRACT_DECL(DECL) > -#include "clang/AST/DeclNodes.inc" > - } > - llvm_unreachable("Decl that isn't part of DeclNodes.inc!"); > -} > - > > //===----------------------------------------------------------------------===// > // C++ Utilities > > //===----------------------------------------------------------------------===// > @@ -536,46 +507,9 @@ void ASTDumper::dumpObjCTypeParamList(co > > void ASTDumper::dumpDecl(const Decl *D) { > dumpChild([=] { > - if (!D) { > - ColorScope Color(OS, ShowColors, NullColor); > - OS << "<<<NULL>>>"; > + NodeDumper.Visit(D); > + if (!D) > return; > - } > - > - { > - ColorScope Color(OS, ShowColors, DeclKindNameColor); > - OS << D->getDeclKindName() << "Decl"; > - } > - NodeDumper.dumpPointer(D); > - if (D->getLexicalDeclContext() != D->getDeclContext()) > - OS << " parent " << cast<Decl>(D->getDeclContext()); > - dumpPreviousDecl(OS, D); > - NodeDumper.dumpSourceRange(D->getSourceRange()); > - OS << ' '; > - NodeDumper.dumpLocation(D->getLocation()); > - if (D->isFromASTFile()) > - OS << " imported"; > - if (Module *M = D->getOwningModule()) > - OS << " in " << M->getFullModuleName(); > - if (auto *ND = dyn_cast<NamedDecl>(D)) > - for (Module *M : D->getASTContext().getModulesWithMergedDefinition( > - const_cast<NamedDecl *>(ND))) > - dumpChild([=] { OS << "also in " << M->getFullModuleName(); }); > - if (const NamedDecl *ND = dyn_cast<NamedDecl>(D))
This wasn't switched over to `const auto *` as asked for in the review. > - if (ND->isHidden()) > - OS << " hidden"; > - if (D->isImplicit()) > - OS << " implicit"; > - if (D->isUsed()) > - OS << " used"; > - else if (D->isThisDeclarationReferenced()) > - OS << " referenced"; > - if (D->isInvalidDecl()) > - OS << " invalid"; > - if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(D)) > - if (FD->isConstexpr()) > - OS << " constexpr"; > - > > ConstDeclVisitor<ASTDumper>::Visit(D); > > > Modified: cfe/trunk/lib/AST/TextNodeDumper.cpp > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/TextNodeDumper.cpp?rev=351175&r1=351174&r2=351175&view=diff > ============================================================================== > --- cfe/trunk/lib/AST/TextNodeDumper.cpp (original) > +++ cfe/trunk/lib/AST/TextNodeDumper.cpp Tue Jan 15 01:35:52 2019 > @@ -12,11 +12,42 @@ > > //===----------------------------------------------------------------------===// > > #include "clang/AST/TextNodeDumper.h" > +#include "clang/AST/DeclFriend.h" > +#include "clang/AST/DeclOpenMP.h" > #include "clang/AST/DeclTemplate.h" > #include "clang/AST/LocInfoType.h" > > using namespace clang; > > +static void dumpPreviousDeclImpl(raw_ostream &OS, ...) {} > + > +template <typename T> > +static void dumpPreviousDeclImpl(raw_ostream &OS, const Mergeable<T> *D) { > + const T *First = D->getFirstDecl(); > + if (First != D) > + OS << " first " << First; > +} > + > +template <typename T> > +static void dumpPreviousDeclImpl(raw_ostream &OS, const Redeclarable<T> *D) { > + const T *Prev = D->getPreviousDecl(); > + if (Prev) > + OS << " prev " << Prev; > +} > + > +/// Dump the previous declaration in the redeclaration chain for a > declaration, > +/// if any. > +static void dumpPreviousDecl(raw_ostream &OS, const Decl *D) { > + switch (D->getKind()) { > +#define DECL(DERIVED, BASE) > \ > + case Decl::DERIVED: > \ > + return dumpPreviousDeclImpl(OS, cast<DERIVED##Decl>(D)); > +#define ABSTRACT_DECL(DECL) > +#include "clang/AST/DeclNodes.inc" > + } > + llvm_unreachable("Decl that isn't part of DeclNodes.inc!"); > +} > + > TextNodeDumper::TextNodeDumper(raw_ostream &OS, bool ShowColors, > const SourceManager *SM, > const PrintingPolicy &PrintPolicy, > @@ -183,6 +214,50 @@ void TextNodeDumper::Visit(QualType T) { > OS << " " << T.split().Quals.getAsString(); > } > > +void TextNodeDumper::Visit(const Decl *D) { > + if (!D) { > + ColorScope Color(OS, ShowColors, NullColor); > + OS << "<<<NULL>>>"; > + return; > + } > + > + { > + ColorScope Color(OS, ShowColors, DeclKindNameColor); > + OS << D->getDeclKindName() << "Decl"; > + } > + dumpPointer(D); > + if (D->getLexicalDeclContext() != D->getDeclContext()) > + OS << " parent " << cast<Decl>(D->getDeclContext()); > + dumpPreviousDecl(OS, D); > + dumpSourceRange(D->getSourceRange()); > + OS << ' '; > + dumpLocation(D->getLocation()); > + if (D->isFromASTFile()) > + OS << " imported"; > + if (Module *M = D->getOwningModule()) > + OS << " in " << M->getFullModuleName(); > + if (auto *ND = dyn_cast<NamedDecl>(D)) Likewise here > + for (Module *M : D->getASTContext().getModulesWithMergedDefinition( > + const_cast<NamedDecl *>(ND))) > + AddChild([=] { OS << "also in " << M->getFullModuleName(); }); > + if (const NamedDecl *ND = dyn_cast<NamedDecl>(D)) and here. Can you take care of those? ~Aaron > + if (ND->isHidden()) > + OS << " hidden"; > + if (D->isImplicit()) > + OS << " implicit"; > + > + if (D->isUsed()) > + OS << " used"; > + else if (D->isThisDeclarationReferenced()) > + OS << " referenced"; > + > + if (D->isInvalidDecl()) > + OS << " invalid"; > + if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(D)) > + if (FD->isConstexpr()) > + OS << " constexpr"; > +} > + > void TextNodeDumper::dumpPointer(const void *Ptr) { > ColorScope Color(OS, ShowColors, AddressColor); > OS << ' ' << Ptr; > > > _______________________________________________ > cfe-commits mailing list > cfe-commits@lists.llvm.org > http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits