diff options
author | Kresten Krab Thorup <krab@gcc.gnu.org> | 1994-09-07 15:28:04 +0000 |
---|---|---|
committer | Kresten Krab Thorup <krab@gcc.gnu.org> | 1994-09-07 15:28:04 +0000 |
commit | ad4f2e420b73e2b14b92815d3a69e2a166b2ed7e (patch) | |
tree | 9d360bf91257eaf48e03b1734922efdc0a3e3b3e | |
parent | decab89ee4d8a92725c09febfd95e84ca9e8d859 (diff) | |
download | gcc-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.m | 18 |
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) |