void TemplateArgument::print(const PrintingPolicy &Policy, raw_ostream &Out) const { switch (getKind()) { case Null: Out << "<no value>"; break; case Type: { PrintingPolicy SubPolicy(Policy); SubPolicy.SuppressStrongLifetime = true; std::string TypeStr; getAsType().getAsStringInternal(TypeStr, SubPolicy); Out << TypeStr; break; } case Declaration: { if (NamedDecl *ND = dyn_cast_or_null<NamedDecl>(getAsDecl())) { if (ND->getDeclName()) { Out << *ND; } else { Out << "<anonymous>"; } } else { Out << "nullptr"; } break; } case Template: getAsTemplate().print(Out, Policy); break; case TemplateExpansion: getAsTemplateOrTemplatePattern().print(Out, Policy); Out << "..."; break; case Integral: { printIntegral(*this, Out); break; } case Expression: getAsExpr()->printPretty(Out, 0, Policy); break; case Pack: Out << "<"; bool First = true; for (TemplateArgument::pack_iterator P = pack_begin(), PEnd = pack_end(); P != PEnd; ++P) { if (First) First = false; else Out << ", "; P->print(Policy, Out); } Out << ">"; break; } }
void TemplateArgument::print(const PrintingPolicy &Policy, raw_ostream &Out) const { switch (getKind()) { case Null: Out << "<no value>"; break; case Type: { PrintingPolicy SubPolicy(Policy); SubPolicy.SuppressStrongLifetime = true; getAsType().print(Out, SubPolicy); break; } case Declaration: { NamedDecl *ND = cast<NamedDecl>(getAsDecl()); Out << '&'; if (ND->getDeclName()) { // FIXME: distinguish between pointer and reference args? ND->printQualifiedName(Out); } else { Out << "<anonymous>"; } break; } case NullPtr: Out << "nullptr"; break; case Template: getAsTemplate().print(Out, Policy); break; case TemplateExpansion: getAsTemplateOrTemplatePattern().print(Out, Policy); Out << "..."; break; case Integral: { printIntegral(*this, Out); break; } case Expression: getAsExpr()->printPretty(Out, 0, Policy); break; case Pack: Out << "<"; bool First = true; for (TemplateArgument::pack_iterator P = pack_begin(), PEnd = pack_end(); P != PEnd; ++P) { if (First) First = false; else Out << ", "; P->print(Policy, Out); } Out << ">"; break; } }
void TemplateArgument::print(const PrintingPolicy &Policy, llvm::raw_ostream &Out) const { switch (getKind()) { case Null: Out << "<no value>"; break; case Type: { std::string TypeStr; getAsType().getAsStringInternal(TypeStr, Policy); Out << TypeStr; break; } case Declaration: { bool Unnamed = true; if (NamedDecl *ND = dyn_cast_or_null<NamedDecl>(getAsDecl())) { if (ND->getDeclName()) { Unnamed = false; Out << ND->getNameAsString(); } } if (Unnamed) { Out << "<anonymous>"; } break; } case Template: getAsTemplate().print(Out, Policy); break; case TemplateExpansion: getAsTemplateOrTemplatePattern().print(Out, Policy); Out << "..."; break; case Integral: { Out << getAsIntegral()->toString(10); break; } case Expression: getAsExpr()->printPretty(Out, 0, Policy); break; case Pack: Out << "<"; bool First = true; for (TemplateArgument::pack_iterator P = pack_begin(), PEnd = pack_end(); P != PEnd; ++P) { if (First) First = false; else Out << ", "; P->print(Policy, Out); } Out << ">"; break; } }