aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKresten Krab Thorup <krab@gcc.gnu.org>1994-09-07 15:28:04 +0000
committerKresten Krab Thorup <krab@gcc.gnu.org>1994-09-07 15:28:04 +0000
commitad4f2e420b73e2b14b92815d3a69e2a166b2ed7e (patch)
tree9d360bf91257eaf48e03b1734922efdc0a3e3b3e
parentdecab89ee4d8a92725c09febfd95e84ca9e8d859 (diff)
downloadgcc-ad4f2e420b73e2b14b92815d3a69e2a166b2ed7e.zip
gcc-ad4f2e420b73e2b14b92815d3a69e2a166b2ed7e.tar.gz
gcc-ad4f2e420b73e2b14b92815d3a69e2a166b2ed7e.tar.bz2
(conformsTo:): Change implementati to allways use class to do lookup.
From-SVN: r8030
-rw-r--r--gcc/objc/Object.m18
1 files changed, 14 insertions, 4 deletions
diff --git a/gcc/objc/Object.m b/gcc/objc/Object.m
index 040df86..1716d1d 100644
--- a/gcc/objc/Object.m
+++ b/gcc/objc/Object.m
@@ -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)