]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
In libobjc/: 2010-12-19 Nicola Pero <nicola.pero@meta-innovation.com>
authorNicola Pero <nicola.pero@meta-innovation.com>
Sun, 19 Dec 2010 17:30:30 +0000 (17:30 +0000)
committerNicola Pero <nicola@gcc.gnu.org>
Sun, 19 Dec 2010 17:30:30 +0000 (17:30 +0000)
In libobjc/:
2010-12-19  Nicola Pero  <nicola.pero@meta-innovation.com>

* init.c (__objc_exec_class): Call __objc_resolve_class_links (),
if appropriate, after loading the module.

From-SVN: r168065

libobjc/ChangeLog
libobjc/init.c

index 837d24147a28ee74a836078c660a43c6ad05b0f4..11c97ff254381d1aac3d5abe07b47fd9457693c2 100644 (file)
@@ -1,3 +1,8 @@
+2010-12-19  Nicola Pero  <nicola.pero@meta-innovation.com>
+
+       * init.c (__objc_exec_class): Call __objc_resolve_class_links (),
+       if appropriate, after loading the module.
+
 2010-12-19  Nicola Pero  <nicola.pero@meta-innovation.com>
 
        * sendmsg.c (method_setImplementation): Do not declare.
index a282d5ef70d3467a4ee955373698d8ef41876ca9..f1eb83ab1d2ba0044325c628c4c29dc2006220db 100644 (file)
@@ -31,7 +31,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 #include "objc-private/hash.h"
 #include "objc-private/objc-list.h" 
 #include "objc-private/module-abi-8.h" 
-#include "objc-private/runtime.h"
+#include "objc-private/runtime.h"   /* For __objc_resolve_class_links().  */
 #include "objc-private/selector.h"  /* For __sel_register_typed_name().  */
 #include "objc-private/objc-sync.h" /* For __objc_sync_init() */
 #include "objc-private/protocols.h" /* For __objc_protocols_init(),
@@ -719,11 +719,15 @@ __objc_exec_class (struct objc_module *module)
 
   objc_send_load ();
 
-  objc_mutex_unlock (__objc_runtime_mutex);
+  /* Check if there are no unresolved classes (ie, classes whose
+     superclass has not been loaded yet) and that the 'Object' class,
+     used as the class of classes, exist.  If so, it is worth
+     "resolving the class links" at this point, which will setup all
+     the class/superclass pointers.  */
+  if (!unresolved_classes && objc_getClass ("Object"))
+    __objc_resolve_class_links ();
 
-  /* TODO: Do we need to add a call to __objc_resolve_class_links()
-     here ?  gnustep-base does it manually after it loads a module.
-     Shouldn't we do it automatically ?  */
+  objc_mutex_unlock (__objc_runtime_mutex);
 }
 
 static void