diff options
author | Fariborz Jahanian <fjahanian@apple.com> | 2014-08-13 21:07:35 +0000 |
---|---|---|
committer | Fariborz Jahanian <fjahanian@apple.com> | 2014-08-13 21:07:35 +0000 |
commit | 30ae8d44139baea8e5e8941d56aa6cc92e5f0239 (patch) | |
tree | bc63f90474c9d9fbedf44ddeafd668a5eccca264 /clang/lib/Sema/SemaDeclObjC.cpp | |
parent | abea99f65a97248974c02a5544eaf25fc4240056 (diff) | |
download | bcm5719-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.cpp | 17 |
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) { |