aboutsummaryrefslogtreecommitdiffstats
path: root/include/ruby
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2017-04-15 02:09:27 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2017-04-15 02:09:27 +0000
commitba3908ee33b30d63b5e80a800363bdbd1e02bfa1 (patch)
tree46dbee7a4fdfe609699e9b24f733b3041c8330c4 /include/ruby
parent02ec298ad01e65fcc0d6d8fa15e1bbb0e946b6b5 (diff)
downloadruby-ba3908ee33b30d63b5e80a800363bdbd1e02bfa1.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/ruby')
-rw-r--r--include/ruby/ruby.h11
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