From 7329b3339adab12092056bd8159513645d4f9e8a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8D=9C=E9=83=A8=E6=98=8C=E5=B9=B3?= Date: Mon, 26 Aug 2019 13:30:04 +0900 Subject: #define RB_BLOCK_CALL_FUNC_STRICT 1 After 5e86b005c0f2ef30df2f9906c7e2f3abefe286a2, I now think ANYARGS is dangerous and should be extinct. Let's start from making rb_block_call_func_t strict, and apply RB_BLOCK_CALL_FUNC_ARGLIST liberally. --- enum.c | 4 ++-- enumerator.c | 6 +++--- include/ruby/ruby.h | 6 +----- 3 files changed, 6 insertions(+), 10 deletions(-) diff --git a/enum.c b/enum.c index bae32cb045..665c97ffbe 100644 --- a/enum.c +++ b/enum.c @@ -1535,7 +1535,7 @@ nmin_filter(struct nmin_data *data) } static VALUE -nmin_i(VALUE i, VALUE *_data, int argc, VALUE *argv) +nmin_i(RB_BLOCK_CALL_FUNC_ARGLIST(i, _data)) { struct nmin_data *data = (struct nmin_data *)_data; VALUE cmpv; @@ -1595,7 +1595,7 @@ rb_nmin_run(VALUE obj, VALUE num, int by, int rev, int ary) for (i = 0; i < RARRAY_LEN(obj); i++) { VALUE args[1]; args[0] = RARRAY_AREF(obj, i); - nmin_i(obj, (VALUE*)&data, 1, args); + nmin_i(obj, (VALUE)&data, 1, args, Qundef); } } else { diff --git a/enumerator.c b/enumerator.c index 6a2443fcaf..beea1c728f 100644 --- a/enumerator.c +++ b/enumerator.c @@ -1567,7 +1567,7 @@ lazy_init_block_i(RB_BLOCK_CALL_FUNC_ARGLIST(val, m)) #define LAZY_MEMO_RESET_PACKED(memo) ((memo)->memo_flags &= ~LAZY_MEMO_PACKED) static VALUE -lazy_init_yielder(VALUE val, VALUE m, int argc, VALUE *argv) +lazy_init_yielder(RB_BLOCK_CALL_FUNC_ARGLIST(_, m)) { VALUE yielder = RARRAY_AREF(m, 0); VALUE procs_array = RARRAY_AREF(m, 1); @@ -1598,7 +1598,7 @@ lazy_init_yielder(VALUE val, VALUE m, int argc, VALUE *argv) } static VALUE -lazy_init_block(VALUE val, VALUE m, int argc, VALUE *argv) +lazy_init_block(RB_BLOCK_CALL_FUNC_ARGLIST(val, m)) { VALUE procs = RARRAY_AREF(m, 1); @@ -2860,7 +2860,7 @@ enum_chain_enum_size(VALUE obj, VALUE args, VALUE eobj) } static VALUE -enum_chain_yield_block(VALUE arg, VALUE block, int argc, VALUE *argv) +enum_chain_yield_block(RB_BLOCK_CALL_FUNC_ARGLIST(_, block)) { return rb_funcallv(block, id_call, argc, argv); } diff --git a/include/ruby/ruby.h b/include/ruby/ruby.h index 1bb4671c54..cf065e974e 100644 --- a/include/ruby/ruby.h +++ b/include/ruby/ruby.h @@ -1949,16 +1949,12 @@ PRINTF_ARGS(void rb_sys_warning(const char*, ...), 1, 2); COLDFUNC PRINTF_ARGS(void rb_warn(const char*, ...), 1, 2); PRINTF_ARGS(void rb_compile_warn(const char *, int, const char*, ...), 3, 4); +#define RB_BLOCK_CALL_FUNC_STRICT 1 #define RUBY_BLOCK_CALL_FUNC_TAKES_BLOCKARG 1 #define RB_BLOCK_CALL_FUNC_ARGLIST(yielded_arg, callback_arg) \ VALUE yielded_arg, VALUE callback_arg, int argc, const VALUE *argv, VALUE blockarg typedef VALUE rb_block_call_func(RB_BLOCK_CALL_FUNC_ARGLIST(yielded_arg, callback_arg)); - -#if defined RB_BLOCK_CALL_FUNC_STRICT && RB_BLOCK_CALL_FUNC_STRICT typedef rb_block_call_func *rb_block_call_func_t; -#else -typedef VALUE (*rb_block_call_func_t)(ANYARGS); -#endif VALUE rb_each(VALUE); VALUE rb_yield(VALUE); -- cgit v1.2.3