summaryrefslogtreecommitdiffstats
path: root/clang/lib/Sema/SemaDeclObjC.cpp
diff options
context:
space:
mode:
authorFariborz Jahanian <fjahanian@apple.com>2014-08-13 21:07:35 +0000
committerFariborz Jahanian <fjahanian@apple.com>2014-08-13 21:07:35 +0000
commit30ae8d44139baea8e5e8941d56aa6cc92e5f0239 (patch)
treebc63f90474c9d9fbedf44ddeafd668a5eccca264 /clang/lib/Sema/SemaDeclObjC.cpp
parentabea99f65a97248974c02a5544eaf25fc4240056 (diff)
downloadbcm5719-llvm-30ae8d44139baea8e5e8941d56aa6cc92e5f0239.tar.gz
bcm5719-llvm-30ae8d44139baea8e5e8941d56aa6cc92e5f0239.zip
Objective-C. This patch is to resolve the method used in method
expression to the best method found in global method pools. This is wip. // rdar://16808765 llvm-svn: 215577
Diffstat (limited to 'clang/lib/Sema/SemaDeclObjC.cpp')
-rw-r--r--clang/lib/Sema/SemaDeclObjC.cpp17
1 files changed, 17 insertions, 0 deletions
diff --git a/clang/lib/Sema/SemaDeclObjC.cpp b/clang/lib/Sema/SemaDeclObjC.cpp
index 469e45c7535..8e3e85ed281 100644
--- a/clang/lib/Sema/SemaDeclObjC.cpp
+++ b/clang/lib/Sema/SemaDeclObjC.cpp
@@ -2315,6 +2315,23 @@ static bool isAcceptableMethodMismatch(ObjCMethodDecl *chosen,
return (chosen->getReturnType()->isIntegerType());
}
+bool Sema::CollectMultipleMethodsInGlobalPool(Selector Sel,
+ SmallVectorImpl<ObjCMethodDecl*>& Methods,
+ bool instance) {
+ if (ExternalSource)
+ ReadMethodPool(Sel);
+
+ GlobalMethodPool::iterator Pos = MethodPool.find(Sel);
+ if (Pos == MethodPool.end())
+ return false;
+ // Gather the non-hidden methods.
+ ObjCMethodList &MethList = instance ? Pos->second.first : Pos->second.second;
+ for (ObjCMethodList *M = &MethList; M; M = M->getNext())
+ if (M->Method && !M->Method->isHidden())
+ Methods.push_back(M->Method);
+ return (Methods.size() > 1);
+}
+
ObjCMethodDecl *Sema::LookupMethodInGlobalPool(Selector Sel, SourceRange R,
bool receiverIdOrClass,
bool warn, bool instance) {
OpenPOWER on IntegriCloud