Add a Stmt::printPretty overload which takes an ASTContext; start

transitioning callers over to pass one in.

llvm-svn: 72609
This commit is contained in:
Eli Friedman 2009-05-30 05:03:24 +00:00
parent 796358498f
commit ef334fdfa2
3 changed files with 30 additions and 16 deletions

View 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;

View 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';
}
}

View 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));
}