diff options
author | ko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2012-10-19 10:38:30 +0000 |
---|---|---|
committer | ko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2012-10-19 10:38:30 +0000 |
commit | f4dbc7a3849988ebe75d3e1031aa50441347c497 (patch) | |
tree | 9750044142c879b0abc569e92dedaeeee5158d12 /method.h | |
parent | 0fc7f4bb304ad07e8172f868d885112a1dcceb0f (diff) | |
download | ruby-f4dbc7a3849988ebe75d3e1031aa50441347c497.tar.gz |
* method.h (rb_method_cfunc_t::invoker): add new field (func ptr)
`invoker'. `invoker' function invoke cfunc body
(rb_method_cfunc_t::func).
`invoker' is set at method definition timing.
With this change, the big `switch' (branch) in `call_cfunc()'
is no longer needed.
However, the performance benefit is only a bit.
* vm_core.h (rb_call_info_t::aux::func): add a new field to store
cfunc body function pointer.
* vm_method.c (call_cfunc_invoker_func): add a new function which
returns a suitable invoke function.
* vm_method.c (setup_method_cfunc_struct): added.
* vm_method.c (rb_add_method): fix to set `invoker'.
* vm_eval.c (vm_call0_body): catch up above changes.
* vm_insnhelper.c (call_cfunc): removed.
* vm_insnhelper.c (vm_call_cfunc): fix to call cfunc body
with `invoker' function.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@37268 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'method.h')
-rw-r--r-- | method.h | 3 |
1 files changed, 3 insertions, 0 deletions
@@ -45,8 +45,11 @@ typedef enum { VM_METHOD_TYPE_CFUNC_FRAMELESS } rb_method_type_t; +struct rb_call_info_struct; + typedef struct rb_method_cfunc_struct { VALUE (*func)(ANYARGS); + VALUE (*invoker)(const struct rb_call_info_struct *ci, const VALUE *argv); int argc; } rb_method_cfunc_t; |