diff --git a/ChangeLog b/ChangeLog index 48084a9e3..e00bae68b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2010-12-24 Nicola Pero + + * Source/NSObject.m ([+conformsToProtocol:]): Fixed to iterate + over superclasses. Just calling class_conformsToProtcol() is not + enough as class_conformsToProtocol() does not iterate over + superclasses. + ([-conformsToProtocol:]): Updated. + 2010-12-23 Nicola Pero * configure.ac: Check for objc_setUncaughtExceptionHandler(). diff --git a/Source/NSObject.m b/Source/NSObject.m index 29d4c67e8..fd2a03378 100644 --- a/Source/NSObject.m +++ b/Source/NSObject.m @@ -1298,7 +1298,18 @@ objc_create_block_classes_as_subclasses_of(Class super) __attribute__((weak)); */ + (BOOL) conformsToProtocol: (Protocol*)aProtocol { - return class_conformsToProtocol(self, aProtocol); + Class c; + + /* Iterate over the current class and all the superclasses. */ + for (c = self; c != Nil; c = class_getSuperclass (c)) + { + if (class_conformsToProtocol(c, aProtocol)) + { + return YES; + } + } + + return NO; } /** @@ -1307,7 +1318,7 @@ objc_create_block_classes_as_subclasses_of(Class super) __attribute__((weak)); */ - (BOOL) conformsToProtocol: (Protocol*)aProtocol { - return class_conformsToProtocol([self class], aProtocol); + return [[self class] conformsToProtocol: aProtocol]; } /**