diff options
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); } |