VALUE rb_proc_call(VALUE self, VALUE args) { #if 0 rb_proc_t *proc; GetProcPtr(self, proc); return vm_invoke_proc(GET_THREAD(), proc, proc->block.self, RARRAY_LEN(args), RARRAY_PTR(args), 0); #endif return proc_call(self, 0, RARRAY_LEN(args), RARRAY_PTR(args)); }
VALUE rb_proc_check_and_call(VALUE proc, int argc, VALUE *argv) { VALUE tmp = rb_check_convert_type(proc, T_DATA, "Proc", "to_proc"); if (NIL_P(tmp)) { rb_raise(rb_eTypeError, "wrong type %s (expected Proc)", rb_obj_classname(proc)); } proc = tmp; const int arity = rb_proc_arity(proc); if (arity != argc) { rb_raise(rb_eArgError, "expected Proc with %d arguments (got %d)", argc, arity); } return proc_call(proc, 0, argc, argv); }
void signal_send(proc_t *proc,int sig) { if (sig==SIGCONT) proc_wake(proc); // wake process even if it has no signal handler for it if (proc->signal!=NULL) proc_call(proc,proc->signal,1,sig); }
static VALUE enumerator_iter_i(VALUE i, VALUE enum_obj, int argc, VALUE *argv) { struct enumerator *e = (struct enumerator *)enum_obj; return rb_yield(proc_call(e->proc, i)); }
VALUE rb_proc_call2(VALUE self, int argc, VALUE *argv) { return proc_call(self, 0, argc, argv); }