diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/AST/ASTContext.cpp | 1 | ||||
-rw-r--r-- | lib/AST/CFG.cpp | 37 | ||||
-rw-r--r-- | lib/AST/Decl.cpp | 6 | ||||
-rw-r--r-- | lib/AST/NestedNameSpecifier.cpp | 18 | ||||
-rw-r--r-- | lib/AST/StmtDumper.cpp | 5 | ||||
-rw-r--r-- | lib/AST/StmtPrinter.cpp | 41 | ||||
-rw-r--r-- | lib/AST/TemplateName.cpp | 13 | ||||
-rw-r--r-- | lib/AST/Type.cpp | 175 | ||||
-rw-r--r-- | lib/CodeGen/CGDebugInfo.cpp | 4 | ||||
-rw-r--r-- | lib/Frontend/ASTConsumers.cpp | 26 | ||||
-rw-r--r-- | lib/Frontend/DocumentXML.cpp | 2 | ||||
-rw-r--r-- | lib/Frontend/RewriteBlocks.cpp | 20 | ||||
-rw-r--r-- | lib/Frontend/RewriteObjC.cpp | 22 | ||||
-rw-r--r-- | lib/Sema/Sema.cpp | 2 | ||||
-rw-r--r-- | lib/Sema/SemaTemplateInstantiate.cpp | 3 |
15 files changed, 213 insertions, 162 deletions
diff --git a/lib/AST/ASTContext.cpp b/lib/AST/ASTContext.cpp index 00eaa361a3..c719b0bc7d 100644 --- a/lib/AST/ASTContext.cpp +++ b/lib/AST/ASTContext.cpp @@ -44,6 +44,7 @@ ASTContext::ASTContext(const LangOptions& LOpts, SourceManager &SM, BuiltinInfo.InitializeTargetBuiltins(Target); if (InitializeBuiltins) this->InitializeBuiltins(idents); + PrintingPolicy.CPlusPlus = LangOpts.CPlusPlus; } ASTContext::~ASTContext() { diff --git a/lib/AST/CFG.cpp b/lib/AST/CFG.cpp index af2a8910d8..9f2f2079a0 100644 --- a/lib/AST/CFG.cpp +++ b/lib/AST/CFG.cpp @@ -1525,23 +1525,26 @@ class VISIBILITY_HIDDEN CFGBlockTerminatorPrint llvm::raw_ostream& OS; StmtPrinterHelper* Helper; + PrintingPolicy Policy; + public: - CFGBlockTerminatorPrint(llvm::raw_ostream& os, StmtPrinterHelper* helper) - : OS(os), Helper(helper) {} + CFGBlockTerminatorPrint(llvm::raw_ostream& os, StmtPrinterHelper* helper, + const PrintingPolicy &Policy = PrintingPolicy()) + : OS(os), Helper(helper), Policy(Policy) {} void VisitIfStmt(IfStmt* I) { OS << "if "; - I->getCond()->printPretty(OS,Helper); + I->getCond()->printPretty(OS,Helper,Policy); } // Default case. - void VisitStmt(Stmt* Terminator) { Terminator->printPretty(OS); } + void VisitStmt(Stmt* Terminator) { Terminator->printPretty(OS, Helper, Policy); } void VisitForStmt(ForStmt* F) { OS << "for (" ; if (F->getInit()) OS << "..."; OS << "; "; - if (Stmt* C = F->getCond()) C->printPretty(OS,Helper); + if (Stmt* C = F->getCond()) C->printPretty(OS, Helper, Policy); OS << "; "; if (F->getInc()) OS << "..."; OS << ")"; @@ -1549,33 +1552,33 @@ public: void VisitWhileStmt(WhileStmt* W) { OS << "while " ; - if (Stmt* C = W->getCond()) C->printPretty(OS,Helper); + if (Stmt* C = W->getCond()) C->printPretty(OS, Helper, Policy); } void VisitDoStmt(DoStmt* D) { OS << "do ... while "; - if (Stmt* C = D->getCond()) C->printPretty(OS,Helper); + if (Stmt* C = D->getCond()) C->printPretty(OS, Helper, Policy); } void VisitSwitchStmt(SwitchStmt* Terminator) { OS << "switch "; - Terminator->getCond()->printPretty(OS,Helper); + Terminator->getCond()->printPretty(OS, Helper, Policy); } void VisitConditionalOperator(ConditionalOperator* C) { - C->getCond()->printPretty(OS,Helper); + C->getCond()->printPretty(OS, Helper, Policy); OS << " ? ... : ..."; } void VisitChooseExpr(ChooseExpr* C) { OS << "__builtin_choose_expr( "; - C->getCond()->printPretty(OS,Helper); + C->getCond()->printPretty(OS, Helper, Policy); OS << " )"; } void VisitIndirectGotoStmt(IndirectGotoStmt* I) { OS << "goto *"; - I->getTarget()->printPretty(OS,Helper); + I->getTarget()->printPretty(OS, Helper, Policy); } void VisitBinaryOperator(BinaryOperator* B) { @@ -1584,7 +1587,7 @@ public: return; } - B->getLHS()->printPretty(OS,Helper); + B->getLHS()->printPretty(OS, Helper, Policy); switch (B->getOpcode()) { case BinaryOperator::LOr: @@ -1599,7 +1602,7 @@ public: } void VisitExpr(Expr* E) { - E->printPretty(OS,Helper); + E->printPretty(OS, Helper, Policy); } }; @@ -1629,7 +1632,7 @@ void print_stmt(llvm::raw_ostream&OS, StmtPrinterHelper* Helper, Stmt* Terminato } } - Terminator->printPretty(OS, Helper); + Terminator->printPretty(OS, Helper, /*FIXME:*/PrintingPolicy()); // Expressions need a newline. if (isa<Expr>(Terminator)) OS << '\n'; @@ -1662,10 +1665,10 @@ void print_block(llvm::raw_ostream& OS, const CFG* cfg, const CFGBlock& B, OS << L->getName(); else if (CaseStmt* C = dyn_cast<CaseStmt>(Terminator)) { OS << "case "; - C->getLHS()->printPretty(OS); + C->getLHS()->printPretty(OS, Helper, /*FIXME:*/PrintingPolicy()); if (C->getRHS()) { OS << " ... "; - C->getRHS()->printPretty(OS); + C->getRHS()->printPretty(OS, Helper, /*FIXME:*/PrintingPolicy()); } } else if (isa<DefaultStmt>(Terminator)) @@ -1703,7 +1706,7 @@ void print_block(llvm::raw_ostream& OS, const CFG* cfg, const CFGBlock& B, if (Helper) Helper->setBlockID(-1); - CFGBlockTerminatorPrint TPrinter(OS,Helper); + CFGBlockTerminatorPrint TPrinter(OS, Helper, /*FIXME*/PrintingPolicy()); TPrinter.Visit(const_cast<Stmt*>(B.getTerminator())); OS << '\n'; } diff --git a/lib/AST/Decl.cpp b/lib/AST/Decl.cpp index 063914092e..cb3ec1f487 100644 --- a/lib/AST/Decl.cpp +++ b/lib/AST/Decl.cpp @@ -18,6 +18,7 @@ #include "clang/AST/ASTContext.h" #include "clang/AST/Stmt.h" #include "clang/AST/Expr.h" +#include "clang/AST/PrettyPrinter.h" #include "clang/Basic/IdentifierTable.h" #include <vector> @@ -224,10 +225,13 @@ std::string NamedDecl::getQualifiedNameAsString() const { if (const ClassTemplateSpecializationDecl *Spec = dyn_cast<ClassTemplateSpecializationDecl>(Ctx)) { const TemplateArgumentList &TemplateArgs = Spec->getTemplateArgs(); + PrintingPolicy Policy; + Policy.CPlusPlus = true; std::string TemplateArgsStr = TemplateSpecializationType::PrintTemplateArgumentList( TemplateArgs.getFlatArgumentList(), - TemplateArgs.flat_size()); + TemplateArgs.flat_size(), + Policy); Names.push_back(Spec->getIdentifier()->getName() + TemplateArgsStr); } else if (const NamedDecl *ND = dyn_cast<NamedDecl>(Ctx)) Names.push_back(ND->getNameAsString()); diff --git a/lib/AST/NestedNameSpecifier.cpp b/lib/AST/NestedNameSpecifier.cpp index c94a4da7b6..09522a2086 100644 --- a/lib/AST/NestedNameSpecifier.cpp +++ b/lib/AST/NestedNameSpecifier.cpp @@ -14,6 +14,7 @@ #include "clang/AST/NestedNameSpecifier.h" #include "clang/AST/ASTContext.h" #include "clang/AST/Decl.h" +#include "clang/AST/PrettyPrinter.h" #include "clang/AST/Type.h" #include "llvm/Support/raw_ostream.h" #include <cassert> @@ -104,9 +105,11 @@ bool NestedNameSpecifier::isDependent() const { /// \brief Print this nested name specifier to the given output /// stream. -void NestedNameSpecifier::print(llvm::raw_ostream &OS) const { +void +NestedNameSpecifier::print(llvm::raw_ostream &OS, + const PrintingPolicy &Policy) const { if (getPrefix()) - getPrefix()->print(OS); + getPrefix()->print(OS, Policy); switch (getKind()) { case Identifier: @@ -134,10 +137,9 @@ void NestedNameSpecifier::print(llvm::raw_ostream &OS) const { if (const QualifiedNameType *QualT = dyn_cast<QualifiedNameType>(T)) T = QualT->getNamedType().getTypePtr(); - if (const TagType *TagT = dyn_cast<TagType>(T)) - TagT->getAsStringInternal(TypeStr, true); - else - T->getAsStringInternal(TypeStr); + PrintingPolicy InnerPolicy(Policy); + InnerPolicy.SuppressTagKind = true; + T->getAsStringInternal(TypeStr, InnerPolicy); OS << TypeStr; break; } @@ -152,5 +154,7 @@ void NestedNameSpecifier::Destroy(ASTContext &Context) { } void NestedNameSpecifier::dump() { - print(llvm::errs()); + PrintingPolicy Policy; + Policy.CPlusPlus = true; + print(llvm::errs(), Policy); } diff --git a/lib/AST/StmtDumper.cpp b/lib/AST/StmtDumper.cpp index 821eb55c72..b24e912582 100644 --- a/lib/AST/StmtDumper.cpp +++ b/lib/AST/StmtDumper.cpp @@ -15,6 +15,7 @@ #include "clang/AST/StmtVisitor.h" #include "clang/AST/DeclObjC.h" #include "clang/AST/DeclCXX.h" +#include "clang/AST/PrettyPrinter.h" #include "clang/Basic/SourceManager.h" #include "llvm/Support/Compiler.h" #include <cstdio> @@ -39,6 +40,8 @@ namespace { /// out so that we can print out deltas from then on out. const char *LastLocFilename; unsigned LastLocLine; + + PrintingPolicy Policy; public: StmtDumper(SourceManager *sm, FILE *f, unsigned maxDepth) : SM(sm), F(f), IndentLevel(0-1), MaxDepth(maxDepth) { @@ -223,7 +226,7 @@ void StmtDumper::DumpDeclarator(Decl *D) { } std::string Name = VD->getNameAsString(); - VD->getType().getAsStringInternal(Name); + VD->getType().getAsStringInternal(Name, Policy); fprintf(F, "%s", Name.c_str()); // If this is a vardecl with an initializer, emit it. diff --git a/lib/AST/StmtPrinter.cpp b/lib/AST/StmtPrinter.cpp index 80aa2d1d8f..e6a2bad7a5 100644 --- a/lib/AST/StmtPrinter.cpp +++ b/lib/AST/StmtPrinter.cpp @@ -29,14 +29,20 @@ namespace { class VISIBILITY_HIDDEN StmtPrinter : public StmtVisitor<StmtPrinter> { llvm::raw_ostream &OS; unsigned IndentLevel; - bool NoIndent; clang::PrinterHelper* Helper; + PrintingPolicy Policy; + public: - StmtPrinter(llvm::raw_ostream &os, PrinterHelper* helper, unsigned I=0, - bool noIndent=false) : - OS(os), IndentLevel(I), NoIndent(noIndent), Helper(helper) {} + StmtPrinter(llvm::raw_ostream &os, PrinterHelper* helper, + const PrintingPolicy &Policy = PrintingPolicy(), + unsigned Indentation = 0) + : OS(os), IndentLevel(Indentation), Helper(helper), Policy(Policy) {} - void PrintStmt(Stmt *S, int SubIndent = 1) { + void PrintStmt(Stmt *S) { + PrintStmt(S, Policy.Indentation); + } + + void PrintStmt(Stmt *S, int SubIndent) { IndentLevel += SubIndent; if (S && isa<Expr>(S)) { // If this is an expr used in a stmt context, indent and newline it. @@ -66,10 +72,8 @@ namespace { } llvm::raw_ostream &Indent(int Delta = 0) { - if (!NoIndent) { - for (int i = 0, e = IndentLevel+Delta; i < e; ++i) - OS << " "; - } else NoIndent = false; + for (int i = 0, e = IndentLevel+Delta; i < e; ++i) + OS << " "; return OS; } @@ -123,7 +127,7 @@ void StmtPrinter::PrintRawDecl(Decl *D) { } std::string Name = VD->getNameAsString(); - VD->getType().getAsStringInternal(Name); + VD->getType().getAsStringInternal(Name, Policy); OS << Name; // If this is a vardecl with an initializer, emit it. @@ -531,12 +535,12 @@ void StmtPrinter::VisitDeclRefExpr(DeclRefExpr *Node) { void StmtPrinter::VisitQualifiedDeclRefExpr(QualifiedDeclRefExpr *Node) { NamedDecl *D = Node->getDecl(); - Node->getQualifier()->print(OS); + Node->getQualifier()->print(OS, Policy); OS << D->getNameAsString(); } void StmtPrinter::VisitUnresolvedDeclRefExpr(UnresolvedDeclRefExpr *Node) { - Node->getQualifier()->print(OS); + Node->getQualifier()->print(OS, Policy); OS << Node->getDeclName().getAsString(); } @@ -1065,11 +1069,11 @@ void StmtPrinter::VisitCXXNewExpr(CXXNewExpr *E) { std::string TypeS; if (Expr *Size = E->getArraySize()) { llvm::raw_string_ostream s(TypeS); - Size->printPretty(s); + Size->printPretty(s, Helper, Policy); s.flush(); TypeS = "[" + TypeS + "]"; } - E->getAllocatedType().getAsStringInternal(TypeS); + E->getAllocatedType().getAsStringInternal(TypeS, Policy); OS << TypeS; if (E->isParenTypeId()) OS << ")"; @@ -1221,7 +1225,7 @@ void StmtPrinter::VisitBlockExpr(BlockExpr *Node) { E = BD->param_end(); AI != E; ++AI) { if (AI != BD->param_begin()) OS << ", "; ParamStr = (*AI)->getNameAsString(); - (*AI)->getType().getAsStringInternal(ParamStr); + (*AI)->getType().getAsStringInternal(ParamStr, Policy); OS << ParamStr; } @@ -1242,17 +1246,18 @@ void StmtPrinter::VisitBlockDeclRefExpr(BlockDeclRefExpr *Node) { //===----------------------------------------------------------------------===// void Stmt::dumpPretty() const { - printPretty(llvm::errs()); + printPretty(llvm::errs(), 0, PrintingPolicy()); } void Stmt::printPretty(llvm::raw_ostream &OS, PrinterHelper* Helper, - unsigned I, bool NoIndent) const { + const PrintingPolicy &Policy, + unsigned Indentation) const { if (this == 0) { OS << "<NULL>"; return; } - StmtPrinter P(OS, Helper, I, NoIndent); + StmtPrinter P(OS, Helper, Policy, Indentation); P.Visit(const_cast<Stmt*>(this)); } diff --git a/lib/AST/TemplateName.cpp b/lib/AST/TemplateName.cpp index c437e7b929..3613da77b3 100644 --- a/lib/AST/TemplateName.cpp +++ b/lib/AST/TemplateName.cpp @@ -14,6 +14,7 @@ #include "clang/AST/TemplateName.h" #include "clang/AST/DeclTemplate.h" #include "clang/AST/NestedNameSpecifier.h" +#include "clang/AST/PrettyPrinter.h" #include "llvm/Support/raw_ostream.h" using namespace clang; @@ -38,23 +39,27 @@ bool TemplateName::isDependent() const { return true; } -void TemplateName::print(llvm::raw_ostream &OS, bool SuppressNNS) const { +void +TemplateName::print(llvm::raw_ostream &OS, const PrintingPolicy &Policy, + bool SuppressNNS) const { if (TemplateDecl *Template = Storage.dyn_cast<TemplateDecl *>()) OS << Template->getIdentifier()->getName(); else if (QualifiedTemplateName *QTN = getAsQualifiedTemplateName()) { if (!SuppressNNS) - QTN->getQualifier()->print(OS); + QTN->getQualifier()->print(OS, Policy); if (QTN->hasTemplateKeyword()) OS << "template "; OS << QTN->getTemplateDecl()->getIdentifier()->getName(); } else if (DependentTemplateName *DTN = getAsDependentTemplateName()) { if (!SuppressNNS) - DTN->getQualifier()->print(OS); + DTN->getQualifier()->print(OS, Policy); OS << "template "; OS << DTN->getName()->getName(); } } void TemplateName::dump() const { - print(llvm::errs()); + PrintingPolicy Policy; + Policy.CPlusPlus = true; + print(llvm::errs(), Policy); } diff --git a/lib/AST/Type.cpp b/lib/AST/Type.cpp index c04e8275ef..64433cd89b 100644 --- a/lib/AST/Type.cpp +++ b/lib/AST/Type.cpp @@ -17,6 +17,7 @@ #include "clang/AST/DeclObjC.h" #include "clang/AST/DeclTemplate.h" #include "clang/AST/Expr.h" +#include "clang/AST/PrettyPrinter.h" #include "llvm/ADT/StringExtras.h" #include "llvm/Support/raw_ostream.h" using namespace clang; @@ -895,11 +896,11 @@ bool Type::isNullPtrType() const { return false; } -const char *BuiltinType::getName() const { +const char *BuiltinType::getName(bool CPlusPlus) const { switch (getKind()) { default: assert(0 && "Unknown builtin type!"); case Void: return "void"; - case Bool: return "_Bool"; + case Bool: return CPlusPlus? "bool" : "_Bool"; case Char_S: return "char"; case Char_U: return "char"; case SChar: return "signed char"; @@ -1099,8 +1100,9 @@ TemplateSpecializationType::Profile(llvm::FoldingSetNodeID &ID, //===----------------------------------------------------------------------===// void QualType::dump(const char *msg) const { + PrintingPolicy Policy; std::string R = "identifier"; - getAsStringInternal(R); + getAsStringInternal(R, Policy); if (msg) fprintf(stderr, "%s: %s\n", msg, R.c_str()); else @@ -1112,7 +1114,7 @@ void QualType::dump() const { void Type::dump() const { std::string S = "identifier"; - getAsStringInternal(S); + getAsStringInternal(S, PrintingPolicy()); fprintf(stderr, "%s\n", S.c_str()); } @@ -1129,7 +1131,15 @@ static void AppendTypeQualList(std::string &S, unsigned TypeQuals) { S += (NonePrinted+" restrict"), NonePrinted = false; } -void QualType::getAsStringInternal(std::string &S) const { +std::string QualType::getAsString() const { + std::string S; + getAsStringInternal(S, PrintingPolicy()); + return S; +} + +void +QualType::getAsStringInternal(std::string &S, + const PrintingPolicy &Policy) const { if (isNull()) { S += "NULL TYPE"; return; @@ -1145,20 +1155,21 @@ void QualType::getAsStringInternal(std::string &S) const { S = TQS; } - getTypePtr()->getAsStringInternal(S); + getTypePtr()->getAsStringInternal(S, Policy); } -void BuiltinType::getAsStringInternal(std::string &S) const { +void BuiltinType::getAsStringInternal(std::string &S, + const PrintingPolicy &Policy) const { if (S.empty()) { - S = getName(); + S = getName(Policy.CPlusPlus); } else { // Prefix the basic type, e.g. 'int X'. S = ' ' + S; - S = getName() + S; + S = getName(Policy.CPlusPlus) + S; } } -void FixedWidthIntType::getAsStringInternal(std::string &S) const { +void FixedWidthIntType::getAsStringInternal(std::string &S, const PrintingPolicy &Policy) const { // FIXME: Once we get bitwidth attribute, write as // "int __attribute__((bitwidth(x)))". std::string prefix = "__clang_fixedwidth"; @@ -1173,12 +1184,12 @@ void FixedWidthIntType::getAsStringInternal(std::string &S) const { } -void ComplexType::getAsStringInternal(std::string &S) const { - ElementType->getAsStringInternal(S); +void ComplexType::getAsStringInternal(std::string &S, const PrintingPolicy &Policy) const { + ElementType->getAsStringInternal(S, Policy); S = "_Complex " + S; } -void ExtQualType::getAsStringInternal(std::string &S) const { +void ExtQualType::getAsStringInternal(std::string &S, const PrintingPolicy &Policy) const { bool NeedsSpace = false; if (AddressSpace) { S = "__attribute__((address_space("+llvm::utostr_32(AddressSpace)+")))" + S; @@ -1194,10 +1205,10 @@ void ExtQualType::getAsStringInternal(std::string &S) const { S += "strong"; S += ")))"; } - BaseType->getAsStringInternal(S); + BaseType->getAsStringInternal(S, Policy); } -void PointerType::getAsStringInternal(std::string &S) const { +void PointerType::getAsStringInternal(std::string &S, const PrintingPolicy &Policy) const { S = '*' + S; // Handle things like 'int (*A)[4];' correctly. @@ -1205,15 +1216,15 @@ void PointerType::getAsStringInternal(std::string &S) const { if (isa<ArrayType>(getPointeeType())) S = '(' + S + ')'; - getPointeeType().getAsStringInternal(S); + getPointeeType().getAsStringInternal(S, Policy); } -void BlockPointerType::getAsStringInternal(std::string &S) const { +void BlockPointerType::getAsStringInternal(std::string &S, const PrintingPolicy &Policy) const { S = '^' + S; - PointeeType.getAsStringInternal(S); + PointeeType.getAsStringInternal(S, Policy); } -void LValueReferenceType::getAsStringInternal(std::string &S) const { +void LValueReferenceType::getAsStringInternal(std::string &S, const PrintingPolicy &Policy) const { S = '&' + S; // Handle things like 'int (&A)[4];' correctly. @@ -1221,10 +1232,10 @@ void LValueReferenceType::getAsStringInternal(std::string &S) const { if (isa<ArrayType>(getPointeeType())) S = '(' + S + ')'; - getPointeeType().getAsStringInternal(S); + getPointeeType().getAsStringInternal(S, Policy); } -void RValueReferenceType::getAsStringInternal(std::string &S) const { +void RValueReferenceType::getAsStringInternal(std::string &S, const PrintingPolicy &Policy) const { S = "&&" + S; // Handle things like 'int (&&A)[4];' correctly. @@ -1232,12 +1243,12 @@ void RValueReferenceType::getAsStringInternal(std::string &S) const { if (isa<ArrayType>(getPointeeType())) S = '(' + S + ')'; - getPointeeType().getAsStringInternal(S); + getPointeeType().getAsStringInternal(S, Policy); } -void MemberPointerType::getAsStringInternal(std::string &S) const { +void MemberPointerType::getAsStringInternal(std::string &S, const PrintingPolicy &Policy) const { std::string C; - Class->getAsStringInternal(C); + Class->getAsStringInternal(C, Policy); C += "::*"; S = C + S; @@ -1246,24 +1257,24 @@ void MemberPointerType::getAsStringInternal(std::string &S) const { if (isa<ArrayType>(getPointeeType())) S = '(' + S + ')'; - getPointeeType().getAsStringInternal(S); + getPointeeType().getAsStringInternal(S, Policy); } -void ConstantArrayType::getAsStringInternal(std::string &S) const { +void ConstantArrayType::getAsStringInternal(std::string &S, const PrintingPolicy &Policy) const { S += '['; S += llvm::utostr(getSize().getZExtValue()); S += ']'; - getElementType().getAsStringInternal(S); + getElementType().getAsStringInternal(S, Policy); } -void IncompleteArrayType::getAsStringInternal(std::string &S) const { +void IncompleteArrayType::getAsStringInternal(std::string &S, const PrintingPolicy &Policy) const { S += "[]"; - getElementType().getAsStringInternal(S); + getElementType().getAsStringInternal(S, Policy); } -void VariableArrayType::getAsStringInternal(std::string &S) const { +void VariableArrayType::getAsStringInternal(std::string &S, const PrintingPolicy &Policy) const { S += '['; if (getIndexTypeQualifier()) { @@ -1279,15 +1290,15 @@ void VariableArrayType::getAsStringInternal(std::string &S) const { if (getSizeExpr()) { std::string SStr; llvm::raw_string_ostream s(SStr); - getSizeExpr()->printPretty(s); + getSizeExpr()->printPretty(s, 0, Policy); S += s.str(); } S += ']'; - getElementType().getAsStringInternal(S); + getElementType().getAsStringInternal(S, Policy); } -void DependentSizedArrayType::getAsStringInternal(std::string &S) const { +void DependentSizedArrayType::getAsStringInternal(std::string &S, const PrintingPolicy &Policy) const { S += '['; if (getIndexTypeQualifier()) { @@ -1303,57 +1314,57 @@ void DependentSizedArrayType::getAsStringInternal(std::string &S) const { if (getSizeExpr()) { std::string SStr; llvm::raw_string_ostream s(SStr); - getSizeExpr()->printPretty(s); + getSizeExpr()->printPretty(s, 0, Policy); S += s.str(); } S += ']'; - getElementType().getAsStringInternal(S); + getElementType().getAsStringInternal(S, Policy); } -void VectorType::getAsStringInternal(std::string &S) const { +void VectorType::getAsStringInternal(std::string &S, const PrintingPolicy &Policy) const { // FIXME: We prefer to print the size directly here, but have no way // to get the size of the type. S += " __attribute__((__vector_size__("; S += llvm::utostr_32(NumElements); // convert back to bytes. S += " * sizeof(" + ElementType.getAsString() + "))))"; - ElementType.getAsStringInternal(S); + ElementType.getAsStringInternal(S, Policy); } -void ExtVectorType::getAsStringInternal(std::string &S) const { +void ExtVectorType::getAsStringInternal(std::string &S, const PrintingPolicy &Policy) const { S += " __attribute__((ext_vector_type("; S += llvm::utostr_32(NumElements); S += ")))"; - ElementType.getAsStringInternal(S); + ElementType.getAsStringInternal(S, Policy); } -void TypeOfExprType::getAsStringInternal(std::string &InnerString) const { +void TypeOfExprType::getAsStringInternal(std::string &InnerString, const PrintingPolicy &Policy) const { if (!InnerString.empty()) // Prefix the basic type, e.g. 'typeof(e) X'. InnerString = ' ' + InnerString; std::string Str; llvm::raw_string_ostream s(Str); - getUnderlyingExpr()->printPretty(s); + getUnderlyingExpr()->printPretty(s, 0, Policy); InnerString = "typeof " + s.str() + InnerString; } -void TypeOfType::getAsStringInternal(std::string &InnerString) const { +void TypeOfType::getAsStringInternal(std::string &InnerString, const PrintingPolicy &Policy) const { if (!InnerString.empty()) // Prefix the basic type, e.g. 'typeof(t) X'. InnerString = ' ' + InnerString; std::string Tmp; - getUnderlyingType().getAsStringInternal(Tmp); + getUnderlyingType().getAsStringInternal(Tmp, Policy); InnerString = "typeof(" + Tmp + ")" + InnerString; } -void FunctionNoProtoType::getAsStringInternal(std::string &S) const { +void FunctionNoProtoType::getAsStringInternal(std::string &S, const PrintingPolicy &Policy) const { // If needed for precedence reasons, wrap the inner part in grouping parens. if (!S.empty()) S = "(" + S + ")"; S += "()"; - getResultType().getAsStringInternal(S); + getResultType().getAsStringInternal(S, Policy); } -void FunctionProtoType::getAsStringInternal(std::string &S) const { +void FunctionProtoType::getAsStringInternal(std::string &S, const PrintingPolicy &Policy) const { // If needed for precedence reasons, wrap the inner part in grouping parens. if (!S.empty()) S = "(" + S + ")"; @@ -1362,7 +1373,7 @@ void FunctionProtoType::getAsStringInternal(std::string &S) const { std::string Tmp; for (unsigned i = 0, e = getNumArgs(); i != e; ++i) { if (i) S += ", "; - getArgType(i).getAsStringInternal(Tmp); + getArgType(i).getAsStringInternal(Tmp, Policy); S += Tmp; Tmp.clear(); } @@ -1377,17 +1388,17 @@ void FunctionProtoType::getAsStringInternal(std::string &S) const { } S += ")"; - getResultType().getAsStringInternal(S); + getResultType().getAsStringInternal(S, Policy); } -void TypedefType::getAsStringInternal(std::string &InnerString) const { +void TypedefType::getAsStringInternal(std::string &InnerString, const PrintingPolicy &Policy) const { if (!InnerString.empty()) // Prefix the basic type, e.g. 'typedefname X'. InnerString = ' ' + InnerString; InnerString = getDecl()->getIdentifier()->getName() + InnerString; } -void TemplateTypeParmType::getAsStringInternal(std::string &InnerString) const { +void TemplateTypeParmType::getAsStringInternal(std::string &InnerString, const PrintingPolicy &Policy) const { if (!InnerString.empty()) // Prefix the basic type, e.g. 'parmname X'. InnerString = ' ' + InnerString; @@ -1398,9 +1409,11 @@ void TemplateTypeParmType::getAsStringInternal(std::string &InnerString) const { InnerString = Name->getName() + InnerString; } -std::string TemplateSpecializationType::PrintTemplateArgumentList( - const TemplateArgument *Args, - unsigned NumArgs) { +std::string +TemplateSpecializationType::PrintTemplateArgumentList( + const TemplateArgument *Args, + unsigned NumArgs, + const PrintingPolicy &Policy) { std::string SpecString; SpecString += '<'; for (unsigned Arg = 0; Arg < NumArgs; ++Arg) { @@ -1411,7 +1424,7 @@ std::string TemplateSpecializationType::PrintTemplateArgumentList( std::string ArgString; switch (Args[Arg].getKind()) { case TemplateArgument::Type: - Args[Arg].getAsType().getAsStringInternal(ArgString); + Args[Arg].getAsType().getAsStringInternal(ArgString, Policy); break; case TemplateArgument::Declaration: @@ -1424,7 +1437,7 @@ std::string TemplateSpecializationType::PrintTemplateArgumentList( case TemplateArgument::Expression: { llvm::raw_string_ostream s(ArgString); - Args[Arg].getAsExpr()->printPretty(s); + Args[Arg].getAsExpr()->printPretty(s, 0, Policy); break; } } @@ -1451,35 +1464,33 @@ std::string TemplateSpecializationType::PrintTemplateArgumentList( void TemplateSpecializationType:: -getAsStringInternal(std::string &InnerString) const { +getAsStringInternal(std::string &InnerString, const PrintingPolicy &Policy) const { std::string SpecString; { llvm::raw_string_ostream OS(SpecString); - Template.print(OS); + Template.print(OS, Policy); } - SpecString += PrintTemplateArgumentList(getArgs(), getNumArgs()); + SpecString += PrintTemplateArgumentList(getArgs(), getNumArgs(), Policy); if (InnerString.empty()) InnerString.swap(SpecString); else InnerString = SpecString + ' ' + InnerString; } -void QualifiedNameType::getAsStringInternal(std::string &InnerString) const { +void QualifiedNameType::getAsStringInternal(std::string &InnerString, const PrintingPolicy &Policy) const { std::string MyString; { llvm::raw_string_ostream OS(MyString); - NNS->print(OS); + NNS->print(OS, Policy); } std::string TypeStr; - if (const TagType *TagT = dyn_cast<TagType>(NamedType.getTypePtr())) { - // Suppress printing of 'enum', 'struct', 'union', or 'class'. - TagT->getAsStringInternal(TypeStr, true); - } else - NamedType.getAsStringInternal(TypeStr); + PrintingPolicy InnerPolicy(Policy); + InnerPolicy.SuppressTagKind = true; + NamedType.getAsStringInternal(TypeStr, InnerPolicy); MyString += TypeStr; if (InnerString.empty()) @@ -1488,20 +1499,22 @@ void QualifiedNameType::getAsStringInternal(std::string &InnerString) const { InnerString = MyString + ' ' + InnerString; } -void TypenameType::getAsStringInternal(std::string &InnerString) const { +void TypenameType::getAsStringInternal(std::string &InnerString, const PrintingPolicy &Policy) const { std::string MyString; { llvm::raw_string_ostream OS(MyString); OS << "typename "; - NNS->print(OS); + NNS->print(OS, Policy); if (const IdentifierInfo *Ident = getIdentifier()) OS << Ident->getName(); else if (const TemplateSpecializationType *Spec = getTemplateId()) { - Spec->getTemplateName().print(OS, true); + Spec->getTemplateName().print(OS, Policy, true); OS << TemplateSpecializationType::PrintTemplateArgumentList( - Spec->getArgs(), Spec->getNumArgs()); + Spec->getArgs(), + Spec->getNumArgs(), + Policy); } } @@ -1511,14 +1524,15 @@ void TypenameType::getAsStringInternal(std::string &InnerString) const { InnerString = MyString + ' ' + InnerString; } -void ObjCInterfaceType::getAsStringInternal(std::string &InnerString) const { +void ObjCInterfaceType::getAsStringInternal(std::string &InnerString, const PrintingPolicy &Policy) const { if (!InnerString.empty()) // Prefix the basic type, e.g. 'typedefname X'. InnerString = ' ' + InnerString; InnerString = getDecl()->getIdentifier()->getName() + InnerString; } -void ObjCQualifiedInterfaceType::getAsStringInternal( - std::string &InnerString) const { +void +ObjCQualifiedInterfaceType::getAsStringInternal(std::string &InnerString, + const PrintingPolicy &Policy) const { if (!InnerString.empty()) // Prefix the basic type, e.g. 'typedefname X'. InnerString = ' ' + InnerString; std::string ObjCQIString = getDecl()->getNameAsString(); @@ -1535,7 +1549,7 @@ void ObjCQualifiedInterfaceType::getAsStringInternal( InnerString = ObjCQIString + InnerString; } -void ObjCQualifiedIdType::getAsStringInternal(std::string &InnerString) const { +void ObjCQualifiedIdType::getAsStringInternal(std::string &InnerString, const PrintingPolicy &Policy) const { if (!InnerString.empty()) // Prefix the basic type, e.g. 'typedefname X'. InnerString = ' ' + InnerString; std::string ObjCQIString = "id"; @@ -1549,16 +1563,11 @@ void ObjCQualifiedIdType::getAsStringInternal(std::string &InnerString) const { InnerString = ObjCQIString + InnerString; } -void TagType::getAsStringInternal(std::string &InnerString) const { - getAsStringInternal(InnerString, false); -} - -void TagType::getAsStringInternal(std::string &InnerString, - bool SuppressTagKind) const { +void TagType::getAsStringInternal(std::string &InnerString, const PrintingPolicy &Policy) const { if (!InnerString.empty()) // Prefix the basic type, e.g. 'typedefname X'. InnerString = ' ' + InnerString; - const char *Kind = SuppressTagKind? 0 : getDecl()->getKindName(); + const char *Kind = Policy.SuppressTagKind? 0 : getDecl()->getKindName(); const char *ID; if (const IdentifierInfo *II = getDecl()->getIdentifier()) ID = II->getName(); @@ -1577,7 +1586,8 @@ void TagType::getAsStringInternal(std::string &InnerString, std::string TemplateArgsStr = TemplateSpecializationType::PrintTemplateArgumentList( TemplateArgs.getFlatArgumentList(), - TemplateArgs.flat_size()); + TemplateArgs.flat_size(), + |