From: Eli Friedman Date: Sat, 30 May 2009 05:03:24 +0000 (+0000) Subject: Add a Stmt::printPretty overload which takes an ASTContext; start X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=48d14a222276fad5279e994d1a062f36ae6fcbce;p=clang Add a Stmt::printPretty overload which takes an ASTContext; start transitioning callers over to pass one in. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@72609 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/clang/AST/Stmt.h b/include/clang/AST/Stmt.h index 9ac540740e..3656333d74 100644 --- a/include/clang/AST/Stmt.h +++ b/include/clang/AST/Stmt.h @@ -186,8 +186,14 @@ public: /// dumpPretty/printPretty - These two methods do a "pretty print" of the AST /// back to its original source language syntax. - void dumpPretty() const; - void printPretty(llvm::raw_ostream &OS, PrinterHelper* = 0, + void dumpPretty(ASTContext& Context) const; + void printPretty(llvm::raw_ostream &OS, PrinterHelper *Helper = 0, + const PrintingPolicy &Policy = PrintingPolicy(), + unsigned Indentation = 0) const { + printPretty(OS, *(ASTContext*)0, Helper, Policy, Indentation); + } + void printPretty(llvm::raw_ostream &OS, ASTContext& Context, + PrinterHelper *Helper = 0, const PrintingPolicy &Policy = PrintingPolicy(), unsigned Indentation = 0) const; diff --git a/lib/AST/DeclPrinter.cpp b/lib/AST/DeclPrinter.cpp index 950dd9e223..72f97035ef 100644 --- a/lib/AST/DeclPrinter.cpp +++ b/lib/AST/DeclPrinter.cpp @@ -172,6 +172,11 @@ void DeclPrinter::VisitDeclContext(DeclContext *DC, bool Indent) { for (DeclContext::decl_iterator D = DC->decls_begin(Context), DEnd = DC->decls_end(Context); D != DEnd; ++D) { + if (!Policy.Dump) { + // Skip over implicit declarations in pretty-printing mode. + if (D->isImplicit()) continue; + } + // The next bits of code handles stuff like "struct {int x;} a,b"; we're // forced to merge the declarations because there's no other way to // refer to the struct in question. This limited merging is safe without @@ -274,7 +279,7 @@ void DeclPrinter::VisitEnumConstantDecl(EnumConstantDecl *D) { Out << D->getNameAsString(); if (Expr *Init = D->getInitExpr()) { Out << " = "; - Init->printPretty(Out, 0, Policy, Indentation); + Init->printPretty(Out, Context, 0, Policy, Indentation); } } @@ -347,7 +352,7 @@ void DeclPrinter::VisitFunctionDecl(FunctionDecl *D) { } else Out << ' '; - D->getBody(Context)->printPretty(Out, 0, Policy, Indentation); + D->getBody(Context)->printPretty(Out, Context, 0, Policy, Indentation); Out << '\n'; } } @@ -362,7 +367,7 @@ void DeclPrinter::VisitFieldDecl(FieldDecl *D) { if (D->isBitField()) { Out << " : "; - D->getBitWidth()->printPretty(Out, 0, Policy, Indentation); + D->getBitWidth()->printPretty(Out, Context, 0, Policy, Indentation); } } @@ -384,7 +389,7 @@ void DeclPrinter::VisitVarDecl(VarDecl *D) { Out << "("; else Out << " = "; - D->getInit()->printPretty(Out, 0, Policy, Indentation); + D->getInit()->printPretty(Out, Context, 0, Policy, Indentation); if (D->hasCXXDirectInitializer()) Out << ")"; } @@ -396,7 +401,7 @@ void DeclPrinter::VisitParmVarDecl(ParmVarDecl *D) { void DeclPrinter::VisitFileScopeAsmDecl(FileScopeAsmDecl *D) { Out << "__asm ("; - D->getAsmString()->printPretty(Out, 0, Policy, Indentation); + D->getAsmString()->printPretty(Out, Context, 0, Policy, Indentation); Out << ")"; } @@ -475,7 +480,7 @@ void DeclPrinter::VisitObjCMethodDecl(ObjCMethodDecl *OMD) { if (OMD->getBody()) { Out << ' '; - OMD->getBody()->printPretty(Out, 0, Policy); + OMD->getBody()->printPretty(Out, Context, 0, Policy); Out << '\n'; } } diff --git a/lib/AST/StmtPrinter.cpp b/lib/AST/StmtPrinter.cpp index a698688e6c..6d641cf2d9 100644 --- a/lib/AST/StmtPrinter.cpp +++ b/lib/AST/StmtPrinter.cpp @@ -28,15 +28,17 @@ using namespace clang; namespace { class VISIBILITY_HIDDEN StmtPrinter : public StmtVisitor { llvm::raw_ostream &OS; + ASTContext &Context; unsigned IndentLevel; clang::PrinterHelper* Helper; PrintingPolicy Policy; public: - StmtPrinter(llvm::raw_ostream &os, PrinterHelper* helper, + StmtPrinter(llvm::raw_ostream &os, ASTContext &C, PrinterHelper* helper, const PrintingPolicy &Policy = PrintingPolicy(), unsigned Indentation = 0) - : OS(os), IndentLevel(Indentation), Helper(helper), Policy(Policy) {} + : OS(os), Context(C), IndentLevel(Indentation), Helper(helper), + Policy(Policy) {} void PrintStmt(Stmt *S) { PrintStmt(S, Policy.Indentation); @@ -112,7 +114,7 @@ void StmtPrinter::PrintRawCompoundStmt(CompoundStmt *Node) { } void StmtPrinter::PrintRawDecl(Decl *D) { - D->print(OS, *(ASTContext*)0, Policy, IndentLevel); + D->print(OS, Context, Policy, IndentLevel); } void StmtPrinter::PrintRawDeclStmt(DeclStmt *S) { @@ -121,7 +123,7 @@ void StmtPrinter::PrintRawDeclStmt(DeclStmt *S) { for ( ; Begin != End; ++Begin) Decls.push_back(*Begin); - Decl::printGroup(Decls.data(), Decls.size(), OS, *(ASTContext*)0, Policy, + Decl::printGroup(Decls.data(), Decls.size(), OS, Context, Policy, IndentLevel); } @@ -1203,11 +1205,12 @@ void StmtPrinter::VisitBlockDeclRefExpr(BlockDeclRefExpr *Node) { // Stmt method implementations //===----------------------------------------------------------------------===// -void Stmt::dumpPretty() const { - printPretty(llvm::errs(), 0, PrintingPolicy()); +void Stmt::dumpPretty(ASTContext& Context) const { + printPretty(llvm::errs(), Context, 0, PrintingPolicy()); } -void Stmt::printPretty(llvm::raw_ostream &OS, PrinterHelper* Helper, +void Stmt::printPretty(llvm::raw_ostream &OS, ASTContext& Context, + PrinterHelper* Helper, const PrintingPolicy &Policy, unsigned Indentation) const { if (this == 0) { @@ -1220,7 +1223,7 @@ void Stmt::printPretty(llvm::raw_ostream &OS, PrinterHelper* Helper, return; } - StmtPrinter P(OS, Helper, Policy, Indentation); + StmtPrinter P(OS, Context, Helper, Policy, Indentation); P.Visit(const_cast(this)); }