aboutsummaryrefslogtreecommitdiff
path: root/libobjc
diff options
context:
space:
mode:
authorshebs <shebs@138bc75d-0d04-0410-961f-82ee72b054a4>2001-06-08 22:19:47 +0000
committershebs <shebs@138bc75d-0d04-0410-961f-82ee72b054a4>2001-06-08 22:19:47 +0000
commitcd7d360ca7315e42b4c609ed3c324f65229a44fd (patch)
treef0c91e12a488c83a75cdce0865034ef7d50e6df6 /libobjc
parent7596910665ed7c7bd1b0a2ccd4971c65bc15e8be (diff)
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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@43052 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libobjc')
-rw-r--r--libobjc/ChangeLog9
-rw-r--r--libobjc/init.c10
2 files changed, 14 insertions, 5 deletions
diff --git a/libobjc/ChangeLog b/libobjc/ChangeLog
index 4558566aedb..ce7f41318b6 100644
--- a/libobjc/ChangeLog
+++ b/libobjc/ChangeLog
@@ -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
diff --git a/libobjc/init.c b/libobjc/init.c
index d50dba026d3..29ce6393eb7 100644
--- a/libobjc/init.c
+++ b/libobjc/init.c
@@ -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;
}
}