]> granicus.if.org Git - clang/commitdiff
Add a Stmt::printPretty overload which takes an ASTContext; start
authorEli Friedman <eli.friedman@gmail.com>
Sat, 30 May 2009 05:03:24 +0000 (05:03 +0000)
committerEli Friedman <eli.friedman@gmail.com>
Sat, 30 May 2009 05:03:24 +0000 (05:03 +0000)
transitioning callers over to pass one in.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@72609 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/AST/Stmt.h
lib/AST/DeclPrinter.cpp
lib/AST/StmtPrinter.cpp

index 9ac540740e52a24c9dffbc9f3e60cf8a2cc46356..3656333d7423533ed710fe2d8aced4ab3a888492 100644 (file)
@@ -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;
   
index 950dd9e223decb8213d6748e94d145d9ac21e353..72f97035ef1af7ede58c2b69a2e5b15bbffd3e46 100644 (file)
@@ -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';
   }
 }
index a698688e6cee775c08768175180b791fca4e8f98..6d641cf2d912fbd5d7c3d7c71795d45f5dcbee28 100644 (file)
@@ -28,15 +28,17 @@ using namespace clang;
 namespace  {
   class VISIBILITY_HIDDEN StmtPrinter : public StmtVisitor<StmtPrinter> {
     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<Stmt*>(this));
 }