From be6df088d69bca0e99c7845a6cd8c1ca85034f31 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Wed, 12 Dec 2007 07:56:42 +0000 Subject: [PATCH] more cleanups changing things like getInstanceVariables to iterators. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@44930 91177308-0d34-0410-b5e6-96231b3b80d8 --- AST/Decl.cpp | 9 ++++----- Driver/ASTConsumers.cpp | 12 +++++------- Driver/RewriteTest.cpp | 35 ++++++++++++++++++++--------------- include/clang/AST/DeclObjC.h | 6 ++++-- 4 files changed, 33 insertions(+), 29 deletions(-) diff --git a/AST/Decl.cpp b/AST/Decl.cpp index 1e3636c2d5..f986c63014 100644 --- a/AST/Decl.cpp +++ b/AST/Decl.cpp @@ -393,12 +393,11 @@ ObjcIvarDecl *ObjcInterfaceDecl::lookupInstanceVariable( IdentifierInfo *ID, ObjcInterfaceDecl *&clsDeclared) { ObjcInterfaceDecl* ClassDecl = this; while (ClassDecl != NULL) { - ObjcIvarDecl **ivars = ClassDecl->getInstanceVariables(); - int ivarCount = ClassDecl->getNumInstanceVariables(); - for (int i = 0; i < ivarCount; ++i) { - if (ivars[i]->getIdentifier() == ID) { + for (ivar_iterator I = ClassDecl->ivar_begin(), E = ClassDecl->ivar_end(); + I != E; ++I) { + if ((*I)->getIdentifier() == ID) { clsDeclared = ClassDecl; - return ivars[i]; + return *I; } } ClassDecl = ClassDecl->getSuperClass(); diff --git a/Driver/ASTConsumers.cpp b/Driver/ASTConsumers.cpp index 22863411b1..790baf5a70 100644 --- a/Driver/ASTConsumers.cpp +++ b/Driver/ASTConsumers.cpp @@ -172,14 +172,12 @@ void DeclPrinter::PrintObjcInterfaceDecl(ObjcInterfaceDecl *OID) { else Out << '\n'; - int NumIvars = OID->getNumInstanceVariables(); - if (NumIvars > 0) { - ObjcIvarDecl **Ivars = OID->getInstanceVariables(); + if (OID->getNumInstanceVariables() > 0) { Out << '{'; - for (int i = 0; i < NumIvars; i++) { - Out << '\t' << Ivars[i]->getType().getAsString() - << ' ' << Ivars[i]->getName() - << ";\n"; + for (ObjcInterfaceDecl::ivar_iterator I = OID->ivar_begin(), + E = OID->ivar_end(); I != E; ++I) { + Out << '\t' << (*I)->getType().getAsString() + << ' ' << (*I)->getName() << ";\n"; } Out << "}\n"; } diff --git a/Driver/RewriteTest.cpp b/Driver/RewriteTest.cpp index c8c8f9dd3e..6edfcb17d7 100644 --- a/Driver/RewriteTest.cpp +++ b/Driver/RewriteTest.cpp @@ -2090,10 +2090,6 @@ void RewriteTest::RewriteObjcClassMetaData(ObjcImplementationDecl *IDecl, std::string &Result) { ObjcInterfaceDecl *CDecl = IDecl->getClassInterface(); - // Build _objc_ivar_list metadata for classes ivars if needed - int NumIvars = IDecl->getImplDeclNumIvars() > 0 - ? IDecl->getImplDeclNumIvars() - : (CDecl ? CDecl->getNumInstanceVariables() : 0); // Explictly declared @interface's are already synthesized. if (CDecl->ImplicitInterfaceDecl()) { // FIXME: Implementation of a class with no @interface (legacy) doese not @@ -2101,6 +2097,10 @@ void RewriteTest::RewriteObjcClassMetaData(ObjcImplementationDecl *IDecl, SynthesizeObjcInternalStruct(CDecl, Result); } + // Build _objc_ivar_list metadata for classes ivars if needed + int NumIvars = IDecl->getImplDeclNumIvars() > 0 + ? IDecl->getImplDeclNumIvars() + : (CDecl ? CDecl->getNumInstanceVariables() : 0); if (NumIvars > 0) { static bool objc_ivar = false; if (!objc_ivar) { @@ -2133,28 +2133,33 @@ void RewriteTest::RewriteObjcClassMetaData(ObjcImplementationDecl *IDecl, "{\n\t"; Result += utostr(NumIvars); Result += "\n"; - - ObjcIvarDecl **Ivars = IDecl->getImplDeclIVars() - ? IDecl->getImplDeclIVars() - : CDecl->getInstanceVariables(); + + ObjcInterfaceDecl::ivar_iterator IVI, IVE; + if (IDecl->getImplDeclNumIvars() > 0) { + IVI = IDecl->ivar_begin(); + IVE = IDecl->ivar_end(); + } else { + IVI = CDecl->ivar_begin(); + IVE = CDecl->ivar_end(); + } Result += "\t,{{\""; - Result += Ivars[0]->getName(); + Result += (*IVI)->getName(); Result += "\", \""; std::string StrEncoding; - Context->getObjcEncodingForType(Ivars[0]->getType(), StrEncoding); + Context->getObjcEncodingForType((*IVI)->getType(), StrEncoding); Result += StrEncoding; Result += "\", "; - SynthesizeIvarOffsetComputation(IDecl, Ivars[0], Result); + SynthesizeIvarOffsetComputation(IDecl, *IVI, Result); Result += "}\n"; - for (int i = 1; i < NumIvars; i++) { + for (++IVI; IVI != IVE; ++IVI) { Result += "\t ,{\""; - Result += Ivars[i]->getName(); + Result += (*IVI)->getName(); Result += "\", \""; std::string StrEncoding; - Context->getObjcEncodingForType(Ivars[i]->getType(), StrEncoding); + Context->getObjcEncodingForType((*IVI)->getType(), StrEncoding); Result += StrEncoding; Result += "\", "; - SynthesizeIvarOffsetComputation(IDecl, Ivars[i], Result); + SynthesizeIvarOffsetComputation(IDecl, (*IVI), Result); Result += "}\n"; } diff --git a/include/clang/AST/DeclObjC.h b/include/clang/AST/DeclObjC.h index fd763d586c..a1b73cd4ee 100644 --- a/include/clang/AST/DeclObjC.h +++ b/include/clang/AST/DeclObjC.h @@ -111,9 +111,12 @@ public: } int getNumIntfRefProtocols() const { return NumReferencedProtocols; } - ObjcIvarDecl **getInstanceVariables() const { return Ivars; } int getNumInstanceVariables() const { return NumIvars; } + typedef ObjcIvarDecl * const *ivar_iterator; + ivar_iterator ivar_begin() const { return Ivars; } + ivar_iterator ivar_end() const { return Ivars+(NumIvars == -1 ?0 : NumIvars);} + ObjcMethodDecl** getInstanceMethods() const { return InstanceMethods; } int getNumInstanceMethods() const { return NumInstanceMethods; } @@ -580,7 +583,6 @@ public: unsigned getNumInstanceMethods() const { return InstanceMethods.size(); } unsigned getNumClassMethods() const { return ClassMethods.size(); } - ObjcIvarDecl **getImplDeclIVars() const { return Ivars; } unsigned getImplDeclNumIvars() const { return NumIvars; } -- 2.40.0