+2011-08-06 Nicola Pero <nicola.pero@meta-innovation.com>
+
+ PR libobjc/49882
+ * objc.dg/gnu-api-2-class.m (main): Test class_getSuperclass()
+ with classes that are in construction.
+
2011-08-05 Jason Merrill <jason@redhat.com>
PR c++/48993
MySubClass *object = [[MySubClass alloc] init];
if (class_getSuperclass (object_getClass (object)) != objc_getClass ("MyRootClass"))
abort ();
+
+ /* Test that it works on a newly created, but not registered, class. */
+ {
+ Class new_class = objc_allocateClassPair (objc_getClass ("MyRootClass"), "MySubClass3", 0);
+
+ if (class_getSuperclass (new_class) != objc_getClass ("MyRootClass"))
+ abort ();
+ }
}
printf ("Testing class_getVersion ()...\n");
+2011-08-06 Nicola Pero <nicola.pero@meta-innovation.com>
+
+ PR libobjc/49882
+ * class.c (class_getSuperclass): Return the superclass if the
+ class is in construction.
+ * objc/runtime.h (class_getSuperclass): Updated documentation.
+
2011-08-05 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
* Makefile.in (INCLUDES): Search
if (class_ == Nil)
return Nil;
- /* Classes that are in construction are not resolved and can not be
- resolved! */
+ /* Classes that are in construction are not resolved, and still have
+ the class name (instead of a class pointer) in the
+ class_->superclass field. In that case we need to lookup the
+ superclass name to return the superclass. We can not resolve the
+ class until it is registered. */
if (CLS_IS_IN_CONSTRUCTION (class_))
- return Nil;
+ return objc_lookUpClass ((const char *)(class_->super_class));
/* If the class is not resolved yet, super_class would point to a
string (the name of the super class) as opposed to the actual
objc_EXPORT BOOL class_isMetaClass (Class class_);
/* Return the superclass of 'class_'. If 'class_' is Nil, or it is a
- root class, return Nil. If 'class_' is a class being constructed,
- that is, a class returned by objc_allocateClassPair() but before it
- has been registered with the runtime using
- objc_registerClassPair(), return Nil. */
+ root class, return Nil. This function also works if 'class_' is a
+ class being constructed, that is, a class returned by
+ objc_allocateClassPair() but before it has been registered with the
+ runtime using objc_registerClassPair(). */
objc_EXPORT Class class_getSuperclass (Class class_);
/* Return the 'version' number of the class, which is an integer that