aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNicola Pero <nicola.pero@meta-innovation.com>2010-12-24 15:32:25 +0000
committerNicola Pero <nicola@gcc.gnu.org>2010-12-24 15:32:25 +0000
commit877bf1953af3383597ad4f76971539e5e05c6d31 (patch)
tree446ade8fb58c3ae9ed224c5430645dbb30deddb2
parenteb277bf19cea73ab2ca031fdb650013d666529f6 (diff)
downloadgcc-877bf1953af3383597ad4f76971539e5e05c6d31.zip
gcc-877bf1953af3383597ad4f76971539e5e05c6d31.tar.gz
gcc-877bf1953af3383597ad4f76971539e5e05c6d31.tar.bz2
In libobjc/: 2010-12-24 Nicola Pero <nicola.pero@meta-innovation.com>
In libobjc/: 2010-12-24 Nicola Pero <nicola.pero@meta-innovation.com> * objc/runtime.h (class_conformsToProtocol, class_copyProtocolList): Updated documentation. In gcc/testsuite/: 2010-12-24 Nicola Pero <nicola.pero@meta-innovation.com> * obj-c.dg/gnu-api-2-class.m: Test that class_conformsToProtocol() does not check the superclasses. * obj-c++.dg/gnu-api-2-class.mm: Same change. From-SVN: r168226
-rw-r--r--gcc/testsuite/ChangeLog6
-rw-r--r--gcc/testsuite/obj-c++.dg/gnu-api-2-class.mm11
-rw-r--r--gcc/testsuite/objc.dg/gnu-api-2-class.m11
-rw-r--r--libobjc/ChangeLog5
-rw-r--r--libobjc/objc/runtime.h10
5 files changed, 41 insertions, 2 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 2cc045b..1324aeb 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,9 @@
+2010-12-24 Nicola Pero <nicola.pero@meta-innovation.com>
+
+ * obj-c.dg/gnu-api-2-class.m: Test that class_conformsToProtocol()
+ does not check the superclasses.
+ * obj-c++.dg/gnu-api-2-class.mm: Same change.
+
2010-12-24 Alexander Monakov <amonakov@ispras.ru>
PR rtl-optimization/47036
diff --git a/gcc/testsuite/obj-c++.dg/gnu-api-2-class.mm b/gcc/testsuite/obj-c++.dg/gnu-api-2-class.mm
index da25663..b86396f 100644
--- a/gcc/testsuite/obj-c++.dg/gnu-api-2-class.mm
+++ b/gcc/testsuite/obj-c++.dg/gnu-api-2-class.mm
@@ -42,6 +42,12 @@
- (id) variable { return variable_ivar; }
@end
+@interface MyOtherSubClass : MySubClass
+@end
+
+@implementation MyOtherSubClass
+@end
+
@interface DifferentClass : MyRootClass
- (id) myClass;
- (id) self;
@@ -188,6 +194,11 @@ int main ()
if (!class_conformsToProtocol (objc_getClass ("MySubClass"), @protocol (MyProtocol)))
abort ();
+
+ /* Test that class_conformsToProtocol checks the class, but not
+ superclasses. */
+ if (class_conformsToProtocol (objc_getClass ("MyOtherSubClass"), @protocol (MyProtocol)))
+ abort ();
}
std::cout << "Testing class_copyIvarList ()...\n";
diff --git a/gcc/testsuite/objc.dg/gnu-api-2-class.m b/gcc/testsuite/objc.dg/gnu-api-2-class.m
index d38d9c2..ff04259 100644
--- a/gcc/testsuite/objc.dg/gnu-api-2-class.m
+++ b/gcc/testsuite/objc.dg/gnu-api-2-class.m
@@ -42,6 +42,12 @@
- (id) variable { return variable_ivar; }
@end
+@interface MyOtherSubClass : MySubClass
+@end
+
+@implementation MyOtherSubClass
+@end
+
@interface DifferentClass : MyRootClass
- (id) myClass;
- (id) self;
@@ -188,6 +194,11 @@ int main(int argc, void **args)
if (!class_conformsToProtocol (objc_getClass ("MySubClass"), @protocol (MyProtocol)))
abort ();
+
+ /* Test that class_conformsToProtocol checks the class, but not
+ superclasses. */
+ if (class_conformsToProtocol (objc_getClass ("MyOtherSubClass"), @protocol (MyProtocol)))
+ abort ();
}
printf ("Testing class_copyIvarList ()...\n");
diff --git a/libobjc/ChangeLog b/libobjc/ChangeLog
index fbeaf3f..78112bd 100644
--- a/libobjc/ChangeLog
+++ b/libobjc/ChangeLog
@@ -1,3 +1,8 @@
+2010-12-24 Nicola Pero <nicola.pero@meta-innovation.com>
+
+ * objc/runtime.h (class_conformsToProtocol,
+ class_copyProtocolList): Updated documentation.
+
2010-12-23 Nicola Pero <nicola.pero@meta-innovation.com>
* init.c (create_tree_of_subclasses_inherited_from): Updated
diff --git a/libobjc/objc/runtime.h b/libobjc/objc/runtime.h
index 8d38015..7ad46dc 100644
--- a/libobjc/objc/runtime.h
+++ b/libobjc/objc/runtime.h
@@ -768,7 +768,11 @@ objc_EXPORT Protocol **objc_copyProtocolList (unsigned int *numberOfReturnedProt
objc_EXPORT BOOL class_addProtocol (Class class_, Protocol *protocol);
/* Return YES if the class 'class_' conforms to Protocol 'protocol',
- and NO if not. */
+ and NO if not. This function does not check superclasses; if you
+ want to check for superclasses (in the way that [NSObject
+ +conformsToProtocol:] does) you need to iterate over the class
+ hierarchy using class_getSuperclass(), and call
+ class_conformsToProtocol() for each of them. */
objc_EXPORT BOOL class_conformsToProtocol (Class class_, Protocol *protocol);
/* Return all the protocols that the class conforms to. The return
@@ -777,7 +781,9 @@ objc_EXPORT BOOL class_conformsToProtocol (Class class_, Protocol *protocol);
class. It does not include protocols adopted by superclasses. The
list is terminated by NULL. Optionally, if you pass a non-NULL
'numberOfReturnedProtocols' pointer, the unsigned int that it
- points to will be filled with the number of protocols returned. */
+ points to will be filled with the number of protocols returned.
+ This function does not return protocols that superclasses conform
+ to. */
objc_EXPORT Protocol **class_copyProtocolList (Class class_, unsigned int *numberOfReturnedProtocols);
/* Return YES if protocol 'protocol' conforms to protocol