summaryrefslogtreecommitdiff
path: root/libobjc/init.c
diff options
context:
space:
mode:
authorNicola Pero <nicola.pero@meta-innovation.com>2010-12-19 17:30:30 +0000
committerNicola Pero <nicola@gcc.gnu.org>2010-12-19 17:30:30 +0000
commit41720477ab9a511dbb838bf6595cb5b6fe1c89f0 (patch)
tree8a729455584511e4fded7e7339114081d64658f4 /libobjc/init.c
parent5f38ced19a143968e9aedd7c9d1a8292cb7362b9 (diff)
downloadgcc-41720477ab9a511dbb838bf6595cb5b6fe1c89f0.tar.gz
In libobjc/: 2010-12-19 Nicola Pero <nicola.pero@meta-innovation.com>
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
Diffstat (limited to 'libobjc/init.c')
-rw-r--r--libobjc/init.c14
1 files changed, 9 insertions, 5 deletions
diff --git a/libobjc/init.c b/libobjc/init.c
index a282d5ef70d..f1eb83ab1d2 100644
--- a/libobjc/init.c
+++ b/libobjc/init.c
@@ -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