diff options
author | nicola <nicola@138bc75d-0d04-0410-961f-82ee72b054a4> | 2010-12-21 22:17:52 +0000 |
---|---|---|
committer | nicola <nicola@138bc75d-0d04-0410-961f-82ee72b054a4> | 2010-12-21 22:17:52 +0000 |
commit | 84297d8d804abd36de7f0b8dccf8558c8a753183 (patch) | |
tree | 6953b51819100b4f424d3e8b01d2d53566b22f9b | |
parent | a805a149670f87326c51e75a9438e7b6e7280273 (diff) | |
download | gcc-84297d8d804abd36de7f0b8dccf8558c8a753183.tar.gz |
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.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@168133 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r-- | libobjc/ChangeLog | 8 | ||||
-rw-r--r-- | libobjc/init.c | 70 |
2 files changed, 47 insertions, 31 deletions
diff --git a/libobjc/ChangeLog b/libobjc/ChangeLog index 3cebc765202..04243d4e504 100644 --- a/libobjc/ChangeLog +++ b/libobjc/ChangeLog @@ -1,5 +1,13 @@ 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 * init.c (__objc_send_message_in_list): Renamed to __objc_send_load_using_method_list. Do not take an 'op' argument. diff --git a/libobjc/init.c b/libobjc/init.c index d4d7abb4f46..8e60bed97c4 100644 --- a/libobjc/init.c +++ b/libobjc/init.c @@ -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; } @@ -765,7 +768,7 @@ objc_send_load (void) return; /* Iterate over all modules in the __objc_module_list and call on - them the __objc_create_classes_tree function. This function + them the __objc_create_classes_tree function. This function creates a tree of classes that resembles the class hierarchy. */ list_mapcar (__objc_module_list, (void (*) (void *)) __objc_create_classes_tree); @@ -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,33 +832,34 @@ __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) { - /* The runtime mutex is locked at this point. */ - struct objc_symtab *symtab = module->symtab; - int i; - - /* Iterate thru classes defined in this module and call the callback - for each one. */ - for (i = 0; i < symtab->cls_def_cnt; i++) + if (_objc_load_callback) { - 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. */ - 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); + /* The runtime mutex is locked at this point. */ + struct objc_symtab *symtab = module->symtab; + int i; + + /* Iterate thru classes defined in this module and call the callback + for each one. */ + for (i = 0; i < symtab->cls_def_cnt; i++) + { + Class class = (Class) symtab->defs[i]; + + /* Call the _objc_load_callback for this class. */ + _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. */ + 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); + + _objc_load_callback (class, category); + } } } |