In libobjc/: 2011-08-06 Nicola Pero <nicola.pero@meta-innovation.com>

In libobjc/:
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.

In gcc/testsuite/:
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.

From-SVN: r177505
This commit is contained in:
Nicola Pero 2011-08-06 09:49:30 +00:00 committed by Nicola Pero
parent cd7c6bc5bf
commit 3f54203792
5 changed files with 31 additions and 7 deletions

View File

@ -1,3 +1,9 @@
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> 2011-08-05 Jason Merrill <jason@redhat.com>
PR c++/48993 PR c++/48993

View File

@ -394,6 +394,14 @@ int main(int argc, void **args)
MySubClass *object = [[MySubClass alloc] init]; MySubClass *object = [[MySubClass alloc] init];
if (class_getSuperclass (object_getClass (object)) != objc_getClass ("MyRootClass")) if (class_getSuperclass (object_getClass (object)) != objc_getClass ("MyRootClass"))
abort (); 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"); printf ("Testing class_getVersion ()...\n");

View File

@ -1,3 +1,10 @@
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> 2011-08-05 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
* Makefile.in (INCLUDES): Search * Makefile.in (INCLUDES): Search

View File

@ -923,10 +923,13 @@ class_getSuperclass (Class class_)
if (class_ == Nil) if (class_ == Nil)
return Nil; return Nil;
/* Classes that are in construction are not resolved and can not be /* Classes that are in construction are not resolved, and still have
resolved! */ 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_)) 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 /* 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 string (the name of the super class) as opposed to the actual

View File

@ -497,10 +497,10 @@ objc_EXPORT const char * class_getName (Class class_);
objc_EXPORT BOOL class_isMetaClass (Class class_); objc_EXPORT BOOL class_isMetaClass (Class class_);
/* Return the superclass of 'class_'. If 'class_' is Nil, or it is a /* Return the superclass of 'class_'. If 'class_' is Nil, or it is a
root class, return Nil. If 'class_' is a class being constructed, root class, return Nil. This function also works if 'class_' is a
that is, a class returned by objc_allocateClassPair() but before it class being constructed, that is, a class returned by
has been registered with the runtime using objc_allocateClassPair() but before it has been registered with the
objc_registerClassPair(), return Nil. */ runtime using objc_registerClassPair(). */
objc_EXPORT Class class_getSuperclass (Class class_); objc_EXPORT Class class_getSuperclass (Class class_);
/* Return the 'version' number of the class, which is an integer that /* Return the 'version' number of the class, which is an integer that