diff options
author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2017-04-15 02:09:27 +0000 |
---|---|---|
committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2017-04-15 02:09:27 +0000 |
commit | 0472578b26793e45434769200a806cb6190e5700 (patch) | |
tree | 46dbee7a4fdfe609699e9b24f733b3041c8330c4 /include | |
parent | 6f1fbfd6187db01e3c3967468cc8b182fc8ca847 (diff) | |
download | ruby-0472578b26793e45434769200a806cb6190e5700.tar.gz |
ruby.h: check argc to rb_funcall
* include/ruby/ruby.h (rb_funcall): check if argc matches the
number of variadic arguments, and replace with rb_funcallv.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@58362 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'include')
-rw-r--r-- | include/ruby/ruby.h | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/include/ruby/ruby.h b/include/ruby/ruby.h index 9cf0b4c6b0..0b277dce19 100644 --- a/include/ruby/ruby.h +++ b/include/ruby/ruby.h @@ -2450,6 +2450,17 @@ __extension__({ \ rb_varargs_argc_check(rb_yield_values_argc, rb_yield_values_nargs), \ rb_yield_values_args); \ }) + +# define rb_funcall(recv, mid, argc, ...) \ +__extension__({ \ + const int rb_funcall_argc = (argc); \ + const VALUE rb_funcall_args[] = {__VA_ARGS__}; \ + const int rb_funcall_nargs = \ + (int)(sizeof(rb_funcall_args) / sizeof(VALUE)); \ + rb_funcallv(recv, mid, \ + rb_varargs_argc_check(rb_funcall_argc, rb_funcall_nargs), \ + rb_funcall_args); \ + }) #endif #ifndef RUBY_DONT_SUBST |