diff options
author | 卜部昌平 <shyouhei@ruby-lang.org> | 2019-08-26 15:20:15 +0900 |
---|---|---|
committer | 卜部昌平 <shyouhei@ruby-lang.org> | 2019-08-27 15:52:26 +0900 |
commit | 703783324c16b8b2b50210d1a7d1119902abbb8b (patch) | |
tree | d594ba9029a1ddcee223fcb2f39be07ef20daca1 /cont.c | |
parent | 5c7c2d9951f2512ca10ea38fecc48d8ac67502e6 (diff) | |
download | ruby-703783324c16b8b2b50210d1a7d1119902abbb8b.tar.gz |
rb_ensure now free from ANYARGS
After 5e86b005c0f2ef30df2f9906c7e2f3abefe286a2, I now think ANYARGS is
dangerous and should be extinct. This commit deletes ANYARGS from
rb_ensure, which also revealed many arity / type mismatches.
Diffstat (limited to 'cont.c')
-rw-r--r-- | cont.c | 16 |
1 files changed, 9 insertions, 7 deletions
@@ -1505,10 +1505,12 @@ make_passing_arg(int argc, const VALUE *argv) } } +typedef VALUE e_proc(VALUE); + /* CAUTION!! : Currently, error in rollback_func is not supported */ /* same as rb_protect if set rollback_func to NULL */ void -ruby_register_rollback_func_for_ensure(VALUE (*ensure_func)(ANYARGS), VALUE (*rollback_func)(ANYARGS)) +ruby_register_rollback_func_for_ensure(e_proc *ensure_func, e_proc *rollback_func) { st_table **table_p = &GET_VM()->ensure_rollback_table; if (UNLIKELY(*table_p == NULL)) { @@ -1517,14 +1519,14 @@ ruby_register_rollback_func_for_ensure(VALUE (*ensure_func)(ANYARGS), VALUE (*ro st_insert(*table_p, (st_data_t)ensure_func, (st_data_t)rollback_func); } -static inline VALUE -lookup_rollback_func(VALUE (*ensure_func)(ANYARGS)) +static inline e_proc * +lookup_rollback_func(e_proc *ensure_func) { st_table *table = GET_VM()->ensure_rollback_table; st_data_t val; if (table && st_lookup(table, (st_data_t)ensure_func, &val)) - return (VALUE) val; - return Qundef; + return (e_proc *) val; + return (e_proc *) Qundef; } @@ -1537,7 +1539,7 @@ rollback_ensure_stack(VALUE self,rb_ensure_list_t *current,rb_ensure_entry_t *ta size_t cur_size; size_t target_size; size_t base_point; - VALUE (*func)(ANYARGS); + e_proc *func; cur_size = 0; for (p=current; p; p=p->next) @@ -1572,7 +1574,7 @@ rollback_ensure_stack(VALUE self,rb_ensure_list_t *current,rb_ensure_entry_t *ta } /* push ensure stack */ for (j = 0; j < i; j++) { - func = (VALUE (*)(ANYARGS)) lookup_rollback_func(target[i - j - 1].e_proc); + func = lookup_rollback_func(target[i - j - 1].e_proc); if ((VALUE)func != Qundef) { (*func)(target[i - j - 1].data2); } |