]> granicus.if.org Git - clang/commitdiff
Tune the lookup logic in Sema::ActOnInstanceMessage() to handle private methods ...
authorSteve Naroff <snaroff@apple.com>
Tue, 13 Nov 2007 04:10:18 +0000 (04:10 +0000)
committerSteve Naroff <snaroff@apple.com>
Tue, 13 Nov 2007 04:10:18 +0000 (04:10 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@44041 91177308-0d34-0410-b5e6-96231b3b80d8

Sema/SemaExpr.cpp

index 976069e669d586f2f8bf3c3b7ebfd6fea44db63f..87b3d081daced81f89cd3b9159063722d6a55d9b 100644 (file)
@@ -2139,6 +2139,23 @@ Sema::ExprResult Sema::ActOnInstanceMessage(
   if (receiverType == Context.getObjcIdType() ||
       receiverType == Context.getObjcClassType()) {
     Method = InstanceMethodPool[Sel].Method;
+    // If we didn't find an public method, look for a private one.
+    if (!Method && CurMethodDecl) {
+      NamedDecl *impCxt = CurMethodDecl->getMethodContext();
+      if (ObjcImplementationDecl *IMD = 
+          dyn_cast<ObjcImplementationDecl>(impCxt)) {
+        if (receiverType == Context.getObjcIdType())
+          Method = IMD->lookupInstanceMethod(Sel);
+        else
+          Method = IMD->lookupClassMethod(Sel);
+      } else if (ObjcCategoryImplDecl *CID = 
+                 dyn_cast<ObjcCategoryImplDecl>(impCxt)) {
+        if (receiverType == Context.getObjcIdType())
+          Method = CID->lookupInstanceMethod(Sel);
+        else
+          Method = CID->lookupClassMethod(Sel);
+      }
+    }
     if (!Method) {
       Diag(lbrac, diag::warn_method_not_found, std::string("-"), Sel.getName(),
            SourceRange(lbrac, rbrac));