diff options
author | Stephen Kelly <steveire@gmail.com> | 2019-01-12 16:35:37 +0000 |
---|---|---|
committer | Stephen Kelly <steveire@gmail.com> | 2019-01-12 16:35:37 +0000 |
commit | 63a6f3acbd80c602647a2f37aabd2a5c2967094f (patch) | |
tree | 0bca1a191bf3436c49c9e654a4e5afe4a97f8d63 /clang/lib/AST/ASTDumper.cpp | |
parent | 9bc90a28297adc95456893abd4eb2fa72139fced (diff) | |
download | bcm5719-llvm-63a6f3acbd80c602647a2f37aabd2a5c2967094f.tar.gz bcm5719-llvm-63a6f3acbd80c602647a2f37aabd2a5c2967094f.zip |
Implement TemplateArgument dumping in terms of Visitor
Summary: Split the output streaming from the traversal to other AST nodes.
Reviewers: aaron.ballman
Subscribers: cfe-commits
Differential Revision: https://reviews.llvm.org/D55491
llvm-svn: 351012
Diffstat (limited to 'clang/lib/AST/ASTDumper.cpp')
-rw-r--r-- | clang/lib/AST/ASTDumper.cpp | 57 |
1 files changed, 13 insertions, 44 deletions
diff --git a/clang/lib/AST/ASTDumper.cpp b/clang/lib/AST/ASTDumper.cpp index 513f2ec0294..1865d0db47c 100644 --- a/clang/lib/AST/ASTDumper.cpp +++ b/clang/lib/AST/ASTDumper.cpp @@ -24,6 +24,7 @@ #include "clang/AST/DeclVisitor.h" #include "clang/AST/LocInfoType.h" #include "clang/AST/StmtVisitor.h" +#include "clang/AST/TemplateArgumentVisitor.h" #include "clang/AST/TextNodeDumper.h" #include "clang/AST/TypeVisitor.h" #include "clang/Basic/Builtins.h" @@ -44,7 +45,8 @@ namespace { public ConstStmtVisitor<ASTDumper>, public ConstCommentVisitor<ASTDumper, void, const FullComment *>, public TypeVisitor<ASTDumper>, - public ConstAttrVisitor<ASTDumper> { + public ConstAttrVisitor<ASTDumper>, + public ConstTemplateArgumentVisitor<ASTDumper> { TextNodeDumper NodeDumper; @@ -440,6 +442,14 @@ namespace { // Comments. void dumpComment(const Comment *C, const FullComment *FC); + void VisitExpressionTemplateArgument(const TemplateArgument &TA) { + dumpStmt(TA.getAsExpr()); + } + void VisitPackTemplateArgument(const TemplateArgument &TA) { + for (const auto& TArg : TA.pack_elements()) + dumpTemplateArgument(TArg); + } + // Implements Visit methods for Attrs. #include "clang/AST/AttrNodeTraverse.inc" }; @@ -670,49 +680,8 @@ void ASTDumper::dumpTemplateArgumentList(const TemplateArgumentList &TAL) { void ASTDumper::dumpTemplateArgument(const TemplateArgument &A, SourceRange R, const Decl *From, const char *Label) { dumpChild([=] { - OS << "TemplateArgument"; - if (R.isValid()) - NodeDumper.dumpSourceRange(R); - - if (From) - NodeDumper.dumpDeclRef(From, Label); - - switch (A.getKind()) { - case TemplateArgument::Null: - OS << " null"; - break; - case TemplateArgument::Type: - OS << " type"; - NodeDumper.dumpType(A.getAsType()); - break; - case TemplateArgument::Declaration: - OS << " decl"; - NodeDumper.dumpDeclRef(A.getAsDecl()); - break; - case TemplateArgument::NullPtr: - OS << " nullptr"; - break; - case TemplateArgument::Integral: - OS << " integral " << A.getAsIntegral(); - break; - case TemplateArgument::Template: - OS << " template "; - A.getAsTemplate().dump(OS); - break; - case TemplateArgument::TemplateExpansion: - OS << " template expansion "; - A.getAsTemplateOrTemplatePattern().dump(OS); - break; - case TemplateArgument::Expression: - OS << " expr"; - dumpStmt(A.getAsExpr()); - break; - case TemplateArgument::Pack: - OS << " pack"; - for (const auto& TArg : A.pack_elements()) - dumpTemplateArgument(TArg); - break; - } + NodeDumper.Visit(A, R, From, Label); + ConstTemplateArgumentVisitor<ASTDumper>::Visit(A); }); } |