From 5399ce26f27e6d093417a3882e38da8738a78fef Mon Sep 17 00:00:00 2001 From: Ted Kremenek Date: Wed, 12 Dec 2007 06:59:42 +0000 Subject: [PATCH] Added back VisitDeclStmt() to the StmtDumper, essentially reverting r44920: http://llvm.org/viewvc/llvm-project?rev=44920&view=rev Putting VisitDeclStmt() was motivated because it called DumpDeclarator(), which printed out a little bit more information than just using the child_iterator interface to visit the subexpressions of DeclStmt. To avoid printing the initializers twice, DumpSubTree() now specially checks for DeclStmts; in such cases it calls VisitDeclStmt() without using the child_iterators to visit the subexpressions. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@44924 91177308-0d34-0410-b5e6-96231b3b80d8 --- AST/StmtDumper.cpp | 37 ++++++++++++++++++++++++++++--------- 1 file changed, 28 insertions(+), 9 deletions(-) diff --git a/AST/StmtDumper.cpp b/AST/StmtDumper.cpp index b36c80b237..ae792094a6 100644 --- a/AST/StmtDumper.cpp +++ b/AST/StmtDumper.cpp @@ -54,17 +54,21 @@ namespace { ++IndentLevel; if (S) { - Visit(S); - - // Print out children. - Stmt::child_iterator CI = S->child_begin(), CE = S->child_end(); - if (CI != CE) { - while (CI != CE) { - fprintf(F, "\n"); - DumpSubTree(*CI++); + if (DeclStmt* DS = dyn_cast(S)) + VisitDeclStmt(DS); + else { + Visit(S); + + // Print out children. + Stmt::child_iterator CI = S->child_begin(), CE = S->child_end(); + if (CI != CE) { + while (CI != CE) { + fprintf(F, "\n"); + DumpSubTree(*CI++); + } } + fprintf(F, ")"); } - fprintf(F, ")"); } else { Indent(); fprintf(F, "<<>>"); @@ -102,6 +106,7 @@ namespace { // Stmts. void VisitStmt(Stmt *Node); + void VisitDeclStmt(DeclStmt *Node); void VisitLabelStmt(LabelStmt *Node); void VisitGotoStmt(GotoStmt *Node); @@ -232,6 +237,20 @@ void StmtDumper::DumpDeclarator(Decl *D) { } } +void StmtDumper::VisitDeclStmt(DeclStmt *Node) { + DumpStmt(Node); + fprintf(F,"\n"); + for (ScopedDecl *D = Node->getDecl(); D; D = D->getNextDeclarator()) { + ++IndentLevel; + Indent(); + fprintf(F, "%p ", (void*) D); + DumpDeclarator(D); + if (D->getNextDeclarator()) + fprintf(F,"\n"); + --IndentLevel; + } +} + void StmtDumper::VisitLabelStmt(LabelStmt *Node) { DumpStmt(Node); fprintf(F, " '%s'\n", Node->getName()); -- 2.50.1