From 2a89e8526a297a3ddb2a4e56045060f26cb0f71c Mon Sep 17 00:00:00 2001 From: Aaron Ballman Date: Tue, 15 Jul 2014 21:32:31 +0000 Subject: [PATCH] Added the pack_elements range accessor. Refactoring some for loops to use range-based for loops instead. No functional changes intended. llvm-svn: 213095 --- clang/include/clang/AST/TemplateBase.h | 7 +++++++ clang/lib/AST/ASTContext.cpp | 8 +++----- clang/lib/AST/ItaniumMangle.cpp | 6 ++---- clang/lib/AST/StmtPrinter.cpp | 5 ++--- clang/lib/AST/StmtProfile.cpp | 5 ++--- clang/lib/AST/TemplateBase.cpp | 21 ++++++++------------- clang/lib/AST/Type.cpp | 6 ++---- clang/lib/Index/USRGeneration.cpp | 5 ++--- clang/lib/Sema/SemaLookup.cpp | 6 ++---- clang/lib/Sema/SemaTemplateDeduction.cpp | 12 ++++-------- clang/lib/Serialization/ASTWriter.cpp | 5 ++--- 11 files changed, 36 insertions(+), 50 deletions(-) diff --git a/clang/include/clang/AST/TemplateBase.h b/clang/include/clang/AST/TemplateBase.h index 9e4a577..1026a78 100644 --- a/clang/include/clang/AST/TemplateBase.h +++ b/clang/include/clang/AST/TemplateBase.h @@ -18,6 +18,7 @@ #include "clang/AST/TemplateName.h" #include "clang/AST/Type.h" #include "llvm/ADT/APSInt.h" +#include "llvm/ADT/iterator_range.h" #include "llvm/ADT/SmallVector.h" #include "llvm/Support/Compiler.h" #include "llvm/Support/ErrorHandling.h" @@ -327,6 +328,12 @@ public: return Args.Args + Args.NumArgs; } + /// \brief Iterator range referencing all of the elements of a template + /// argument pack. + llvm::iterator_range pack_elements() const { + return llvm::make_range(pack_begin(), pack_end()); + } + /// \brief The number of template arguments in the given template argument /// pack. unsigned pack_size() const { diff --git a/clang/lib/AST/ASTContext.cpp b/clang/lib/AST/ASTContext.cpp index a1a9438..5c271f0 100644 --- a/clang/lib/AST/ASTContext.cpp +++ b/clang/lib/AST/ASTContext.cpp @@ -3060,11 +3060,9 @@ QualType ASTContext::getSubstTemplateTypeParmPackType( const TemplateTypeParmType *Parm, const TemplateArgument &ArgPack) { #ifndef NDEBUG - for (TemplateArgument::pack_iterator P = ArgPack.pack_begin(), - PEnd = ArgPack.pack_end(); - P != PEnd; ++P) { - assert(P->getKind() == TemplateArgument::Type &&"Pack contains a non-type"); - assert(P->getAsType().isCanonical() && "Pack contains non-canonical type"); + for (const auto &P : ArgPack.pack_elements()) { + assert(P.getKind() == TemplateArgument::Type &&"Pack contains a non-type"); + assert(P.getAsType().isCanonical() && "Pack contains non-canonical type"); } #endif diff --git a/clang/lib/AST/ItaniumMangle.cpp b/clang/lib/AST/ItaniumMangle.cpp index 1cb6ab5..977d6fc 100644 --- a/clang/lib/AST/ItaniumMangle.cpp +++ b/clang/lib/AST/ItaniumMangle.cpp @@ -3396,10 +3396,8 @@ void CXXNameMangler::mangleTemplateArg(TemplateArgument A) { case TemplateArgument::Pack: { // ::= J * E Out << 'J'; - for (TemplateArgument::pack_iterator PA = A.pack_begin(), - PAEnd = A.pack_end(); - PA != PAEnd; ++PA) - mangleTemplateArg(*PA); + for (const auto &P : A.pack_elements()) + mangleTemplateArg(P); Out << 'E'; } } diff --git a/clang/lib/AST/StmtPrinter.cpp b/clang/lib/AST/StmtPrinter.cpp index 0351571..bb211aa 100644 --- a/clang/lib/AST/StmtPrinter.cpp +++ b/clang/lib/AST/StmtPrinter.cpp @@ -1541,9 +1541,8 @@ void StmtPrinter::VisitUserDefinedLiteral(UserDefinedLiteral *Node) { cast(DRE->getDecl())->getTemplateSpecializationArgs(); assert(Args); const TemplateArgument &Pack = Args->get(0); - for (TemplateArgument::pack_iterator I = Pack.pack_begin(), - E = Pack.pack_end(); I != E; ++I) { - char C = (char)I->getAsIntegral().getZExtValue(); + for (const auto &P : Pack.pack_elements()) { + char C = (char)P.getAsIntegral().getZExtValue(); OS << C; } break; diff --git a/clang/lib/AST/StmtProfile.cpp b/clang/lib/AST/StmtProfile.cpp index a364f68..f5be846 100644 --- a/clang/lib/AST/StmtProfile.cpp +++ b/clang/lib/AST/StmtProfile.cpp @@ -1351,9 +1351,8 @@ void StmtProfiler::VisitTemplateArgument(const TemplateArgument &Arg) { break; case TemplateArgument::Pack: - const TemplateArgument *Pack = Arg.pack_begin(); - for (unsigned i = 0, e = Arg.pack_size(); i != e; ++i) - VisitTemplateArgument(Pack[i]); + for (const auto &P : Arg.pack_elements()) + VisitTemplateArgument(P); break; } } diff --git a/clang/lib/AST/TemplateBase.cpp b/clang/lib/AST/TemplateBase.cpp index d7ae73c..ac6a754 100644 --- a/clang/lib/AST/TemplateBase.cpp +++ b/clang/lib/AST/TemplateBase.cpp @@ -114,11 +114,9 @@ bool TemplateArgument::isDependent() const { return (getAsExpr()->isTypeDependent() || getAsExpr()->isValueDependent()); case Pack: - for (pack_iterator P = pack_begin(), PEnd = pack_end(); P != PEnd; ++P) { - if (P->isDependent()) + for (const auto &P : pack_elements()) + if (P.isDependent()) return true; - } - return false; } @@ -155,11 +153,9 @@ bool TemplateArgument::isInstantiationDependent() const { return getAsExpr()->isInstantiationDependent(); case Pack: - for (pack_iterator P = pack_begin(), PEnd = pack_end(); P != PEnd; ++P) { - if (P->isInstantiationDependent()) + for (const auto &P : pack_elements()) + if (P.isInstantiationDependent()) return true; - } - return false; } @@ -214,8 +210,8 @@ bool TemplateArgument::containsUnexpandedParameterPack() const { break; case Pack: - for (pack_iterator P = pack_begin(), PEnd = pack_end(); P != PEnd; ++P) - if (P->containsUnexpandedParameterPack()) + for (const auto &P : pack_elements()) + if (P.containsUnexpandedParameterPack()) return true; break; @@ -392,14 +388,13 @@ void TemplateArgument::print(const PrintingPolicy &Policy, case Pack: Out << "<"; bool First = true; - for (TemplateArgument::pack_iterator P = pack_begin(), PEnd = pack_end(); - P != PEnd; ++P) { + for (const auto &P : pack_elements()) { if (First) First = false; else Out << ", "; - P->print(Policy, Out); + P.print(Policy, Out); } Out << ">"; break; diff --git a/clang/lib/AST/Type.cpp b/clang/lib/AST/Type.cpp index c2d4674..1677874 100644 --- a/clang/lib/AST/Type.cpp +++ b/clang/lib/AST/Type.cpp @@ -1950,10 +1950,8 @@ void SubstTemplateTypeParmPackType::Profile(llvm::FoldingSetNodeID &ID, const TemplateArgument &ArgPack) { ID.AddPointer(Replaced); ID.AddInteger(ArgPack.pack_size()); - for (TemplateArgument::pack_iterator P = ArgPack.pack_begin(), - PEnd = ArgPack.pack_end(); - P != PEnd; ++P) - ID.AddPointer(P->getAsType().getAsOpaquePtr()); + for (const auto &P : ArgPack.pack_elements()) + ID.AddPointer(P.getAsType().getAsOpaquePtr()); } bool TemplateSpecializationType:: diff --git a/clang/lib/Index/USRGeneration.cpp b/clang/lib/Index/USRGeneration.cpp index c7740be..e08b85e 100644 --- a/clang/lib/Index/USRGeneration.cpp +++ b/clang/lib/Index/USRGeneration.cpp @@ -747,9 +747,8 @@ void USRGenerator::VisitTemplateArgument(const TemplateArgument &Arg) { case TemplateArgument::Pack: Out << 'p' << Arg.pack_size(); - for (TemplateArgument::pack_iterator P = Arg.pack_begin(), PEnd = Arg.pack_end(); - P != PEnd; ++P) - VisitTemplateArgument(*P); + for (const auto &P : Arg.pack_elements()) + VisitTemplateArgument(P); break; case TemplateArgument::Type: diff --git a/clang/lib/Sema/SemaLookup.cpp b/clang/lib/Sema/SemaLookup.cpp index adb4cbf..be3cfd9 100644 --- a/clang/lib/Sema/SemaLookup.cpp +++ b/clang/lib/Sema/SemaLookup.cpp @@ -1990,10 +1990,8 @@ addAssociatedClassesAndNamespaces(AssociatedLookup &Result, break; case TemplateArgument::Pack: - for (TemplateArgument::pack_iterator P = Arg.pack_begin(), - PEnd = Arg.pack_end(); - P != PEnd; ++P) - addAssociatedClassesAndNamespaces(Result, *P); + for (const auto &P : Arg.pack_elements()) + addAssociatedClassesAndNamespaces(Result, P); break; } } diff --git a/clang/lib/Sema/SemaTemplateDeduction.cpp b/clang/lib/Sema/SemaTemplateDeduction.cpp index f941a09..53a75d2 100644 --- a/clang/lib/Sema/SemaTemplateDeduction.cpp +++ b/clang/lib/Sema/SemaTemplateDeduction.cpp @@ -2095,13 +2095,11 @@ ConvertDeducedTemplateArgument(Sema &S, NamedDecl *Param, // This is a template argument pack, so check each of its arguments against // the template parameter. SmallVector PackedArgsBuilder; - for (TemplateArgument::pack_iterator PA = Arg.pack_begin(), - PAEnd = Arg.pack_end(); - PA != PAEnd; ++PA) { + for (const auto &P : Arg.pack_elements()) { // When converting the deduced template argument, append it to the // general output list. We need to do this so that the template argument // checking logic has all of the prior template arguments available. - DeducedTemplateArgument InnerArg(*PA); + DeducedTemplateArgument InnerArg(P); InnerArg.setDeducedFromArrayBound(Arg.wasDeducedFromArrayBound()); if (ConvertDeducedTemplateArgument(S, Param, InnerArg, Template, NTTPType, PackedArgsBuilder.size(), @@ -5037,10 +5035,8 @@ MarkUsedTemplateParameters(ASTContext &Ctx, break; case TemplateArgument::Pack: - for (TemplateArgument::pack_iterator P = TemplateArg.pack_begin(), - PEnd = TemplateArg.pack_end(); - P != PEnd; ++P) - MarkUsedTemplateParameters(Ctx, *P, OnlyDeduced, Depth, Used); + for (const auto &P : TemplateArg.pack_elements()) + MarkUsedTemplateParameters(Ctx, P, OnlyDeduced, Depth, Used); break; } } diff --git a/clang/lib/Serialization/ASTWriter.cpp b/clang/lib/Serialization/ASTWriter.cpp index a02a959..97a5d0e 100644 --- a/clang/lib/Serialization/ASTWriter.cpp +++ b/clang/lib/Serialization/ASTWriter.cpp @@ -5192,9 +5192,8 @@ void ASTWriter::AddTemplateArgument(const TemplateArgument &Arg, break; case TemplateArgument::Pack: Record.push_back(Arg.pack_size()); - for (TemplateArgument::pack_iterator I=Arg.pack_begin(), E=Arg.pack_end(); - I != E; ++I) - AddTemplateArgument(*I, Record); + for (const auto &P : Arg.pack_elements()) + AddTemplateArgument(P, Record); break; } } -- 2.7.4