Various tweaks to the get/lookup instance/class method API's.

llvm-svn: 45224
This commit is contained in:
Steve Naroff 2007-12-19 22:27:04 +00:00
parent 6c7807716b
commit fa5751f842
4 changed files with 46 additions and 46 deletions

View File

@ -407,25 +407,25 @@ ObjcIvarDecl *ObjcInterfaceDecl::lookupInstanceVariable(
/// lookupInstanceMethod - This method returns an instance method by looking in
/// the class, its categories, and its super classes (using a linear search).
ObjcMethodDecl *ObjcInterfaceDecl::lookupInstanceMethod(Selector &Sel) {
ObjcMethodDecl *ObjcInterfaceDecl::lookupInstanceMethod(Selector Sel) {
ObjcInterfaceDecl* ClassDecl = this;
ObjcMethodDecl *MethodDecl = 0;
while (ClassDecl != NULL) {
if ((MethodDecl = ClassDecl->getInstanceMethodForSelector(Sel)))
if ((MethodDecl = ClassDecl->getInstanceMethod(Sel)))
return MethodDecl;
// Didn't find one yet - look through protocols.
ObjcProtocolDecl **protocols = ClassDecl->getReferencedProtocols();
int numProtocols = ClassDecl->getNumIntfRefProtocols();
for (int pIdx = 0; pIdx < numProtocols; pIdx++) {
if ((MethodDecl = protocols[pIdx]->getInstanceMethodForSelector(Sel)))
if ((MethodDecl = protocols[pIdx]->getInstanceMethod(Sel)))
return MethodDecl;
}
// Didn't find one yet - now look through categories.
ObjcCategoryDecl *CatDecl = ClassDecl->getCategoryList();
while (CatDecl) {
if ((MethodDecl = CatDecl->getInstanceMethodForSelector(Sel)))
if ((MethodDecl = CatDecl->getInstanceMethod(Sel)))
return MethodDecl;
CatDecl = CatDecl->getNextClassCategory();
}
@ -436,25 +436,25 @@ ObjcMethodDecl *ObjcInterfaceDecl::lookupInstanceMethod(Selector &Sel) {
// lookupClassMethod - This method returns a class method by looking in the
// class, its categories, and its super classes (using a linear search).
ObjcMethodDecl *ObjcInterfaceDecl::lookupClassMethod(Selector &Sel) {
ObjcMethodDecl *ObjcInterfaceDecl::lookupClassMethod(Selector Sel) {
ObjcInterfaceDecl* ClassDecl = this;
ObjcMethodDecl *MethodDecl = 0;
while (ClassDecl != NULL) {
if ((MethodDecl = ClassDecl->getClassMethodForSelector(Sel)))
if ((MethodDecl = ClassDecl->getClassMethod(Sel)))
return MethodDecl;
// Didn't find one yet - look through protocols.
ObjcProtocolDecl **protocols = ClassDecl->getReferencedProtocols();
int numProtocols = ClassDecl->getNumIntfRefProtocols();
for (int pIdx = 0; pIdx < numProtocols; pIdx++) {
if ((MethodDecl = protocols[pIdx]->getClassMethodForSelector(Sel)))
if ((MethodDecl = protocols[pIdx]->getClassMethod(Sel)))
return MethodDecl;
}
// Didn't find one yet - now look through categories.
ObjcCategoryDecl *CatDecl = ClassDecl->getCategoryList();
while (CatDecl) {
if ((MethodDecl = CatDecl->getClassMethodForSelector(Sel)))
if ((MethodDecl = CatDecl->getClassMethod(Sel)))
return MethodDecl;
CatDecl = CatDecl->getNextClassCategory();
}
@ -466,7 +466,7 @@ ObjcMethodDecl *ObjcInterfaceDecl::lookupClassMethod(Selector &Sel) {
/// lookupInstanceMethod - This method returns an instance method by looking in
/// the class implementation. Unlike interfaces, we don't look outside the
/// implementation.
ObjcMethodDecl *ObjcImplementationDecl::lookupInstanceMethod(Selector Sel) {
ObjcMethodDecl *ObjcImplementationDecl::getInstanceMethod(Selector Sel) {
for (instmeth_iterator I = instmeth_begin(), E = instmeth_end(); I != E; ++I)
if ((*I)->getSelector() == Sel)
return *I;
@ -476,7 +476,7 @@ ObjcMethodDecl *ObjcImplementationDecl::lookupInstanceMethod(Selector Sel) {
/// lookupClassMethod - This method returns a class method by looking in
/// the class implementation. Unlike interfaces, we don't look outside the
/// implementation.
ObjcMethodDecl *ObjcImplementationDecl::lookupClassMethod(Selector Sel) {
ObjcMethodDecl *ObjcImplementationDecl::getClassMethod(Selector Sel) {
for (classmeth_iterator I = classmeth_begin(), E = classmeth_end();
I != E; ++I)
if ((*I)->getSelector() == Sel)
@ -487,7 +487,7 @@ ObjcMethodDecl *ObjcImplementationDecl::lookupClassMethod(Selector Sel) {
// lookupInstanceMethod - This method returns an instance method by looking in
// the class implementation. Unlike interfaces, we don't look outside the
// implementation.
ObjcMethodDecl *ObjcCategoryImplDecl::lookupInstanceMethod(Selector &Sel) {
ObjcMethodDecl *ObjcCategoryImplDecl::getInstanceMethod(Selector Sel) {
for (instmeth_iterator I = instmeth_begin(), E = instmeth_end(); I != E; ++I)
if ((*I)->getSelector() == Sel)
return *I;
@ -497,7 +497,7 @@ ObjcMethodDecl *ObjcCategoryImplDecl::lookupInstanceMethod(Selector &Sel) {
// lookupClassMethod - This method returns an instance method by looking in
// the class implementation. Unlike interfaces, we don't look outside the
// implementation.
ObjcMethodDecl *ObjcCategoryImplDecl::lookupClassMethod(Selector &Sel) {
ObjcMethodDecl *ObjcCategoryImplDecl::getClassMethod(Selector Sel) {
for (classmeth_iterator I = classmeth_begin(), E = classmeth_end();
I != E; ++I)
if ((*I)->getSelector() == Sel)
@ -507,17 +507,17 @@ ObjcMethodDecl *ObjcCategoryImplDecl::lookupClassMethod(Selector &Sel) {
// lookupInstanceMethod - Lookup a instance method in the protocol and protocols
// it inherited.
ObjcMethodDecl *ObjcProtocolDecl::lookupInstanceMethod(Selector &Sel) {
ObjcMethodDecl *ObjcProtocolDecl::lookupInstanceMethod(Selector Sel) {
ObjcMethodDecl *MethodDecl = NULL;
if ((MethodDecl = getInstanceMethodForSelector(Sel)))
if ((MethodDecl = getInstanceMethod(Sel)))
return MethodDecl;
if (getNumReferencedProtocols() > 0) {
ObjcProtocolDecl **RefPDecl = getReferencedProtocols();
for (int i = 0; i < getNumReferencedProtocols(); i++) {
if ((MethodDecl = RefPDecl[i]->getInstanceMethodForSelector(Sel)))
if ((MethodDecl = RefPDecl[i]->getInstanceMethod(Sel)))
return MethodDecl;
}
}
@ -526,17 +526,17 @@ ObjcMethodDecl *ObjcProtocolDecl::lookupInstanceMethod(Selector &Sel) {
// lookupInstanceMethod - Lookup a class method in the protocol and protocols
// it inherited.
ObjcMethodDecl *ObjcProtocolDecl::lookupClassMethod(Selector &Sel) {
ObjcMethodDecl *ObjcProtocolDecl::lookupClassMethod(Selector Sel) {
ObjcMethodDecl *MethodDecl = NULL;
if ((MethodDecl = getClassMethodForSelector(Sel)))
if ((MethodDecl = getClassMethod(Sel)))
return MethodDecl;
if (getNumReferencedProtocols() > 0) {
ObjcProtocolDecl **RefPDecl = getReferencedProtocols();
for (int i = 0; i < getNumReferencedProtocols(); i++) {
if ((MethodDecl = RefPDecl[i]->getClassMethodForSelector(Sel)))
if ((MethodDecl = RefPDecl[i]->getClassMethod(Sel)))
return MethodDecl;
}
}

View File

@ -855,20 +855,20 @@ Sema::DeclTy *Sema::ActOnMethodDeclaration(
if (ObjcImplementationDecl *ImpDecl =
dyn_cast<ObjcImplementationDecl>(CDecl)) {
if (MethodType == tok::minus) {
PrevMethod = ImpDecl->lookupInstanceMethod(Sel);
PrevMethod = ImpDecl->getInstanceMethod(Sel);
ImpDecl->addInstanceMethod(ObjcMethod);
} else {
PrevMethod = ImpDecl->lookupClassMethod(Sel);
PrevMethod = ImpDecl->getClassMethod(Sel);
ImpDecl->addClassMethod(ObjcMethod);
}
}
else if (ObjcCategoryImplDecl *CatImpDecl =
dyn_cast<ObjcCategoryImplDecl>(CDecl)) {
if (MethodType == tok::minus) {
PrevMethod = CatImpDecl->lookupInstanceMethod(Sel);
PrevMethod = CatImpDecl->getInstanceMethod(Sel);
CatImpDecl->addInstanceMethod(ObjcMethod);
} else {
PrevMethod = CatImpDecl->lookupClassMethod(Sel);
PrevMethod = CatImpDecl->getClassMethod(Sel);
CatImpDecl->addClassMethod(ObjcMethod);
}
}

View File

@ -2341,7 +2341,7 @@ Sema::ExprResult Sema::ActOnInstanceMessage(
// If we have an implementation in scope, check "private" methods.
if (ObjcImplementationDecl *ImpDecl =
ObjcImplementations[ClassDecl->getIdentifier()])
Method = ImpDecl->lookupInstanceMethod(Sel);
Method = ImpDecl->getInstanceMethod(Sel);
// If we still haven't found a method, look in the global pool. This
// behavior isn't very desirable, however we need it for GCC compatibility.
if (!Method)

View File

@ -278,7 +278,7 @@ public:
ObjcInterfaceDecl *&clsDeclared);
// Get the local instance method declared in this interface.
ObjcMethodDecl *getInstanceMethodForSelector(Selector &Sel) {
ObjcMethodDecl *getInstanceMethod(Selector &Sel) {
for (instmeth_iterator I = instmeth_begin(), E = instmeth_end();
I != E; ++I) {
if ((*I)->getSelector() == Sel)
@ -287,7 +287,7 @@ public:
return 0;
}
// Get the local class method declared in this interface.
ObjcMethodDecl *getClassMethodForSelector(Selector &Sel) {
ObjcMethodDecl *getClassMethod(Selector &Sel) {
for (classmeth_iterator I = classmeth_begin(), E = classmeth_end();
I != E; ++I) {
if ((*I)->getSelector() == Sel)
@ -295,11 +295,10 @@ public:
}
return 0;
}
// Lookup the instance method. First, we search locally. If a method isn't
// found, we look through the reference protocols. Lastly, we look categories
// defined for this class.
ObjcMethodDecl *lookupInstanceMethod(Selector &Sel);
ObjcMethodDecl *lookupClassMethod(Selector &Sel);
// Lookup a method. First, we search locally. If a method isn't
// found, we search referenced protocols and class categories.
ObjcMethodDecl *lookupInstanceMethod(Selector Sel);
ObjcMethodDecl *lookupClassMethod(Selector Sel);
// Location information, modeled after the Stmt API.
SourceLocation getLocStart() const { return getLocation(); } // '@'interface
@ -445,7 +444,7 @@ public:
}
// Get the local instance method declared in this interface.
ObjcMethodDecl *getInstanceMethodForSelector(Selector &Sel) {
ObjcMethodDecl *getInstanceMethod(Selector &Sel) {
for (instmeth_iterator I = instmeth_begin(), E = instmeth_end();
I != E; ++I) {
if ((*I)->getSelector() == Sel)
@ -454,7 +453,7 @@ public:
return 0;
}
// Get the local class method declared in this interface.
ObjcMethodDecl *getClassMethodForSelector(Selector &Sel) {
ObjcMethodDecl *getClassMethod(Selector &Sel) {
for (classmeth_iterator I = classmeth_begin(), E = classmeth_end();
I != E; ++I) {
if ((*I)->getSelector() == Sel)
@ -463,8 +462,10 @@ public:
return 0;
}
ObjcMethodDecl *lookupInstanceMethod(Selector &Sel);
ObjcMethodDecl *lookupClassMethod(Selector &Sel);
// Lookup a method. First, we search locally. If a method isn't
// found, we search referenced protocols and class categories.
ObjcMethodDecl *lookupInstanceMethod(Selector Sel);
ObjcMethodDecl *lookupClassMethod(Selector Sel);
bool isForwardDecl() const { return isForwardProtoDecl; }
void setForwardDecl(bool val) { isForwardProtoDecl = val; }
@ -633,7 +634,7 @@ public:
}
// Get the local instance method declared in this interface.
ObjcMethodDecl *getInstanceMethodForSelector(Selector &Sel) {
ObjcMethodDecl *getInstanceMethod(Selector &Sel) {
for (instmeth_iterator I = instmeth_begin(), E = instmeth_end();
I != E; ++I) {
if ((*I)->getSelector() == Sel)
@ -642,7 +643,7 @@ public:
return 0;
}
// Get the local class method declared in this interface.
ObjcMethodDecl *getClassMethodForSelector(Selector &Sel) {
ObjcMethodDecl *getClassMethod(Selector &Sel) {
for (classmeth_iterator I = classmeth_begin(), E = classmeth_end();
I != E; ++I) {
if ((*I)->getSelector() == Sel)
@ -701,8 +702,11 @@ public:
void addClassMethod(ObjcMethodDecl *method) {
ClassMethods.push_back(method);
}
ObjcMethodDecl *lookupInstanceMethod(Selector &Sel);
ObjcMethodDecl *lookupClassMethod(Selector &Sel);
// Get the instance method definition for this implementation.
ObjcMethodDecl *getInstanceMethod(Selector Sel);
// Get the class method definition for this implementation.
ObjcMethodDecl *getClassMethod(Selector Sel);
typedef llvm::SmallVector<ObjcMethodDecl*, 32>::const_iterator
instmeth_iterator;
@ -801,15 +805,11 @@ public:
classmeth_iterator classmeth_begin() const { return ClassMethods.begin(); }
classmeth_iterator classmeth_end() const { return ClassMethods.end(); }
/// lookupInstanceMethod - This method returns an instance method by looking
/// in the class implementation. Unlike interfaces, we don't look outside the
/// implementation.
ObjcMethodDecl *lookupInstanceMethod(Selector Sel);
// Get the instance method definition for this implementation.
ObjcMethodDecl *getInstanceMethod(Selector Sel);
/// lookupClassMethod - This method returns a class method by looking in
/// the class implementation. Unlike interfaces, we don't look outside the
/// implementation.
ObjcMethodDecl *lookupClassMethod(Selector Sel);
// Get the class method definition for this implementation.
ObjcMethodDecl *getClassMethod(Selector Sel);
typedef ObjcIvarDecl * const *ivar_iterator;
ivar_iterator ivar_begin() const { return Ivars; }