(conformsTo:): Change implementati to allways use class to do lookup.
authorKresten Krab Thorup <krab@gcc.gnu.org>
Wed, 7 Sep 1994 15:28:04 +0000 (15:28 +0000)
committerKresten Krab Thorup <krab@gcc.gnu.org>
Wed, 7 Sep 1994 15:28:04 +0000 (15:28 +0000)
From-SVN: r8030

gcc/objc/Object.m

index 040df86126a4df32162ddfe567f3daeabfa9e1d7..1716d1d37c336264cbfb68b7c7c74a2fc8b34bf6 100644 (file)
@@ -194,12 +194,17 @@ extern int errno;
 
 // Indicates if the receiving class or instance conforms to the given protocol
 // not usually overridden by subclasses
-- (BOOL) conformsTo: (Protocol*)aProtocol
+//
+// Modified 9/5/94 to always search the class object's protocol list, rather
+// than the meta class.
+
++ (BOOL) conformsTo: (Protocol*)aProtocol
 {
   int i;
   struct objc_protocol_list* proto_list;
+  id parent;
 
-  for (proto_list = isa->protocols;
+  for (proto_list = ((Class*)self)->protocols;
        proto_list; proto_list = proto_list->next)
     {
       for (i=0; i < proto_list->count; i++)
@@ -209,12 +214,17 @@ extern int errno;
       }
     }
 
-  if ([self superClass])
-    return [[self superClass] conformsTo: aProtocol];
+  if (parent = [self superClass])
+    return [parent conformsTo: aProtocol];
   else
     return NO;
 }
 
+- (BOOL) conformsTo: (Protocol*)aProtocol
+{
+  return [[self class] conformsTo:aProtocol];
+}
+
 - (IMP)methodFor:(SEL)aSel
 {
   return (method_get_imp(object_is_instance(self)