]> granicus.if.org Git - clang/commitdiff
Some refactoring of recent code. No functionality change.
authorFariborz Jahanian <fjahanian@apple.com>
Wed, 4 Mar 2009 18:15:57 +0000 (18:15 +0000)
committerFariborz Jahanian <fjahanian@apple.com>
Wed, 4 Mar 2009 18:15:57 +0000 (18:15 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@66041 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Sema/Sema.h
lib/Sema/SemaExprObjC.cpp

index 9cb47cce4b2998f6d8098bc379a972e1ae5b99f5..f68ef92e9628950cba313e5811839b0cdbd92165 100644 (file)
@@ -1768,8 +1768,9 @@ public:
 
   // Helper method for ActOnClassMethod/ActOnInstanceMethod.
   // Will search "local" class/category implementations for a method decl.
+  // Will also search in class's root looking for instance method.
   // Returns 0 if no method is found.
-  ObjCMethodDecl *LookupPrivateMethod(Selector Sel, ObjCInterfaceDecl *CDecl);
+  ObjCMethodDecl *LookupPrivateOrRootMethod(Selector Sel, ObjCInterfaceDecl *CDecl);
   
   // ActOnClassMessage - used for both unary and keyword messages.
   // ArgExprs is optional - if it is present, the number of expressions
index 80120a7b7a4ac7f69770d3c712ad11e6c589ffa7..9266e48a98e12f22a585adaf5822dccfe6459d96 100644 (file)
@@ -211,8 +211,9 @@ bool Sema::isSelfExpr(Expr *RExpr) {
 
 // Helper method for ActOnClassMethod/ActOnInstanceMethod.
 // Will search "local" class/category implementations for a method decl.
+// If failed, then we search in class's root for an instance method.
 // Returns 0 if no method is found.
-ObjCMethodDecl *Sema::LookupPrivateMethod(Selector Sel,
+ObjCMethodDecl *Sema::LookupPrivateOrRootMethod(Selector Sel,
                                           ObjCInterfaceDecl *ClassDecl) {
   ObjCMethodDecl *Method = 0;
   
@@ -227,6 +228,15 @@ ObjCMethodDecl *Sema::LookupPrivateMethod(Selector Sel,
         Method = ObjCCategoryImpls[i]->getClassMethod(Sel);
     }
   }
+  // Before we give up, check if the selector is an instance method.
+  // But only in the root. This matches gcc's behaviour and what the
+  // runtime expects.
+  if (!Method) {
+    ObjCInterfaceDecl *Root = ClassDecl;
+    while (Root->getSuperClass())
+      Root = Root->getSuperClass();
+    Method = Root->lookupInstanceMethod(Sel);
+  }
   return Method;
 }
 
@@ -311,17 +321,7 @@ Sema::ExprResult Sema::ActOnClassMessage(
   
   // If we have an implementation in scope, check "private" methods.
   if (!Method)
-    Method = LookupPrivateMethod(Sel, ClassDecl);
-
-  // Before we give up, check if the selector is an instance method.
-  // But only in the root. This matches gcc's behaviour and what the
-  // runtime expects.
-  if (!Method) {
-    ObjCInterfaceDecl *Root = ClassDecl;
-    while (Root->getSuperClass())
-      Root = Root->getSuperClass(); 
-    Method = Root->lookupInstanceMethod(Sel);
-  }
+    Method = LookupPrivateOrRootMethod(Sel, ClassDecl);
 
   if (Method && DiagnoseUseOfDecl(Method, receiverLoc))
     return true;
@@ -405,16 +405,7 @@ Sema::ExprResult Sema::ActOnInstanceMessage(ExprTy *receiver, Selector Sel,
         Method = ClassDecl->lookupClassMethod(Sel);
         
         if (!Method)
-          Method = LookupPrivateMethod(Sel, ClassDecl);
-        // Before we give up, check if the selector is an instance method.
-        // But only in the root. This matches gcc's behaviour and what the
-        // runtime expects.
-        if (!Method) {
-          ObjCInterfaceDecl *Root = ClassDecl;
-          while (Root->getSuperClass())
-            Root = Root->getSuperClass();
-          Method = Root->lookupInstanceMethod(Sel);
-        }
+          Method = LookupPrivateOrRootMethod(Sel, ClassDecl);
       }
       if (Method && DiagnoseUseOfDecl(Method, receiverLoc))
         return true;