From cafeb35117578585dbbfef0bc79d8aa27712bc0e Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Fri, 20 Feb 2009 18:18:36 +0000 Subject: [PATCH] remove some slow O(n) methods. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@65132 91177308-0d34-0410-b5e6-96231b3b80d8 --- Driver/RewriteObjC.cpp | 20 +++++++++++--------- include/clang/AST/DeclObjC.h | 8 -------- lib/AST/DeclObjC.cpp | 19 ------------------- 3 files changed, 11 insertions(+), 36 deletions(-) diff --git a/Driver/RewriteObjC.cpp b/Driver/RewriteObjC.cpp index 0e9eb90da7..f5659d6071 100644 --- a/Driver/RewriteObjC.cpp +++ b/Driver/RewriteObjC.cpp @@ -2693,7 +2693,7 @@ void RewriteObjC::SynthesizeObjCInternalStruct(ObjCInterfaceDecl *CDecl, const char *endHeader = SM->getCharacterData(L); endHeader += Lexer::MeasureTokenLength(L, *SM); - if (!CDecl->getReferencedProtocols().empty()) { + if (CDecl->protocol_begin() != CDecl->protocol_end()) { // advance to the end of the referenced protocols. while (endHeader < cursor && *endHeader != '>') endHeader++; endHeader++; @@ -2869,7 +2869,8 @@ RewriteObjCProtocolsMetaData(const ObjCList &Protocols, continue; if (PDecl->instmeth_begin() != PDecl->instmeth_end()) { - unsigned NumMethods = PDecl->getNumInstanceMethods(); + unsigned NumMethods = std::distance(PDecl->instmeth_begin(), + PDecl->instmeth_end()); /* struct _objc_protocol_method_list { int protocol_method_count; struct protocol_methods protocols[]; @@ -2902,7 +2903,8 @@ RewriteObjCProtocolsMetaData(const ObjCList &Protocols, } // Output class methods declared in this protocol. - int NumMethods = PDecl->getNumClassMethods(); + unsigned NumMethods = std::distance(PDecl->classmeth_begin(), + PDecl->classmeth_end()); if (NumMethods > 0) { /* struct _objc_protocol_method_list { int protocol_method_count; @@ -2973,7 +2975,7 @@ RewriteObjCProtocolsMetaData(const ObjCList &Protocols, } else Result += "0, "; - if (PDecl->getNumClassMethods() > 0) { + if (PDecl->classmeth_begin() != PDecl->classmeth_end()) { Result += "(struct _objc_protocol_method_list *)&_OBJC_PROTOCOL_CLASS_METHODS_"; Result += PDecl->getNameAsString(); Result += "\n"; @@ -3085,7 +3087,7 @@ void RewriteObjC::RewriteObjCCategoryImplDecl(ObjCCategoryImplDecl *IDecl, Result += ClassDecl->getNameAsString(); Result += "\"\n"; - if (IDecl->getNumInstanceMethods() > 0) { + if (IDecl->instmeth_begin() != IDecl->instmeth_end()) { Result += "\t, (struct _objc_method_list *)" "&_OBJC_CATEGORY_INSTANCE_METHODS_"; Result += FullCategoryName; @@ -3093,7 +3095,7 @@ void RewriteObjC::RewriteObjCCategoryImplDecl(ObjCCategoryImplDecl *IDecl, } else Result += "\t, 0\n"; - if (IDecl->getNumClassMethods() > 0) { + if (IDecl->classmeth_begin() != IDecl->classmeth_end()) { Result += "\t, (struct _objc_method_list *)" "&_OBJC_CATEGORY_CLASS_METHODS_"; Result += FullCategoryName; @@ -3102,7 +3104,7 @@ void RewriteObjC::RewriteObjCCategoryImplDecl(ObjCCategoryImplDecl *IDecl, else Result += "\t, 0\n"; - if (CDecl && !CDecl->getReferencedProtocols().empty()) { + if (CDecl && CDecl->protocol_begin() != CDecl->protocol_end()) { Result += "\t, (struct _objc_protocol_list *)&_OBJC_CATEGORY_PROTOCOLS_"; Result += FullCategoryName; Result += "\n"; @@ -3303,7 +3305,7 @@ void RewriteObjC::RewriteObjCClassMetaData(ObjCImplementationDecl *IDecl, } else Result += ", 0\n"; - if (!CDecl->getReferencedProtocols().empty()) { + if (CDecl->protocol_begin() != CDecl->protocol_end()) { Result += "\t,0, (struct _objc_protocol_list *)&_OBJC_CLASS_PROTOCOLS_"; Result += CDecl->getNameAsString(); Result += ",0,0\n"; @@ -3356,7 +3358,7 @@ void RewriteObjC::RewriteObjCClassMetaData(ObjCImplementationDecl *IDecl, } else Result += ",0,0"; - if (!CDecl->getReferencedProtocols().empty()) { + if (CDecl->protocol_begin() != CDecl->protocol_end()) { Result += ", (struct _objc_protocol_list*)&_OBJC_CLASS_PROTOCOLS_"; Result += CDecl->getNameAsString(); Result += ", 0,0\n"; diff --git a/include/clang/AST/DeclObjC.h b/include/clang/AST/DeclObjC.h index efd5242953..346514db50 100644 --- a/include/clang/AST/DeclObjC.h +++ b/include/clang/AST/DeclObjC.h @@ -308,11 +308,6 @@ public: ObjCPropertyDecl *FindPropertyDeclaration(IdentifierInfo *PropertyId) const; - // Get the number of methods, properties. These methods are slow, O(n). - unsigned getNumInstanceMethods() const; - unsigned getNumClassMethods() const; - unsigned getNumProperties() const; - // Marks the end of the container. SourceLocation getAtEndLoc() const { return AtEndLoc; } void setAtEndLoc(SourceLocation L) { AtEndLoc = L; } @@ -798,9 +793,6 @@ public: const ObjCInterfaceDecl *getClassInterface() const { return ClassInterface; } ObjCInterfaceDecl *getClassInterface() { return ClassInterface; } - unsigned getNumInstanceMethods() const { return InstanceMethods.size(); } - unsigned getNumClassMethods() const { return ClassMethods.size(); } - void addInstanceMethod(ObjCMethodDecl *method) { InstanceMethods.push_back(method); } diff --git a/lib/AST/DeclObjC.cpp b/lib/AST/DeclObjC.cpp index 2ae7ccc816..d0b8a9731a 100644 --- a/lib/AST/DeclObjC.cpp +++ b/lib/AST/DeclObjC.cpp @@ -282,25 +282,6 @@ ObjCMethodDecl *ObjCContainerDecl::getClassMethod(Selector Sel) const { return 0; } -unsigned ObjCContainerDecl::getNumInstanceMethods() const { - unsigned sum = 0; - for (instmeth_iterator I=instmeth_begin(), E=instmeth_end(); I != E; ++I) - sum++; - return sum; -} -unsigned ObjCContainerDecl::getNumClassMethods() const { - unsigned sum = 0; - for (classmeth_iterator I=classmeth_begin(), E=classmeth_end(); I != E; ++I) - sum++; - return sum; -} -unsigned ObjCContainerDecl::getNumProperties() const { - unsigned sum = 0; - for (prop_iterator I=prop_begin(), E=prop_end(); I != E; ++I) - sum++; - return sum; -} - /// FindPropertyDeclaration - Finds declaration of the property given its name /// in 'PropertyId' and returns it. It returns 0, if not found. /// FIXME: Convert to DeclContext lookup... -- 2.40.0