static VALUE proc_call(VALUE procval, SEL sel, int argc, const VALUE *argv) { #if 0 rb_proc_t *proc; rb_block_t *blockptr = 0; GetProcPtr(procval, proc); if (BUILTIN_TYPE(proc->block.iseq) != T_NODE && proc->block.iseq->arg_block != -1) { if (rb_block_given_p()) { rb_proc_t *proc; VALUE procval; procval = rb_block_proc(); GetProcPtr(procval, proc); blockptr = &proc->block; } } return vm_invoke_proc(GET_THREAD(), proc, proc->block.self, argc, argv, blockptr); #endif rb_vm_block_t *proc; GetProcPtr(procval, proc); return rb_vm_block_eval(proc, argc, argv); }
VALUE rb_proc_call(VALUE self, VALUE args) { rb_proc_t *proc; GetProcPtr(self, proc); return vm_invoke_proc(GET_THREAD(), proc, proc->block.self, RARRAY_LEN(args), RARRAY_PTR(args), 0); }
static void signal_exec(VALUE cmd, int sig) { rb_proc_t *proc; VALUE signum = INT2FIX(sig); GetProcPtr(cmd, proc); vm_invoke_proc(GET_THREAD(), proc, proc->block.self, 1, &signum, 0); }
static void signal_exec(VALUE cmd, int sig) { rb_proc_t *proc; VALUE signum = INT2FIX(sig); if (TYPE(cmd) == T_STRING) { rb_eval_cmd(cmd, rb_ary_new3(1, signum), trap_list[sig].safe); return; } GetProcPtr(cmd, proc); vm_invoke_proc(GET_THREAD(), proc, proc->block.self, 1, &signum, 0); }
VALUE rb_proc_call_with_block(VALUE self, int argc, VALUE *argv, VALUE pass_procval) { rb_proc_t *proc; rb_block_t *block = 0; GetProcPtr(self, proc); if (!NIL_P(pass_procval)) { rb_proc_t *pass_proc; GetProcPtr(pass_procval, pass_proc); block = &pass_proc->block; } return vm_invoke_proc(GET_THREAD(), proc, proc->block.self, argc, argv, block); }
static VALUE proc_call(int argc, VALUE *argv, VALUE procval) { rb_proc_t *proc; rb_block_t *blockptr = 0; GetProcPtr(procval, proc); if (BUILTIN_TYPE(proc->block.iseq) != T_NODE && proc->block.iseq->arg_block != -1) { if (rb_block_given_p()) { rb_proc_t *proc; VALUE procval; procval = rb_block_proc(); GetProcPtr(procval, proc); blockptr = &proc->block; } } return vm_invoke_proc(GET_THREAD(), proc, proc->block.self, argc, argv, blockptr); }
void rb_fiber_start(void) { rb_thread_t *th = GET_THREAD(); rb_context_t *cont; rb_proc_t *proc; VALUE args; int state; GetContPtr(th->fiber, cont); TH_PUSH_TAG(th); if ((state = EXEC_TAG()) == 0) { GetProcPtr(cont->saved_thread.first_proc, proc); args = cont->value; cont->value = Qnil; th->errinfo = Qnil; th->local_lfp = proc->block.lfp; th->local_svar = Qnil; cont->value = vm_invoke_proc(th, proc, proc->block.self, 1, &args, 0); } TH_POP_TAG(); if (state) { if (TAG_RAISE) { th->thrown_errinfo = th->errinfo; } else { th->thrown_errinfo = vm_make_jump_tag_but_local_jump(state, th->errinfo); } RUBY_VM_SET_INTERRUPT(th); } rb_fiber_terminate(cont); rb_bug("rb_fiber_start: unreachable"); }