drop-in type check for rb_define_global_function

We can check the function pointer passed to rb_define_global_function
like we do so in rb_define_method.  It turns out that almost anybody
is misunderstanding the API.
This commit is contained in:
卜部昌平 2019-08-28 18:19:11 +09:00
parent 7b6fde4258
commit 7bcfd9189a
13 changed files with 140 additions and 38 deletions

8
ruby.c
View file

@ -1484,7 +1484,7 @@ uscore_get(void)
*/
static VALUE
rb_f_sub(int argc, VALUE *argv)
rb_f_sub(int argc, VALUE *argv, VALUE _)
{
VALUE str = rb_funcall_passing_block(uscore_get(), rb_intern("sub"), argc, argv);
rb_lastline_set(str);
@ -1503,7 +1503,7 @@ rb_f_sub(int argc, VALUE *argv)
*/
static VALUE
rb_f_gsub(int argc, VALUE *argv)
rb_f_gsub(int argc, VALUE *argv, VALUE _)
{
VALUE str = rb_funcall_passing_block(uscore_get(), rb_intern("gsub"), argc, argv);
rb_lastline_set(str);
@ -1521,7 +1521,7 @@ rb_f_gsub(int argc, VALUE *argv)
*/
static VALUE
rb_f_chop(void)
rb_f_chop(VALUE _)
{
VALUE str = rb_funcall_passing_block(uscore_get(), rb_intern("chop"), 0, 0);
rb_lastline_set(str);
@ -1541,7 +1541,7 @@ rb_f_chop(void)
*/
static VALUE
rb_f_chomp(int argc, VALUE *argv)
rb_f_chomp(int argc, VALUE *argv, VALUE _)
{
VALUE str = rb_funcall_passing_block(uscore_get(), rb_intern("chomp"), argc, argv);
rb_lastline_set(str);