diff options
author | Douglas Gregor <dgregor@apple.com> | 2011-09-27 22:38:19 +0000 |
---|---|---|
committer | Douglas Gregor <dgregor@apple.com> | 2011-09-27 22:38:19 +0000 |
commit | 30c42404202d2e2512e51efc6066bd614cfdb5a4 (patch) | |
tree | 5ac5699fb4d6d06231673b2e9a4887e4870684fb /lib/AST | |
parent | 3240fe3b715327c8fda6f5a3bc8a092b1fce82a7 (diff) |
When 'bool' is not a built-in type but is defined as a macro, print
'bool' rather than '_Bool' within types, to make things a bit more
readable. Fixes <rdar://problem/10063263>.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@140650 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/AST')
-rw-r--r-- | lib/AST/ASTContext.cpp | 12 | ||||
-rw-r--r-- | lib/AST/ASTDiagnostic.cpp | 16 | ||||
-rw-r--r-- | lib/AST/DeclPrinter.cpp | 4 | ||||
-rw-r--r-- | lib/AST/Type.cpp | 4 | ||||
-rw-r--r-- | lib/AST/TypePrinter.cpp | 4 |
5 files changed, 23 insertions, 17 deletions
diff --git a/lib/AST/ASTContext.cpp b/lib/AST/ASTContext.cpp index fa0ebc8a86..9a9c95aa2d 100644 --- a/lib/AST/ASTContext.cpp +++ b/lib/AST/ASTContext.cpp @@ -231,11 +231,11 @@ ASTContext::ASTContext(LangOptions& LOpts, SourceManager &SM, BlockDescriptorExtendedType(0), cudaConfigureCallDecl(0), NullTypeSourceInfo(QualType()), SourceMgr(SM), LangOpts(LOpts), - AddrSpaceMap(0), Target(t), + AddrSpaceMap(0), Target(t), PrintingPolicy(LOpts), Idents(idents), Selectors(sels), BuiltinInfo(builtins), DeclarationNames(*this), - ExternalSource(0), Listener(0), PrintingPolicy(LOpts), + ExternalSource(0), Listener(0), LastSDM(0, 0), UniqueBlockByRefTypeID(0) { @@ -4385,7 +4385,7 @@ void ASTContext::getObjCEncodingForTypeImpl(QualType T, std::string& S, = TemplateSpecializationType::PrintTemplateArgumentList( TemplateArgs.data(), TemplateArgs.size(), - (*this).PrintingPolicy); + (*this).getPrintingPolicy()); S += TemplateArgsStr; } @@ -6475,6 +6475,12 @@ MangleContext *ASTContext::createMangleContext() { CXXABI::~CXXABI() {} +PrintingPolicy ASTContext::getPrintingPolicy() const { + PrintingPolicy.Bool + = LangOpts.Bool || Idents.get("bool").hasMacroDefinition(); + return PrintingPolicy; +} + size_t ASTContext::getSideTableAllocatedMemory() const { return ASTRecordLayouts.getMemorySize() + llvm::capacity_in_bytes(ObjCLayouts) diff --git a/lib/AST/ASTDiagnostic.cpp b/lib/AST/ASTDiagnostic.cpp index 4c115d116b..07820dc3cc 100644 --- a/lib/AST/ASTDiagnostic.cpp +++ b/lib/AST/ASTDiagnostic.cpp @@ -158,8 +158,8 @@ ConvertTypeToDiagnosticString(ASTContext &Context, QualType Ty, // FIXME: Playing with std::string is really slow. bool ForceAKA = false; QualType CanTy = Ty.getCanonicalType(); - std::string S = Ty.getAsString(Context.PrintingPolicy); - std::string CanS = CanTy.getAsString(Context.PrintingPolicy); + std::string S = Ty.getAsString(Context.getPrintingPolicy()); + std::string CanS = CanTy.getAsString(Context.getPrintingPolicy()); for (SmallVectorImpl<intptr_t>::iterator I = QualTypeVals.begin(), E = QualTypeVals.end(); I != E; ++I) { @@ -170,10 +170,10 @@ ConvertTypeToDiagnosticString(ASTContext &Context, QualType Ty, QualType CompareCanTy = CompareTy.getCanonicalType(); if (CompareCanTy == CanTy) continue; // Same canonical types - std::string CompareS = CompareTy.getAsString(Context.PrintingPolicy); + std::string CompareS = CompareTy.getAsString(Context.getPrintingPolicy()); if (CompareS != S) continue; // Original strings are different - std::string CompareCanS = CompareCanTy.getAsString(Context.PrintingPolicy); + std::string CompareCanS = CompareCanTy.getAsString(Context.getPrintingPolicy()); if (CompareCanS == CanS) continue; // No new info from canonical type @@ -205,7 +205,7 @@ ConvertTypeToDiagnosticString(ASTContext &Context, QualType Ty, if (DesugaredTy == Ty) { DesugaredTy = Ty.getCanonicalType(); } - std::string akaStr = DesugaredTy.getAsString(Context.PrintingPolicy); + std::string akaStr = DesugaredTy.getAsString(Context.getPrintingPolicy()); if (akaStr != S) { S = "'" + S + "' (aka '" + akaStr + "')"; return S; @@ -270,13 +270,13 @@ void clang::FormatASTNodeDiagnosticArgument( Qualified = false; } const NamedDecl *ND = reinterpret_cast<const NamedDecl*>(Val); - ND->getNameForDiagnostic(S, Context.PrintingPolicy, Qualified); + ND->getNameForDiagnostic(S, Context.getPrintingPolicy(), Qualified); break; } case DiagnosticsEngine::ak_nestednamespec: { llvm::raw_string_ostream OS(S); reinterpret_cast<NestedNameSpecifier*>(Val)->print(OS, - Context.PrintingPolicy); + Context.getPrintingPolicy()); NeedQuotes = false; break; } @@ -305,7 +305,7 @@ void clang::FormatASTNodeDiagnosticArgument( S += "function "; S += "'"; - ND->getNameForDiagnostic(S, Context.PrintingPolicy, true); + ND->getNameForDiagnostic(S, Context.getPrintingPolicy(), true); S += "'"; } NeedQuotes = false; diff --git a/lib/AST/DeclPrinter.cpp b/lib/AST/DeclPrinter.cpp index 8d8ec2f7d2..7c61bae9ad 100644 --- a/lib/AST/DeclPrinter.cpp +++ b/lib/AST/DeclPrinter.cpp @@ -90,7 +90,7 @@ namespace { void Decl::print(raw_ostream &Out, unsigned Indentation, bool PrintInstantiation) const { - print(Out, getASTContext().PrintingPolicy, Indentation, PrintInstantiation); + print(Out, getASTContext().getPrintingPolicy(), Indentation, PrintInstantiation); } void Decl::print(raw_ostream &Out, const PrintingPolicy &Policy, @@ -168,7 +168,7 @@ void DeclContext::dumpDeclContext() const { DC = DC->getParent(); ASTContext &Ctx = cast<TranslationUnitDecl>(DC)->getASTContext(); - DeclPrinter Printer(llvm::errs(), Ctx, Ctx.PrintingPolicy, 0); + DeclPrinter Printer(llvm::errs(), Ctx, Ctx.getPrintingPolicy(), 0); Printer.VisitDeclContext(const_cast<DeclContext *>(this), /*Indent=*/false); } diff --git a/lib/AST/Type.cpp b/lib/AST/Type.cpp index ca58ec05ac..7f28f7c801 100644 --- a/lib/AST/Type.cpp +++ b/lib/AST/Type.cpp @@ -1467,10 +1467,10 @@ const char *Type::getTypeClassName() const { return 0; } -const char *BuiltinType::getName(const LangOptions &LO) const { +const char *BuiltinType::getName(const PrintingPolicy &Policy) const { switch (getKind()) { case Void: return "void"; - case Bool: return LO.Bool ? "bool" : "_Bool"; + case Bool: return Policy.Bool ? "bool" : "_Bool"; case Char_S: return "char"; case Char_U: return "char"; case SChar: return "signed char"; diff --git a/lib/AST/TypePrinter.cpp b/lib/AST/TypePrinter.cpp index b89d2aa316..855cc02d9e 100644 --- a/lib/AST/TypePrinter.cpp +++ b/lib/AST/TypePrinter.cpp @@ -205,11 +205,11 @@ void TypePrinter::print(const Type *T, Qualifiers Quals, std::string &buffer) { void TypePrinter::printBuiltin(const BuiltinType *T, std::string &S) { if (S.empty()) { - S = T->getName(Policy.LangOpts); + S = T->getName(Policy); } else { // Prefix the basic type, e.g. 'int X'. S = ' ' + S; - S = T->getName(Policy.LangOpts) + S; + S = T->getName(Policy) + S; } } |