From: Aaron Ballman Date: Fri, 7 Mar 2014 15:12:56 +0000 (+0000) Subject: [C++11] Replacing FunctionDecl iterators param_begin() and param_end() with iterator_... X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=126b7b996cc7254f5b0c2872734a7d17ebebfacd;p=clang [C++11] Replacing FunctionDecl 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@203248 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/clang/AST/Decl.h b/include/clang/AST/Decl.h index c2ebcaf4ac..a1e31854cb 100644 --- a/include/clang/AST/Decl.h +++ b/include/clang/AST/Decl.h @@ -1843,12 +1843,20 @@ public: unsigned param_size() const { return getNumParams(); } typedef ParmVarDecl **param_iterator; typedef ParmVarDecl * const *param_const_iterator; + typedef llvm::iterator_range param_range; + typedef llvm::iterator_range param_const_range; - param_iterator param_begin() { return ParamInfo; } - param_iterator param_end() { return ParamInfo+param_size(); } + param_iterator param_begin() { return params().begin(); } + param_iterator param_end() { return params().end(); } + param_range params() { + return param_range(ParamInfo, ParamInfo + param_size()); + } - param_const_iterator param_begin() const { return ParamInfo; } - param_const_iterator param_end() const { return ParamInfo+param_size(); } + param_const_iterator param_begin() const { return params().begin(); } + param_const_iterator param_end() const { return params().end(); } + param_const_range params() const { + return param_const_range(ParamInfo, ParamInfo + param_size()); + } /// getNumParams - Return the number of parameters this function must have /// based on its FunctionType. This is the length of the ParamInfo array diff --git a/lib/AST/ASTContext.cpp b/lib/AST/ASTContext.cpp index d94fa4ba36..8df2eaec96 100644 --- a/lib/AST/ASTContext.cpp +++ b/lib/AST/ASTContext.cpp @@ -4850,9 +4850,8 @@ bool ASTContext::getObjCEncodingForFunctionDecl(const FunctionDecl *Decl, getObjCEncodingForType(Decl->getReturnType(), S); CharUnits ParmOffset; // Compute size of all parameters. - for (FunctionDecl::param_const_iterator PI = Decl->param_begin(), - E = Decl->param_end(); PI != E; ++PI) { - QualType PType = (*PI)->getType(); + for (auto PI : Decl->params()) { + QualType PType = PI->getType(); CharUnits sz = getObjCEncodingTypeSize(PType); if (sz.isZero()) continue; @@ -4865,9 +4864,7 @@ bool ASTContext::getObjCEncodingForFunctionDecl(const FunctionDecl *Decl, ParmOffset = CharUnits::Zero(); // Argument types. - for (FunctionDecl::param_const_iterator PI = Decl->param_begin(), - E = Decl->param_end(); PI != E; ++PI) { - ParmVarDecl *PVDecl = *PI; + for (auto PVDecl : Decl->params()) { QualType PType = PVDecl->getOriginalType(); if (const ArrayType *AT = dyn_cast(PType->getCanonicalTypeInternal())) { diff --git a/lib/AST/ASTImporter.cpp b/lib/AST/ASTImporter.cpp index cb5939cd3d..17ab418792 100644 --- a/lib/AST/ASTImporter.cpp +++ b/lib/AST/ASTImporter.cpp @@ -2743,9 +2743,8 @@ Decl *ASTNodeImporter::VisitFunctionDecl(FunctionDecl *D) { // Import the function parameters. SmallVector Parameters; - for (FunctionDecl::param_iterator P = D->param_begin(), PEnd = D->param_end(); - P != PEnd; ++P) { - ParmVarDecl *ToP = cast_or_null(Importer.Import(*P)); + for (auto P : D->params()) { + ParmVarDecl *ToP = cast_or_null(Importer.Import(P)); if (!ToP) return 0; diff --git a/lib/Analysis/Consumed.cpp b/lib/Analysis/Consumed.cpp index cb6f31f0bf..63c5c8645a 100644 --- a/lib/Analysis/Consumed.cpp +++ b/lib/Analysis/Consumed.cpp @@ -1388,9 +1388,8 @@ void ConsumedAnalyzer::run(AnalysisDeclContext &AC) { ConsumedStmtVisitor Visitor(AC, *this, CurrStates); // Add all trackable parameters to the state map. - for (FunctionDecl::param_const_iterator PI = D->param_begin(), - PE = D->param_end(); PI != PE; ++PI) { - Visitor.VisitParmVarDecl(*PI); + for (auto PI : D->params()) { + Visitor.VisitParmVarDecl(PI); } // Visit all of the function's basic blocks. diff --git a/lib/CodeGen/CGClass.cpp b/lib/CodeGen/CGClass.cpp index 4c48afe075..7add3c2a1a 100644 --- a/lib/CodeGen/CGClass.cpp +++ b/lib/CodeGen/CGClass.cpp @@ -2195,11 +2195,9 @@ void CodeGenFunction::EmitLambdaDelegatingInvokeBody(const CXXMethodDecl *MD) { CallArgs.add(RValue::get(ThisPtr), ThisType); // Add the rest of the parameters. - for (FunctionDecl::param_const_iterator I = MD->param_begin(), - E = MD->param_end(); I != E; ++I) { - ParmVarDecl *param = *I; - EmitDelegateCallArg(CallArgs, param, param->getLocStart()); - } + for (auto Param : MD->params()) + EmitDelegateCallArg(CallArgs, Param, Param->getLocStart()); + const CXXMethodDecl *CallOp = Lambda->getLambdaCallOperator(); // For a generic lambda, find the corresponding call operator specialization // to which the call to the static-invoker shall be forwarded. diff --git a/lib/Frontend/ASTConsumers.cpp b/lib/Frontend/ASTConsumers.cpp index 1ef4c18681..44a84f70e8 100644 --- a/lib/Frontend/ASTConsumers.cpp +++ b/lib/Frontend/ASTConsumers.cpp @@ -259,13 +259,12 @@ void DeclContextPrinter::PrintDeclContext(const DeclContext* DC, // Print the parameters. Out << "("; bool PrintComma = false; - for (FunctionDecl::param_const_iterator I = FD->param_begin(), - E = FD->param_end(); I != E; ++I) { + for (auto I : FD->params()) { if (PrintComma) Out << ", "; else PrintComma = true; - Out << **I; + Out << *I; } Out << ")"; break; diff --git a/lib/Index/USRGeneration.cpp b/lib/Index/USRGeneration.cpp index 6d73ceefcb..c6dbabb519 100644 --- a/lib/Index/USRGeneration.cpp +++ b/lib/Index/USRGeneration.cpp @@ -205,12 +205,9 @@ void USRGenerator::VisitFunctionDecl(const FunctionDecl *D) { } // Mangle in type information for the arguments. - for (FunctionDecl::param_const_iterator I = D->param_begin(), - E = D->param_end(); - I != E; ++I) { + for (auto PD : D->params()) { Out << '#'; - if (ParmVarDecl *PD = *I) - VisitType(PD->getType()); + VisitType(PD->getType()); } if (D->isVariadic()) Out << '.'; diff --git a/lib/Sema/SemaDecl.cpp b/lib/Sema/SemaDecl.cpp index 9840d1eca1..925515ab5c 100644 --- a/lib/Sema/SemaDecl.cpp +++ b/lib/Sema/SemaDecl.cpp @@ -7326,11 +7326,8 @@ Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC, } llvm::SmallPtrSet ValidTypes; - for (FunctionDecl::param_iterator PI = NewFD->param_begin(), - PE = NewFD->param_end(); PI != PE; ++PI) { - ParmVarDecl *Param = *PI; + for (auto Param : NewFD->params()) checkIsValidOpenCLKernelParameter(*this, D, Param, ValidTypes); - } } MarkUnusedFileScopedDecl(NewFD); @@ -9599,8 +9596,7 @@ Decl *Sema::ActOnStartOfFunctionDef(Scope *FnBodyScope, Decl *D) { /*CheckParameterNames=*/true); // Introduce our parameters into the function scope - for (unsigned p = 0, NumParams = FD->getNumParams(); p < NumParams; ++p) { - ParmVarDecl *Param = FD->getParamDecl(p); + for (auto Param : FD->params()) { Param->setOwningFunction(FD); // If this has an identifier, add it to the scope stack. diff --git a/lib/Sema/SemaDeclCXX.cpp b/lib/Sema/SemaDeclCXX.cpp index 2d35d5cda7..4257b52ee6 100644 --- a/lib/Sema/SemaDeclCXX.cpp +++ b/lib/Sema/SemaDeclCXX.cpp @@ -10810,10 +10810,8 @@ bool Sema::CheckOverloadedOperatorDeclaration(FunctionDecl *FnDecl) { diag::err_operator_overload_static) << FnDecl->getDeclName(); } else { bool ClassOrEnumParam = false; - for (FunctionDecl::param_iterator Param = FnDecl->param_begin(), - ParamEnd = FnDecl->param_end(); - Param != ParamEnd; ++Param) { - QualType ParamType = (*Param)->getType().getNonReferenceType(); + for (auto Param : FnDecl->params()) { + QualType ParamType = Param->getType().getNonReferenceType(); if (ParamType->isDependentType() || ParamType->isRecordType() || ParamType->isEnumeralType()) { ClassOrEnumParam = true; @@ -10834,12 +10832,11 @@ bool Sema::CheckOverloadedOperatorDeclaration(FunctionDecl *FnDecl) { // Only the function-call operator allows default arguments // (C++ [over.call]p1). if (Op != OO_Call) { - for (FunctionDecl::param_iterator Param = FnDecl->param_begin(); - Param != FnDecl->param_end(); ++Param) { - if ((*Param)->hasDefaultArg()) - return Diag((*Param)->getLocation(), + for (auto Param : FnDecl->params()) { + if (Param->hasDefaultArg()) + return Diag(Param->getLocation(), diag::err_operator_overload_default_arg) - << FnDecl->getDeclName() << (*Param)->getDefaultArgRange(); + << FnDecl->getDeclName() << Param->getDefaultArgRange(); } } @@ -11042,13 +11039,11 @@ FinishedParams: // A parameter-declaration-clause containing a default argument is not // equivalent to any of the permitted forms. - for (FunctionDecl::param_iterator Param = FnDecl->param_begin(), - ParamEnd = FnDecl->param_end(); - Param != ParamEnd; ++Param) { - if ((*Param)->hasDefaultArg()) { - Diag((*Param)->getDefaultArgRange().getBegin(), + for (auto Param : FnDecl->params()) { + if (Param->hasDefaultArg()) { + Diag(Param->getDefaultArgRange().getBegin(), diag::err_literal_operator_default_argument) - << (*Param)->getDefaultArgRange(); + << Param->getDefaultArgRange(); break; } } diff --git a/lib/Sema/SemaTemplate.cpp b/lib/Sema/SemaTemplate.cpp index f930e02b9c..94627aa865 100644 --- a/lib/Sema/SemaTemplate.cpp +++ b/lib/Sema/SemaTemplate.cpp @@ -6284,10 +6284,8 @@ static void StripImplicitInstantiation(NamedDecl *D) { if (FunctionDecl *FD = dyn_cast(D)) { FD->setInlineSpecified(false); - for (FunctionDecl::param_iterator I = FD->param_begin(), - E = FD->param_end(); - I != E; ++I) - (*I)->dropAttrs(); + for (auto I : FD->params()) + I->dropAttrs(); } } diff --git a/lib/Sema/SemaTemplateDeduction.cpp b/lib/Sema/SemaTemplateDeduction.cpp index 75324c617e..ef325b04ed 100644 --- a/lib/Sema/SemaTemplateDeduction.cpp +++ b/lib/Sema/SemaTemplateDeduction.cpp @@ -2507,11 +2507,8 @@ Sema::SubstituteExplicitTemplateArguments( if (ExplicitTemplateArgs.size() == 0) { // No arguments to substitute; just copy over the parameter types and // fill in the function type. - for (FunctionDecl::param_iterator P = Function->param_begin(), - PEnd = Function->param_end(); - P != PEnd; - ++P) - ParamTypes.push_back((*P)->getType()); + for (auto P : Function->params()) + ParamTypes.push_back(P->getType()); if (FunctionType) *FunctionType = Function->getType(); diff --git a/lib/Serialization/ASTWriterDecl.cpp b/lib/Serialization/ASTWriterDecl.cpp index 5d5e4bb428..46ec3933bf 100644 --- a/lib/Serialization/ASTWriterDecl.cpp +++ b/lib/Serialization/ASTWriterDecl.cpp @@ -414,9 +414,8 @@ void ASTDeclWriter::VisitFunctionDecl(FunctionDecl *D) { } Record.push_back(D->param_size()); - for (FunctionDecl::param_iterator P = D->param_begin(), PEnd = D->param_end(); - P != PEnd; ++P) - Writer.AddDeclRef(*P, Record); + for (auto P : D->params()) + Writer.AddDeclRef(P, Record); Code = serialization::DECL_FUNCTION; } diff --git a/lib/StaticAnalyzer/Checkers/NSErrorChecker.cpp b/lib/StaticAnalyzer/Checkers/NSErrorChecker.cpp index 4f7f011e37..97109b7afd 100644 --- a/lib/StaticAnalyzer/Checkers/NSErrorChecker.cpp +++ b/lib/StaticAnalyzer/Checkers/NSErrorChecker.cpp @@ -109,9 +109,8 @@ void CFErrorFunctionChecker::checkASTDecl(const FunctionDecl *D, II = &D->getASTContext().Idents.get("CFErrorRef"); bool hasCFError = false; - for (FunctionDecl::param_const_iterator - I = D->param_begin(), E = D->param_end(); I != E; ++I) { - if (IsCFError((*I)->getType(), II)) { + for (auto I : D->params()) { + if (IsCFError(I->getType(), II)) { hasCFError = true; break; } diff --git a/tools/libclang/IndexDecl.cpp b/tools/libclang/IndexDecl.cpp index 643aad4209..72e38f575c 100644 --- a/tools/libclang/IndexDecl.cpp +++ b/tools/libclang/IndexDecl.cpp @@ -41,10 +41,8 @@ public: if (const ParmVarDecl *Parm = dyn_cast(D)) { IndexCtx.handleVar(Parm); } else if (const FunctionDecl *FD = dyn_cast(D)) { - for (FunctionDecl::param_const_iterator PI = FD->param_begin(), - PE = FD->param_end(); - PI != PE; ++PI) { - IndexCtx.handleVar(*PI); + for (auto PI : FD->params()) { + IndexCtx.handleVar(PI); } } }