зеркало из https://github.com/microsoft/clang-1.git
remove some slow O(n) methods.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@65132 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Родитель
07fa7749da
Коммит
cafeb35117
|
@ -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<ObjCProtocolDecl> &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<ObjCProtocolDecl> &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<ObjCProtocolDecl> &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";
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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...
|
||||
|
|
Загрузка…
Ссылка в новой задаче