From: Aaron Ballman Date: Thu, 13 Mar 2014 21:09:43 +0000 (+0000) Subject: [C++11] Replacing ObjCInterfaceDecl iterators ivar_begin() and ivar_end() with iterat... X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=6b4e664ff04b235b1bba18e224c95c1fad86e979;p=clang [C++11] Replacing ObjCInterfaceDecl iterators ivar_begin() and ivar_end() with iterator_range ivars(). Updating all of the usages of the iterators with range-based for loops. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@203849 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/clang/AST/DeclObjC.h b/include/clang/AST/DeclObjC.h index 22977cbd47..374b44c857 100644 --- a/include/clang/AST/DeclObjC.h +++ b/include/clang/AST/DeclObjC.h @@ -910,7 +910,9 @@ public: } typedef specific_decl_iterator ivar_iterator; + typedef llvm::iterator_range> ivar_range; + ivar_range ivars() const { return ivar_range(ivar_begin(), ivar_end()); } ivar_iterator ivar_begin() const { if (const ObjCInterfaceDecl *Def = getDefinition()) return ivar_iterator(Def->decls_begin()); diff --git a/lib/AST/ASTContext.cpp b/lib/AST/ASTContext.cpp index 7d48365f1b..cded2e106d 100644 --- a/lib/AST/ASTContext.cpp +++ b/lib/AST/ASTContext.cpp @@ -1795,9 +1795,8 @@ void ASTContext::DeepCollectObjCIvars(const ObjCInterfaceDecl *OI, if (const ObjCInterfaceDecl *SuperClass = OI->getSuperClass()) DeepCollectObjCIvars(SuperClass, false, Ivars); if (!leafClass) { - for (ObjCInterfaceDecl::ivar_iterator I = OI->ivar_begin(), - E = OI->ivar_end(); I != E; ++I) - Ivars.push_back(*I); + for (const auto *I : OI->ivars()) + Ivars.push_back(I); } else { ObjCInterfaceDecl *IDecl = const_cast(OI); for (const ObjCIvarDecl *Iv = IDecl->all_declared_ivar_begin(); Iv; diff --git a/lib/AST/DeclPrinter.cpp b/lib/AST/DeclPrinter.cpp index bdece950cb..9989432312 100644 --- a/lib/AST/DeclPrinter.cpp +++ b/lib/AST/DeclPrinter.cpp @@ -1000,10 +1000,10 @@ void DeclPrinter::VisitObjCInterfaceDecl(ObjCInterfaceDecl *OID) { Out << "{\n"; eolnOut = true; Indentation += Policy.Indentation; - for (ObjCInterfaceDecl::ivar_iterator I = OID->ivar_begin(), - E = OID->ivar_end(); I != E; ++I) { - Indent() << I->getASTContext().getUnqualifiedObjCPointerType(I->getType()). - getAsString(Policy) << ' ' << **I << ";\n"; + for (const auto *I : OID->ivars()) { + Indent() << I->getASTContext() + .getUnqualifiedObjCPointerType(I->getType()) + .getAsString(Policy) << ' ' << *I << ";\n"; } Indentation -= Policy.Indentation; Out << "}\n"; diff --git a/lib/Sema/SemaDeclObjC.cpp b/lib/Sema/SemaDeclObjC.cpp index eabd98d7b7..d337a32959 100644 --- a/lib/Sema/SemaDeclObjC.cpp +++ b/lib/Sema/SemaDeclObjC.cpp @@ -2520,9 +2520,7 @@ Sema::SelectorsForTypoCorrection(Selector Sel, /// class's \@implementation is seen. void Sema::DiagnoseDuplicateIvars(ObjCInterfaceDecl *ID, ObjCInterfaceDecl *SID) { - for (ObjCInterfaceDecl::ivar_iterator IVI = ID->ivar_begin(), - IVE = ID->ivar_end(); IVI != IVE; ++IVI) { - ObjCIvarDecl* Ivar = *IVI; + for (auto *Ivar : ID->ivars()) { if (Ivar->isInvalidDecl()) continue; if (IdentifierInfo *II = Ivar->getIdentifier()) { diff --git a/lib/StaticAnalyzer/Checkers/CheckObjCDealloc.cpp b/lib/StaticAnalyzer/Checkers/CheckObjCDealloc.cpp index b5333cab29..d05dd68237 100644 --- a/lib/StaticAnalyzer/Checkers/CheckObjCDealloc.cpp +++ b/lib/StaticAnalyzer/Checkers/CheckObjCDealloc.cpp @@ -113,15 +113,12 @@ static void checkObjCDealloc(const CheckerBase *Checker, bool containsPointerIvar = false; - for (ObjCInterfaceDecl::ivar_iterator I=ID->ivar_begin(), E=ID->ivar_end(); - I!=E; ++I) { - - ObjCIvarDecl *ID = *I; - QualType T = ID->getType(); + for (const auto *Ivar : ID->ivars()) { + QualType T = Ivar->getType(); if (!T->isObjCObjectPointerType() || - ID->hasAttr() || // Skip IBOutlets. - ID->hasAttr()) // Skip IBOutletCollections. + Ivar->hasAttr() || // Skip IBOutlets. + Ivar->hasAttr()) // Skip IBOutletCollections. continue; containsPointerIvar = true; diff --git a/lib/StaticAnalyzer/Checkers/ObjCUnusedIVarsChecker.cpp b/lib/StaticAnalyzer/Checkers/ObjCUnusedIVarsChecker.cpp index 86c544d603..ebd2ed47b1 100644 --- a/lib/StaticAnalyzer/Checkers/ObjCUnusedIVarsChecker.cpp +++ b/lib/StaticAnalyzer/Checkers/ObjCUnusedIVarsChecker.cpp @@ -116,23 +116,19 @@ static void checkObjCUnusedIvar(const ObjCImplementationDecl *D, IvarUsageMap M; // Iterate over the ivars. - for (ObjCInterfaceDecl::ivar_iterator I=ID->ivar_begin(), - E=ID->ivar_end(); I!=E; ++I) { - - const ObjCIvarDecl *ID = *I; - + for (const auto *Ivar : ID->ivars()) { // Ignore ivars that... // (a) aren't private // (b) explicitly marked unused // (c) are iboutlets // (d) are unnamed bitfields - if (ID->getAccessControl() != ObjCIvarDecl::Private || - ID->hasAttr() || ID->hasAttr() || - ID->hasAttr() || - ID->isUnnamedBitfield()) + if (Ivar->getAccessControl() != ObjCIvarDecl::Private || + Ivar->hasAttr() || Ivar->hasAttr() || + Ivar->hasAttr() || + Ivar->isUnnamedBitfield()) continue; - M[ID] = Unused; + M[Ivar] = Unused; } if (M.empty())