In libobjc/: 2010-12-21 Nicola Pero <nicola.pero@meta-innovation.com>
In libobjc/: 2010-12-21 Nicola Pero <nicola.pero@meta-innovation.com> * init.c (_objc_load_callback): Initialize with 0. (__objc_call_callback): Renamed to __objc_call_load_callback. Check _objc_load_callback only once, and if it is not set, return immediately. (objc_send_load): Updated call to __objc_call_callback. From-SVN: r168133
This commit is contained in:
parent
686875c172
commit
1588200e46
@ -1,3 +1,11 @@
|
||||
2010-12-21 Nicola Pero <nicola.pero@meta-innovation.com>
|
||||
|
||||
* init.c (_objc_load_callback): Initialize with 0.
|
||||
(__objc_call_callback): Renamed to __objc_call_load_callback.
|
||||
Check _objc_load_callback only once, and if it is not set, return
|
||||
immediately.
|
||||
(objc_send_load): Updated call to __objc_call_callback.
|
||||
|
||||
2010-12-21 Nicola Pero <nicola.pero@meta-innovation.com>
|
||||
|
||||
PR libobjc/16110
|
||||
|
@ -45,7 +45,8 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
|
||||
#define PROTOCOL_VERSION 2
|
||||
|
||||
/* This list contains modules currently loaded into the runtime and
|
||||
for which the +load method has not been called yet. */
|
||||
for which the +load method (and the load callback, if any) has not
|
||||
been called yet. */
|
||||
static struct objc_list *__objc_module_list = 0; /* !T:MUTEX */
|
||||
|
||||
/* This list contains all proto_list's not yet assigned class
|
||||
@ -84,7 +85,7 @@ static void __objc_init_protocol (struct objc_protocol *protocol);
|
||||
static void __objc_class_add_protocols (Class, struct objc_protocol_list *);
|
||||
|
||||
/* Load callback hook. */
|
||||
void (*_objc_load_callback) (Class class, struct objc_category *category); /* !T:SAFE */
|
||||
void (*_objc_load_callback) (Class class, struct objc_category *category) = 0; /* !T:SAFE */
|
||||
|
||||
/* Are all categories/classes resolved? */
|
||||
BOOL __objc_dangling_categories = NO; /* !T:UNUSED */
|
||||
@ -101,7 +102,9 @@ static void objc_send_load (void);
|
||||
been already received the +load message. */
|
||||
static void __objc_create_classes_tree (struct objc_module *module);
|
||||
|
||||
static void __objc_call_callback (struct objc_module *module);
|
||||
/* Calls the _objc_load_callback for each class and category in the
|
||||
module (if _objc_load_callback is not NULL). */
|
||||
static void __objc_call_load_callback (struct objc_module *module);
|
||||
|
||||
/* A special version that works only before the classes are completely
|
||||
installed in the runtime. */
|
||||
@ -754,7 +757,7 @@ objc_send_load (void)
|
||||
|
||||
/* If we still have classes for whom we don't have yet their
|
||||
super classes known to the runtime we don't send the +load
|
||||
messages yet. */
|
||||
messages (and call the load callback) yet. */
|
||||
if (unresolved_classes)
|
||||
return;
|
||||
}
|
||||
@ -783,7 +786,11 @@ objc_send_load (void)
|
||||
list_remove_head (&__objc_class_tree_list);
|
||||
}
|
||||
|
||||
list_mapcar (__objc_module_list, (void (*) (void *)) __objc_call_callback);
|
||||
/* For each module, call the _objc_load_callback if any is
|
||||
defined. */
|
||||
list_mapcar (__objc_module_list, (void (*) (void *)) __objc_call_load_callback);
|
||||
|
||||
/* Empty the list of modules. */
|
||||
list_free (__objc_module_list);
|
||||
__objc_module_list = NULL;
|
||||
}
|
||||
@ -825,7 +832,9 @@ __objc_create_classes_tree (struct objc_module *module)
|
||||
}
|
||||
|
||||
static void
|
||||
__objc_call_callback (struct objc_module *module)
|
||||
__objc_call_load_callback (struct objc_module *module)
|
||||
{
|
||||
if (_objc_load_callback)
|
||||
{
|
||||
/* The runtime mutex is locked at this point. */
|
||||
struct objc_symtab *symtab = module->symtab;
|
||||
@ -838,22 +847,21 @@ __objc_call_callback (struct objc_module *module)
|
||||
Class class = (Class) symtab->defs[i];
|
||||
|
||||
/* Call the _objc_load_callback for this class. */
|
||||
if (_objc_load_callback)
|
||||
_objc_load_callback (class, 0);
|
||||
}
|
||||
|
||||
/* Call the _objc_load_callback for categories. Don't register the
|
||||
instance methods as class methods for categories to root classes
|
||||
since they were already added in the class. */
|
||||
/* Call the _objc_load_callback for categories. Don't register
|
||||
the instance methods as class methods for categories to root
|
||||
classes since they were already added in the class. */
|
||||
for (i = 0; i < symtab->cat_def_cnt; i++)
|
||||
{
|
||||
struct objc_category *category = symtab->defs[i + symtab->cls_def_cnt];
|
||||
Class class = objc_getClass (category->class_name);
|
||||
|
||||
if (_objc_load_callback)
|
||||
_objc_load_callback (class, category);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Sanity check the version of gcc used to compile `module'. */
|
||||
static void
|
||||
|
Loading…
Reference in New Issue
Block a user