diff options
-rw-r--r-- | ChangeLog | 7 | ||||
-rw-r--r-- | insns.def | 6 | ||||
-rw-r--r-- | vm_insnhelper.c | 4 |
3 files changed, 12 insertions, 5 deletions
@@ -1,3 +1,10 @@ +Tue Nov 17 16:26:24 2009 Nobuyoshi Nakada <nobu@ruby-lang.org> + + * insns.def (opt_case_dispatch): runtime value cannot be used as + an element initializer. + + * vm_insnhelper.c (opt_case_dispatch_i): gets rid of type-punning + calls. Mon Nov 16 15:51:53 2009 Shugo Maeda <shugo@ruby-lang.org> * vm_insnhelper.c (vm_call_method): protected singleton methods of @@ -1247,10 +1247,10 @@ opt_case_dispatch } } else { - struct opt_case_dispatch_i_arg arg = { - key, -1 - }; + struct opt_case_dispatch_i_arg arg; + arg.obj = key; + arg.label = -1; st_foreach(RHASH_TBL(hash), opt_case_dispatch_i, (st_data_t)&arg); if (arg.label != -1) { diff --git a/vm_insnhelper.c b/vm_insnhelper.c index 3654e39890..a05574f1db 100644 --- a/vm_insnhelper.c +++ b/vm_insnhelper.c @@ -1645,9 +1645,9 @@ struct opt_case_dispatch_i_arg { }; static int -opt_case_dispatch_i(st_data_t key, st_data_t data, void *p) +opt_case_dispatch_i(st_data_t key, st_data_t data, st_data_t p) { - struct opt_case_dispatch_i_arg *arg = p; + struct opt_case_dispatch_i_arg *arg = (void *)p; if (RTEST(rb_funcall((VALUE)key, idEqq, 1, arg->obj))) { arg->label = FIX2INT((VALUE)data); |