init.c (__objc_send_message_in_list): When setting a new entry in __objc_load_methods use the method IMP as key...
2001-06-06 Richard Frith-Macdonald <rrfm@gnu.org> * init.c (__objc_send_message_in_list): When setting a new entry in __objc_load_methods use the method IMP as key, but check to see if the method is in the hashtable by looking at the IMP also. Also ... call the method after adding it to the hashtable rather than before ... thus preventing an obscure possibility of infinite recursion if a +load method itself loads a subclass. From-SVN: r43052
This commit is contained in:
parent
43fd108f69
commit
e6be21fe87
@ -1,3 +1,12 @@
|
||||
2001-06-06 Richard Frith-Macdonald <rrfm@gnu.org>
|
||||
|
||||
* init.c (__objc_send_message_in_list): When setting a new entry
|
||||
in __objc_load_methods use the method IMP as key, but check to see
|
||||
if the method is in the hashtable by looking at the IMP also.
|
||||
Also ... call the method after adding it to the hashtable rather
|
||||
than before ... thus preventing an obscure possibility of infinite
|
||||
recursion if a +load method itself loads a subclass.
|
||||
|
||||
2001-05-25 Ovidiu Predescu <ovidiu@cup.hp.com>
|
||||
|
||||
* init.c (__objc_send_message_in_list): When setting a new entry
|
||||
|
@ -313,16 +313,16 @@ __objc_send_message_in_list (MethodList_t method_list, Class class, SEL op)
|
||||
Method_t mth = &method_list->method_list[i];
|
||||
|
||||
if (mth->method_name && sel_eq (mth->method_name, op)
|
||||
&& !hash_is_key_in_hash (__objc_load_methods, mth->method_name))
|
||||
&& !hash_is_key_in_hash (__objc_load_methods, mth->method_imp))
|
||||
{
|
||||
/* The method was found and wasn't previously executed. */
|
||||
(*mth->method_imp) ((id)class, mth->method_name);
|
||||
|
||||
/* Add this method into the +load hash table */
|
||||
hash_add (&__objc_load_methods, mth->method_name, mth->method_imp);
|
||||
hash_add (&__objc_load_methods, mth->method_imp, mth->method_imp);
|
||||
|
||||
DEBUG_PRINTF ("sending +load in class: %s\n", class->name);
|
||||
|
||||
/* The method was found and wasn't previously executed. */
|
||||
(*mth->method_imp) ((id)class, mth->method_name);
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user