From ecb8277062c21a62d0a2fc689088eda62d19ddbb Mon Sep 17 00:00:00 2001 From: Aaron Ballman Date: Fri, 7 Mar 2014 17:50:17 +0000 Subject: [PATCH] [C++11] Replacing ObjCMethodDecl iterators param_begin() and param_end() with iterator_range params(). Updating all of the usages of the iterators with range-based for loops. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@203255 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/clang/AST/DeclObjC.h | 19 +++++++++++--- lib/AST/ASTImporter.cpp | 7 ++--- lib/AST/DeclPrinter.cpp | 7 +++-- lib/AST/StmtPrinter.cpp | 8 +++--- lib/CodeGen/CGCall.cpp | 5 ++-- lib/CodeGen/CGDebugInfo.cpp | 5 ++-- lib/CodeGen/CGObjC.cpp | 5 ++-- lib/CodeGen/CGObjCMac.cpp | 8 ++---- lib/Rewrite/Frontend/RewriteModernObjC.cpp | 26 +++++++------------ lib/Rewrite/Frontend/RewriteObjC.cpp | 11 +++----- lib/Sema/SemaCodeComplete.cpp | 16 ++++-------- lib/Sema/SemaDeclObjC.cpp | 8 +++--- lib/Sema/SemaLambda.cpp | 6 ++--- lib/Serialization/ASTWriterDecl.cpp | 5 ++-- .../Checkers/NSErrorChecker.cpp | 5 ++-- tools/libclang/CIndex.cpp | 12 +++------ tools/libclang/IndexDecl.cpp | 6 ++--- 17 files changed, 65 insertions(+), 94 deletions(-) diff --git a/include/clang/AST/DeclObjC.h b/include/clang/AST/DeclObjC.h index 05e309eff2..309bb12609 100644 --- a/include/clang/AST/DeclObjC.h +++ b/include/clang/AST/DeclObjC.h @@ -342,10 +342,21 @@ public: unsigned param_size() const { return NumParams; } typedef const ParmVarDecl *const *param_const_iterator; typedef ParmVarDecl *const *param_iterator; - param_const_iterator param_begin() const { return getParams(); } - param_const_iterator param_end() const { return getParams() + NumParams; } - param_iterator param_begin() { return getParams(); } - param_iterator param_end() { return getParams() + NumParams; } + typedef llvm::iterator_range param_range; + typedef llvm::iterator_range param_const_range; + + param_range params() { + return param_range(getParams(), getParams() + NumParams); + } + param_const_range params() const { + return param_const_range(getParams(), getParams() + NumParams); + } + + param_const_iterator param_begin() const { return params().begin(); } + param_const_iterator param_end() const { return params().end(); } + param_iterator param_begin() { return params().begin(); } + param_iterator param_end() { return params().end(); } + // This method returns and of the parameters which are part of the selector // name mangling requirements. param_const_iterator sel_param_end() const { diff --git a/lib/AST/ASTImporter.cpp b/lib/AST/ASTImporter.cpp index 17ab418792..676228bb08 100644 --- a/lib/AST/ASTImporter.cpp +++ b/lib/AST/ASTImporter.cpp @@ -3300,11 +3300,8 @@ Decl *ASTNodeImporter::VisitObjCMethodDecl(ObjCMethodDecl *D) { // Import the parameters SmallVector ToParams; - for (ObjCMethodDecl::param_iterator FromP = D->param_begin(), - FromPEnd = D->param_end(); - FromP != FromPEnd; - ++FromP) { - ParmVarDecl *ToP = cast_or_null(Importer.Import(*FromP)); + for (auto *FromP : D->params()) { + ParmVarDecl *ToP = cast_or_null(Importer.Import(FromP)); if (!ToP) return 0; diff --git a/lib/AST/DeclPrinter.cpp b/lib/AST/DeclPrinter.cpp index aa292dbfe1..ac75ae245e 100644 --- a/lib/AST/DeclPrinter.cpp +++ b/lib/AST/DeclPrinter.cpp @@ -928,13 +928,12 @@ void DeclPrinter::VisitObjCMethodDecl(ObjCMethodDecl *OMD) { std::string name = OMD->getSelector().getAsString(); std::string::size_type pos, lastPos = 0; - for (ObjCMethodDecl::param_iterator PI = OMD->param_begin(), - E = OMD->param_end(); PI != E; ++PI) { + for (const auto *PI : OMD->params()) { // FIXME: selector is missing here! pos = name.find_first_of(':', lastPos); Out << " " << name.substr(lastPos, pos - lastPos); - Out << ":(" << (*PI)->getASTContext().getUnqualifiedObjCPointerType((*PI)->getType()). - getAsString(Policy) << ')' << **PI; + Out << ":(" << PI->getASTContext().getUnqualifiedObjCPointerType(PI->getType()). + getAsString(Policy) << ')' << *PI; lastPos = pos + 1; } diff --git a/lib/AST/StmtPrinter.cpp b/lib/AST/StmtPrinter.cpp index 748a40160d..a0a73be0a5 100644 --- a/lib/AST/StmtPrinter.cpp +++ b/lib/AST/StmtPrinter.cpp @@ -1529,16 +1529,14 @@ void StmtPrinter::VisitLambdaExpr(LambdaExpr *Node) { OS << " ("; CXXMethodDecl *Method = Node->getCallOperator(); NeedComma = false; - for (CXXMethodDecl::param_iterator P = Method->param_begin(), - PEnd = Method->param_end(); - P != PEnd; ++P) { + for (auto P : Method->params()) { if (NeedComma) { OS << ", "; } else { NeedComma = true; } - std::string ParamStr = (*P)->getNameAsString(); - (*P)->getOriginalType().print(OS, Policy, ParamStr); + std::string ParamStr = P->getNameAsString(); + P->getOriginalType().print(OS, Policy, ParamStr); } if (Method->isVariadic()) { if (NeedComma) diff --git a/lib/CodeGen/CGCall.cpp b/lib/CodeGen/CGCall.cpp index 860c871d29..133a692f4c 100644 --- a/lib/CodeGen/CGCall.cpp +++ b/lib/CodeGen/CGCall.cpp @@ -318,9 +318,8 @@ CodeGenTypes::arrangeObjCMessageSendSignature(const ObjCMethodDecl *MD, argTys.push_back(Context.getCanonicalParamType(receiverType)); argTys.push_back(Context.getCanonicalParamType(Context.getObjCSelType())); // FIXME: Kill copy? - for (ObjCMethodDecl::param_const_iterator i = MD->param_begin(), - e = MD->param_end(); i != e; ++i) { - argTys.push_back(Context.getCanonicalParamType((*i)->getType())); + for (const auto *I : MD->params()) { + argTys.push_back(Context.getCanonicalParamType(I->getType())); } FunctionType::ExtInfo einfo; diff --git a/lib/CodeGen/CGDebugInfo.cpp b/lib/CodeGen/CGDebugInfo.cpp index 6fc06260b6..761876988a 100644 --- a/lib/CodeGen/CGDebugInfo.cpp +++ b/lib/CodeGen/CGDebugInfo.cpp @@ -2472,9 +2472,8 @@ llvm::DICompositeType CGDebugInfo::getOrCreateFunctionType(const Decl *D, llvm::DIType CmdTy = getOrCreateType(OMethod->getCmdDecl()->getType(), F); Elts.push_back(DBuilder.createArtificialType(CmdTy)); // Get rest of the arguments. - for (ObjCMethodDecl::param_const_iterator PI = OMethod->param_begin(), - PE = OMethod->param_end(); PI != PE; ++PI) - Elts.push_back(getOrCreateType((*PI)->getType(), F)); + for (const auto *PI : OMethod->params()) + Elts.push_back(getOrCreateType(PI->getType(), F)); llvm::DIArray EltTypeArray = DBuilder.getOrCreateArray(Elts); return DBuilder.createSubroutineType(F, EltTypeArray); diff --git a/lib/CodeGen/CGObjC.cpp b/lib/CodeGen/CGObjC.cpp index 800d3a97dc..06d15b6af7 100644 --- a/lib/CodeGen/CGObjC.cpp +++ b/lib/CodeGen/CGObjC.cpp @@ -476,9 +476,8 @@ void CodeGenFunction::StartObjCMethod(const ObjCMethodDecl *OMD, args.push_back(OMD->getSelfDecl()); args.push_back(OMD->getCmdDecl()); - for (ObjCMethodDecl::param_const_iterator PI = OMD->param_begin(), - E = OMD->param_end(); PI != E; ++PI) - args.push_back(*PI); + for (const auto *PI : OMD->params()) + args.push_back(PI); CurGD = OMD; diff --git a/lib/CodeGen/CGObjCMac.cpp b/lib/CodeGen/CGObjCMac.cpp index bd7c8bf6e7..257a029af2 100644 --- a/lib/CodeGen/CGObjCMac.cpp +++ b/lib/CodeGen/CGObjCMac.cpp @@ -1911,9 +1911,7 @@ CGObjCCommonMac::EmitMessageSend(CodeGen::CodeGenFunction &CGF, bool requiresnullCheck = false; if (CGM.getLangOpts().ObjCAutoRefCount && Method) - for (ObjCMethodDecl::param_const_iterator i = Method->param_begin(), - e = Method->param_end(); i != e; ++i) { - const ParmVarDecl *ParamDecl = (*i); + for (const auto *ParamDecl : Method->params()) { if (ParamDecl->hasAttr()) { if (!nullReturn.NullBB) nullReturn.init(CGF, Arg0); @@ -6602,9 +6600,7 @@ CGObjCNonFragileABIMac::EmitVTableMessageSend(CodeGenFunction &CGF, bool requiresnullCheck = false; if (CGM.getLangOpts().ObjCAutoRefCount && method) - for (ObjCMethodDecl::param_const_iterator i = method->param_begin(), - e = method->param_end(); i != e; ++i) { - const ParmVarDecl *ParamDecl = (*i); + for (const auto *ParamDecl : method->params()) { if (ParamDecl->hasAttr()) { if (!nullReturn.NullBB) nullReturn.init(CGF, arg0); diff --git a/lib/Rewrite/Frontend/RewriteModernObjC.cpp b/lib/Rewrite/Frontend/RewriteModernObjC.cpp index f26c226158..c9aa44733e 100644 --- a/lib/Rewrite/Frontend/RewriteModernObjC.cpp +++ b/lib/Rewrite/Frontend/RewriteModernObjC.cpp @@ -1337,9 +1337,7 @@ void RewriteModernObjC::RewriteObjCMethodDecl(const ObjCInterfaceDecl *IDecl, ResultStr += " _cmd"; // Method arguments. - for (ObjCMethodDecl::param_iterator PI = OMD->param_begin(), - E = OMD->param_end(); PI != E; ++PI) { - ParmVarDecl *PDecl = *PI; + for (const auto *PDecl : OMD->params()) { ResultStr += ", "; if (PDecl->getType()->isObjCQualifiedIdType()) { ResultStr += "id "; @@ -2733,9 +2731,8 @@ Stmt *RewriteModernObjC::RewriteObjCBoxedExpr(ObjCBoxedExpr *Exp) { SmallVector ArgTypes; ArgTypes.push_back(Context->getObjCIdType()); ArgTypes.push_back(Context->getObjCSelType()); - for (ObjCMethodDecl::param_iterator PI = BoxingMethod->param_begin(), - E = BoxingMethod->param_end(); PI != E; ++PI) - ArgTypes.push_back((*PI)->getType()); + for (const auto PI : BoxingMethod->parameters()) + ArgTypes.push_back(PI->getType()); QualType returnType = Exp->getType(); // Get the type, we will need to reference it in a couple spots. @@ -2863,9 +2860,8 @@ Stmt *RewriteModernObjC::RewriteObjCArrayLiteralExpr(ObjCArrayLiteral *Exp) { SmallVector ArgTypes; ArgTypes.push_back(Context->getObjCIdType()); ArgTypes.push_back(Context->getObjCSelType()); - for (ObjCMethodDecl::param_iterator PI = ArrayMethod->param_begin(), - E = ArrayMethod->param_end(); PI != E; ++PI) - ArgTypes.push_back((*PI)->getType()); + for (const auto *PI : ArrayMethod->params()) + ArgTypes.push_back(PI->getType()); QualType returnType = Exp->getType(); // Get the type, we will need to reference it in a couple spots. @@ -3021,9 +3017,8 @@ Stmt *RewriteModernObjC::RewriteObjCDictionaryLiteralExpr(ObjCDictionaryLiteral SmallVector ArgTypes; ArgTypes.push_back(Context->getObjCIdType()); ArgTypes.push_back(Context->getObjCSelType()); - for (ObjCMethodDecl::param_iterator PI = DictMethod->param_begin(), - E = DictMethod->param_end(); PI != E; ++PI) { - QualType T = (*PI)->getType(); + for (const auto *PI : DictMethod->params()) { + QualType T = PI->getType(); if (const PointerType* PT = T->getAs()) { QualType PointeeTy = PT->getPointeeType(); convertToUnqualifiedObjCType(PointeeTy); @@ -3600,11 +3595,10 @@ Stmt *RewriteModernObjC::SynthMessageExpr(ObjCMessageExpr *Exp, ArgTypes.push_back(Context->getObjCSelType()); if (ObjCMethodDecl *OMD = Exp->getMethodDecl()) { // Push any user argument types. - for (ObjCMethodDecl::param_iterator PI = OMD->param_begin(), - E = OMD->param_end(); PI != E; ++PI) { - QualType t = (*PI)->getType()->isObjCQualifiedIdType() + for (const auto *PI : OMD->params()) { + QualType t = PI->getType()->isObjCQualifiedIdType() ? Context->getObjCIdType() - : (*PI)->getType(); + : PI->getType(); // Make sure we convert "t (^)(...)" to "t (*)(...)". (void)convertBlockPointerToFunctionPointer(t); ArgTypes.push_back(t); diff --git a/lib/Rewrite/Frontend/RewriteObjC.cpp b/lib/Rewrite/Frontend/RewriteObjC.cpp index 036b2c88ae..81752cdd3e 100644 --- a/lib/Rewrite/Frontend/RewriteObjC.cpp +++ b/lib/Rewrite/Frontend/RewriteObjC.cpp @@ -1141,9 +1141,7 @@ void RewriteObjC::RewriteObjCMethodDecl(const ObjCInterfaceDecl *IDecl, ResultStr += " _cmd"; // Method arguments. - for (ObjCMethodDecl::param_iterator PI = OMD->param_begin(), - E = OMD->param_end(); PI != E; ++PI) { - ParmVarDecl *PDecl = *PI; + for (const auto *PDecl : OMD->params()) { ResultStr += ", "; if (PDecl->getType()->isObjCQualifiedIdType()) { ResultStr += "id "; @@ -2975,11 +2973,10 @@ Stmt *RewriteObjC::SynthMessageExpr(ObjCMessageExpr *Exp, ArgTypes.push_back(Context->getObjCSelType()); if (ObjCMethodDecl *OMD = Exp->getMethodDecl()) { // Push any user argument types. - for (ObjCMethodDecl::param_iterator PI = OMD->param_begin(), - E = OMD->param_end(); PI != E; ++PI) { - QualType t = (*PI)->getType()->isObjCQualifiedIdType() + for (const auto *PI : OMD->params()) { + QualType t = PI->getType()->isObjCQualifiedIdType() ? Context->getObjCIdType() - : (*PI)->getType(); + : PI->getType(); // Make sure we convert "t (^)(...)" to "t (*)(...)". (void)convertBlockPointerToFunctionPointer(t); ArgTypes.push_back(t); diff --git a/lib/Sema/SemaCodeComplete.cpp b/lib/Sema/SemaCodeComplete.cpp index 28f85d7a9f..b17031432f 100644 --- a/lib/Sema/SemaCodeComplete.cpp +++ b/lib/Sema/SemaCodeComplete.cpp @@ -3101,13 +3101,9 @@ static void MaybeAddOverrideCalls(Sema &S, DeclContext *InContext, // We need to have names for all of the parameters, if we're going to // generate a forwarding call. - for (CXXMethodDecl::param_iterator P = Method->param_begin(), - PEnd = Method->param_end(); - P != PEnd; - ++P) { - if (!(*P)->getDeclName()) + for (auto P : Method->params()) + if (!P->getDeclName()) return; - } PrintingPolicy Policy = getCompletionPrintingPolicy(S); for (CXXMethodDecl::method_iterator M = Method->begin_overridden_methods(), @@ -3137,16 +3133,14 @@ static void MaybeAddOverrideCalls(Sema &S, DeclContext *InContext, Overridden->getNameAsString())); Builder.AddChunk(CodeCompletionString::CK_LeftParen); bool FirstParam = true; - for (CXXMethodDecl::param_iterator P = Method->param_begin(), - PEnd = Method->param_end(); - P != PEnd; ++P) { + for (auto P : Method->params()) { if (FirstParam) FirstParam = false; else Builder.AddChunk(CodeCompletionString::CK_Comma); - Builder.AddPlaceholderChunk(Results.getAllocator().CopyString( - (*P)->getIdentifier()->getName())); + Builder.AddPlaceholderChunk( + Results.getAllocator().CopyString(P->getIdentifier()->getName())); } Builder.AddChunk(CodeCompletionString::CK_RightParen); Results.AddResult(CodeCompletionResult(Builder.TakeString(), diff --git a/lib/Sema/SemaDeclObjC.cpp b/lib/Sema/SemaDeclObjC.cpp index f71bd56a42..3dc37a9f5a 100644 --- a/lib/Sema/SemaDeclObjC.cpp +++ b/lib/Sema/SemaDeclObjC.cpp @@ -329,17 +329,15 @@ void Sema::ActOnStartOfObjCMethodDef(Scope *FnBodyScope, Decl *D) { /*CheckParameterNames=*/false); // Introduce all of the other parameters into this scope. - for (ObjCMethodDecl::param_iterator PI = MDecl->param_begin(), - E = MDecl->param_end(); PI != E; ++PI) { - ParmVarDecl *Param = (*PI); + for (auto *Param : MDecl->params()) { if (!Param->isInvalidDecl() && getLangOpts().ObjCAutoRefCount && !HasExplicitOwnershipAttr(*this, Param)) Diag(Param->getLocation(), diag::warn_arc_strong_pointer_objc_pointer) << Param->getType(); - if ((*PI)->getIdentifier()) - PushOnScopeChains(*PI, FnBodyScope); + if (Param->getIdentifier()) + PushOnScopeChains(Param, FnBodyScope); } // In ARC, disallow definition of retain/release/autorelease/retainCount diff --git a/lib/Sema/SemaLambda.cpp b/lib/Sema/SemaLambda.cpp index 9b45071687..0dbe8ced18 100644 --- a/lib/Sema/SemaLambda.cpp +++ b/lib/Sema/SemaLambda.cpp @@ -418,10 +418,8 @@ CXXMethodDecl *Sema::startLambdaDefinition(CXXRecordDecl *Class, const_cast(Params.end()), /*CheckParameterNames=*/false); - for (CXXMethodDecl::param_iterator P = Method->param_begin(), - PEnd = Method->param_end(); - P != PEnd; ++P) - (*P)->setOwningFunction(Method); + for (auto P : Method->params()) + P->setOwningFunction(Method); } Decl *ManglingContextDecl; diff --git a/lib/Serialization/ASTWriterDecl.cpp b/lib/Serialization/ASTWriterDecl.cpp index 46ec3933bf..5609b011d3 100644 --- a/lib/Serialization/ASTWriterDecl.cpp +++ b/lib/Serialization/ASTWriterDecl.cpp @@ -454,9 +454,8 @@ void ASTDeclWriter::VisitObjCMethodDecl(ObjCMethodDecl *D) { Writer.AddTypeSourceInfo(D->getReturnTypeSourceInfo(), Record); Writer.AddSourceLocation(D->getLocEnd(), Record); Record.push_back(D->param_size()); - for (ObjCMethodDecl::param_iterator P = D->param_begin(), - PEnd = D->param_end(); P != PEnd; ++P) - Writer.AddDeclRef(*P, Record); + for (const auto *P : D->params()) + Writer.AddDeclRef(P, Record); Record.push_back(D->SelLocsKind); unsigned NumStoredSelLocs = D->getNumStoredSelLocs(); diff --git a/lib/StaticAnalyzer/Checkers/NSErrorChecker.cpp b/lib/StaticAnalyzer/Checkers/NSErrorChecker.cpp index 97109b7afd..5a505fcef8 100644 --- a/lib/StaticAnalyzer/Checkers/NSErrorChecker.cpp +++ b/lib/StaticAnalyzer/Checkers/NSErrorChecker.cpp @@ -61,9 +61,8 @@ void NSErrorMethodChecker::checkASTDecl(const ObjCMethodDecl *D, II = &D->getASTContext().Idents.get("NSError"); bool hasNSError = false; - for (ObjCMethodDecl::param_const_iterator - I = D->param_begin(), E = D->param_end(); I != E; ++I) { - if (IsNSError((*I)->getType(), II)) { + for (const auto *I : D->params()) { + if (IsNSError(I->getType(), II)) { hasNSError = true; break; } diff --git a/tools/libclang/CIndex.cpp b/tools/libclang/CIndex.cpp index 1c24e6b7b2..52a792927e 100644 --- a/tools/libclang/CIndex.cpp +++ b/tools/libclang/CIndex.cpp @@ -916,10 +916,8 @@ bool CursorVisitor::VisitObjCMethodDecl(ObjCMethodDecl *ND) { if (Visit(TSInfo->getTypeLoc())) return true; - for (ObjCMethodDecl::param_iterator P = ND->param_begin(), - PEnd = ND->param_end(); - P != PEnd; ++P) { - if (Visit(MakeCXCursor(*P, TU, RegionOfInterest))) + for (const auto *P : ND->params()) { + if (Visit(MakeCXCursor(P, TU, RegionOfInterest))) return true; } @@ -5361,10 +5359,8 @@ AnnotateTokensWorker::Visit(CXCursor cursor, CXCursor parent) { if (Method->getObjCDeclQualifier()) HasContextSensitiveKeywords = true; else { - for (ObjCMethodDecl::param_const_iterator P = Method->param_begin(), - PEnd = Method->param_end(); - P != PEnd; ++P) { - if ((*P)->getObjCDeclQualifier()) { + for (const auto *P : Method->params()) { + if (P->getObjCDeclQualifier()) { HasContextSensitiveKeywords = true; break; } diff --git a/tools/libclang/IndexDecl.cpp b/tools/libclang/IndexDecl.cpp index 72e38f575c..d39076b974 100644 --- a/tools/libclang/IndexDecl.cpp +++ b/tools/libclang/IndexDecl.cpp @@ -54,10 +54,8 @@ public: return; IndexCtx.indexTypeSourceInfo(D->getReturnTypeSourceInfo(), D); - for (ObjCMethodDecl::param_const_iterator I = D->param_begin(), - E = D->param_end(); - I != E; ++I) - handleDeclarator(*I, D); + for (const auto *I : D->params()) + handleDeclarator(I, D); if (D->isThisDeclarationADefinition()) { const Stmt *Body = D->getBody(); -- 2.40.0