[ASTDump] Re-arrange method declarations to group Visit together

This will make follow-up commits easier to review.

llvm-svn: 352661
This commit is contained in:
Stephen Kelly 2019-01-30 20:03:47 +00:00
parent 22b3de5b51
commit 0808a25182
1 changed files with 112 additions and 120 deletions

View File

@ -76,24 +76,26 @@ namespace {
void Visit(const Decl *D); void Visit(const Decl *D);
void Visit(const Stmt *S, StringRef Label = {}); void Visit(const Stmt *S, StringRef Label = {});
// Utilities
void Visit(QualType T); void Visit(QualType T);
void Visit(const Type *T); void Visit(const Type *T);
void dumpDeclContext(const DeclContext *DC);
void dumpLookups(const DeclContext *DC, bool DumpDecls);
void Visit(const Attr *A); void Visit(const Attr *A);
void Visit(const CXXCtorInitializer *Init);
void Visit(const TemplateArgument &A, SourceRange R = SourceRange(),
const Decl *From = nullptr, const char *Label = nullptr);
void Visit(const BlockDecl::Capture &C);
void Visit(const OMPClause *C);
void Visit(const GenericSelectionExpr::ConstAssociation &A);
void Visit(const Comment *C, const FullComment *FC);
// C++ Utilities // C++ Utilities
void Visit(const CXXCtorInitializer *Init); void dumpDeclContext(const DeclContext *DC);
void dumpLookups(const DeclContext *DC, bool DumpDecls);
void dumpTemplateParameters(const TemplateParameterList *TPL); void dumpTemplateParameters(const TemplateParameterList *TPL);
void dumpTemplateArgumentListInfo(const TemplateArgumentListInfo &TALI); void dumpTemplateArgumentListInfo(const TemplateArgumentListInfo &TALI);
void dumpTemplateArgumentLoc(const TemplateArgumentLoc &A, void dumpTemplateArgumentLoc(const TemplateArgumentLoc &A,
const Decl *From = nullptr, const Decl *From = nullptr,
const char *Label = nullptr); const char *Label = nullptr);
void dumpTemplateArgumentList(const TemplateArgumentList &TAL); void dumpTemplateArgumentList(const TemplateArgumentList &TAL);
void Visit(const TemplateArgument &A, SourceRange R = SourceRange(),
const Decl *From = nullptr, const char *Label = nullptr);
template <typename SpecializationDecl> template <typename SpecializationDecl>
void dumpTemplateDeclSpecialization(const SpecializationDecl *D, void dumpTemplateDeclSpecialization(const SpecializationDecl *D,
bool DumpExplicitInst, bool DumpExplicitInst,
@ -242,7 +244,6 @@ namespace {
void VisitObjCCategoryDecl(const ObjCCategoryDecl *D); void VisitObjCCategoryDecl(const ObjCCategoryDecl *D);
void VisitObjCInterfaceDecl(const ObjCInterfaceDecl *D); void VisitObjCInterfaceDecl(const ObjCInterfaceDecl *D);
void VisitObjCImplementationDecl(const ObjCImplementationDecl *D); void VisitObjCImplementationDecl(const ObjCImplementationDecl *D);
void Visit(const BlockDecl::Capture &C);
void VisitBlockDecl(const BlockDecl *D); void VisitBlockDecl(const BlockDecl *D);
// Stmts. // Stmts.
@ -252,14 +253,12 @@ namespace {
void VisitCapturedStmt(const CapturedStmt *Node); void VisitCapturedStmt(const CapturedStmt *Node);
// OpenMP // OpenMP
void Visit(const OMPClause *C);
void VisitOMPExecutableDirective(const OMPExecutableDirective *Node); void VisitOMPExecutableDirective(const OMPExecutableDirective *Node);
// Exprs // Exprs
void VisitInitListExpr(const InitListExpr *ILE); void VisitInitListExpr(const InitListExpr *ILE);
void VisitBlockExpr(const BlockExpr *Node); void VisitBlockExpr(const BlockExpr *Node);
void VisitOpaqueValueExpr(const OpaqueValueExpr *Node); void VisitOpaqueValueExpr(const OpaqueValueExpr *Node);
void Visit(const GenericSelectionExpr::ConstAssociation &A);
void VisitGenericSelectionExpr(const GenericSelectionExpr *E); void VisitGenericSelectionExpr(const GenericSelectionExpr *E);
// C++ // C++
@ -271,9 +270,6 @@ namespace {
// ObjC // ObjC
void VisitObjCAtCatchStmt(const ObjCAtCatchStmt *Node); void VisitObjCAtCatchStmt(const ObjCAtCatchStmt *Node);
// Comments.
void Visit(const Comment *C, const FullComment *FC);
void VisitExpressionTemplateArgument(const TemplateArgument &TA) { void VisitExpressionTemplateArgument(const TemplateArgument &TA) {
Visit(TA.getAsExpr()); Visit(TA.getAsExpr());
} }
@ -291,6 +287,49 @@ namespace {
// Utilities // Utilities
//===----------------------------------------------------------------------===// //===----------------------------------------------------------------------===//
void ASTDumper::Visit(const Decl *D) {
NodeDumper.AddChild([=] {
NodeDumper.Visit(D);
if (!D)
return;
ConstDeclVisitor<ASTDumper>::Visit(D);
for (const auto &A : D->attrs())
Visit(A);
if (const FullComment *Comment =
D->getASTContext().getLocalCommentForDeclUncached(D))
Visit(Comment, Comment);
// Decls within functions are visited by the body.
if (!isa<FunctionDecl>(*D) && !isa<ObjCMethodDecl>(*D)) {
if (const auto *DC = dyn_cast<DeclContext>(D))
dumpDeclContext(DC);
}
});
}
void ASTDumper::Visit(const Stmt *S, StringRef Label) {
NodeDumper.AddChild(Label, [=] {
NodeDumper.Visit(S);
if (!S) {
return;
}
ConstStmtVisitor<ASTDumper>::Visit(S);
// Some statements have custom mechanisms for dumping their children.
if (isa<DeclStmt>(S) || isa<GenericSelectionExpr>(S)) {
return;
}
for (const Stmt *SubStmt : S->children())
Visit(SubStmt);
});
}
void ASTDumper::Visit(QualType T) { void ASTDumper::Visit(QualType T) {
SplitQualType SQT = T.split(); SplitQualType SQT = T.split();
if (!SQT.Quals.hasQualifiers()) if (!SQT.Quals.hasQualifiers())
@ -316,6 +355,66 @@ void ASTDumper::Visit(const Type *T) {
}); });
} }
void ASTDumper::Visit(const Attr *A) {
NodeDumper.AddChild([=] {
NodeDumper.Visit(A);
ConstAttrVisitor<ASTDumper>::Visit(A);
});
}
void ASTDumper::Visit(const CXXCtorInitializer *Init) {
NodeDumper.AddChild([=] {
NodeDumper.Visit(Init);
Visit(Init->getInit());
});
}
void ASTDumper::Visit(const TemplateArgument &A, SourceRange R,
const Decl *From, const char *Label) {
NodeDumper.AddChild([=] {
NodeDumper.Visit(A, R, From, Label);
ConstTemplateArgumentVisitor<ASTDumper>::Visit(A);
});
}
void ASTDumper::Visit(const BlockDecl::Capture &C) {
NodeDumper.AddChild([=] {
NodeDumper.Visit(C);
if (C.hasCopyExpr())
Visit(C.getCopyExpr());
});
}
void ASTDumper::Visit(const OMPClause *C) {
NodeDumper.AddChild([=] {
NodeDumper.Visit(C);
for (const auto *S : C->children())
Visit(S);
});
}
void ASTDumper::Visit(const GenericSelectionExpr::ConstAssociation &A) {
NodeDumper.AddChild([=] {
NodeDumper.Visit(A);
if (const TypeSourceInfo *TSI = A.getTypeSourceInfo())
Visit(TSI->getType());
Visit(A.getAssociationExpr());
});
}
void ASTDumper::Visit(const Comment *C, const FullComment *FC) {
NodeDumper.AddChild([=] {
NodeDumper.Visit(C, FC);
if (!C) {
return;
}
ConstCommentVisitor<ASTDumper, void, const FullComment *>::visit(C, FC);
for (Comment::child_iterator I = C->child_begin(), E = C->child_end();
I != E; ++I)
Visit(*I, FC);
});
}
void ASTDumper::dumpDeclContext(const DeclContext *DC) { void ASTDumper::dumpDeclContext(const DeclContext *DC) {
if (!DC) if (!DC)
return; return;
@ -383,24 +482,10 @@ void ASTDumper::dumpLookups(const DeclContext *DC, bool DumpDecls) {
}); });
} }
void ASTDumper::Visit(const Attr *A) {
NodeDumper.AddChild([=] {
NodeDumper.Visit(A);
ConstAttrVisitor<ASTDumper>::Visit(A);
});
}
//===----------------------------------------------------------------------===// //===----------------------------------------------------------------------===//
// C++ Utilities // C++ Utilities
//===----------------------------------------------------------------------===// //===----------------------------------------------------------------------===//
void ASTDumper::Visit(const CXXCtorInitializer *Init) {
NodeDumper.AddChild([=] {
NodeDumper.Visit(Init);
Visit(Init->getInit());
});
}
void ASTDumper::dumpTemplateParameters(const TemplateParameterList *TPL) { void ASTDumper::dumpTemplateParameters(const TemplateParameterList *TPL) {
if (!TPL) if (!TPL)
return; return;
@ -425,14 +510,6 @@ void ASTDumper::dumpTemplateArgumentList(const TemplateArgumentList &TAL) {
Visit(TAL[i]); Visit(TAL[i]);
} }
void ASTDumper::Visit(const TemplateArgument &A, SourceRange R,
const Decl *From, const char *Label) {
NodeDumper.AddChild([=] {
NodeDumper.Visit(A, R, From, Label);
ConstTemplateArgumentVisitor<ASTDumper>::Visit(A);
});
}
//===----------------------------------------------------------------------===// //===----------------------------------------------------------------------===//
// Objective-C Utilities // Objective-C Utilities
//===----------------------------------------------------------------------===// //===----------------------------------------------------------------------===//
@ -449,29 +526,6 @@ void ASTDumper::dumpObjCTypeParamList(const ObjCTypeParamList *typeParams) {
// Decl dumping methods. // Decl dumping methods.
//===----------------------------------------------------------------------===// //===----------------------------------------------------------------------===//
void ASTDumper::Visit(const Decl *D) {
NodeDumper.AddChild([=] {
NodeDumper.Visit(D);
if (!D)
return;
ConstDeclVisitor<ASTDumper>::Visit(D);
for (const auto &A : D->attrs())
Visit(A);
if (const FullComment *Comment =
D->getASTContext().getLocalCommentForDeclUncached(D))
Visit(Comment, Comment);
// Decls within functions are visited by the body.
if (!isa<FunctionDecl>(*D) && !isa<ObjCMethodDecl>(*D)) {
if (const auto *DC = dyn_cast<DeclContext>(D))
dumpDeclContext(DC);
}
});
}
void ASTDumper::VisitTypedefDecl(const TypedefDecl *D) { void ASTDumper::VisitTypedefDecl(const TypedefDecl *D) {
Visit(D->getUnderlyingType()); Visit(D->getUnderlyingType());
} }
@ -728,14 +782,6 @@ void ASTDumper::VisitObjCImplementationDecl(const ObjCImplementationDecl *D) {
Visit(I); Visit(I);
} }
void ASTDumper::Visit(const BlockDecl::Capture &C) {
NodeDumper.AddChild([=] {
NodeDumper.Visit(C);
if (C.hasCopyExpr())
Visit(C.getCopyExpr());
});
}
void ASTDumper::VisitBlockDecl(const BlockDecl *D) { void ASTDumper::VisitBlockDecl(const BlockDecl *D) {
for (const auto &I : D->parameters()) for (const auto &I : D->parameters())
Visit(I); Visit(I);
@ -749,26 +795,6 @@ void ASTDumper::VisitBlockDecl(const BlockDecl *D) {
// Stmt dumping methods. // Stmt dumping methods.
//===----------------------------------------------------------------------===// //===----------------------------------------------------------------------===//
void ASTDumper::Visit(const Stmt *S, StringRef Label) {
NodeDumper.AddChild(Label, [=] {
NodeDumper.Visit(S);
if (!S) {
return;
}
ConstStmtVisitor<ASTDumper>::Visit(S);
// Some statements have custom mechanisms for dumping their children.
if (isa<DeclStmt>(S) || isa<GenericSelectionExpr>(S)) {
return;
}
for (const Stmt *SubStmt : S->children())
Visit(SubStmt);
});
}
void ASTDumper::VisitDeclStmt(const DeclStmt *Node) { void ASTDumper::VisitDeclStmt(const DeclStmt *Node) {
for (const auto &D : Node->decls()) for (const auto &D : Node->decls())
Visit(D); Visit(D);
@ -791,14 +817,6 @@ void ASTDumper::VisitCapturedStmt(const CapturedStmt *Node) {
// OpenMP dumping methods. // OpenMP dumping methods.
//===----------------------------------------------------------------------===// //===----------------------------------------------------------------------===//
void ASTDumper::Visit(const OMPClause *C) {
NodeDumper.AddChild([=] {
NodeDumper.Visit(C);
for (const auto *S : C->children())
Visit(S);
});
}
void ASTDumper::VisitOMPExecutableDirective( void ASTDumper::VisitOMPExecutableDirective(
const OMPExecutableDirective *Node) { const OMPExecutableDirective *Node) {
for (const auto *C : Node->clauses()) for (const auto *C : Node->clauses())
@ -825,15 +843,6 @@ void ASTDumper::VisitOpaqueValueExpr(const OpaqueValueExpr *Node) {
Visit(Source); Visit(Source);
} }
void ASTDumper::Visit(const GenericSelectionExpr::ConstAssociation &A) {
NodeDumper.AddChild([=] {
NodeDumper.Visit(A);
if (const TypeSourceInfo *TSI = A.getTypeSourceInfo())
Visit(TSI->getType());
Visit(A.getAssociationExpr());
});
}
void ASTDumper::VisitGenericSelectionExpr(const GenericSelectionExpr *E) { void ASTDumper::VisitGenericSelectionExpr(const GenericSelectionExpr *E) {
Visit(E->getControllingExpr()); Visit(E->getControllingExpr());
Visit(E->getControllingExpr()->getType()); // FIXME: remove Visit(E->getControllingExpr()->getType()); // FIXME: remove
@ -862,23 +871,6 @@ void ASTDumper::VisitObjCAtCatchStmt(const ObjCAtCatchStmt *Node) {
Visit(CatchParam); Visit(CatchParam);
} }
//===----------------------------------------------------------------------===//
// Comments
//===----------------------------------------------------------------------===//
void ASTDumper::Visit(const Comment *C, const FullComment *FC) {
NodeDumper.AddChild([=] {
NodeDumper.Visit(C, FC);
if (!C) {
return;
}
ConstCommentVisitor<ASTDumper, void, const FullComment *>::visit(C, FC);
for (Comment::child_iterator I = C->child_begin(), E = C->child_end();
I != E; ++I)
Visit(*I, FC);
});
}
//===----------------------------------------------------------------------===// //===----------------------------------------------------------------------===//
// Type method implementations // Type method implementations
//===----------------------------------------------------------------------===// //===----------------------------------------------------------------------===//