Lines Matching refs:th

25 static rb_control_frame_t *vm_get_ruby_level_caller_cfp(rb_thread_t *th, rb_control_frame_t *cfp);
34 vm_push_frame(rb_thread_t *th,
45 rb_control_frame_t *const cfp = th->cfp - 1;
52 th->cfp = cfp;
83 if (RUBY_VM_CONTROL_FRAME_STACK_OVERFLOW_P(th, prev_cfp)) {
99 vm_pop_frame(rb_thread_t *th)
101 th->cfp = RUBY_VM_PREVIOUS_CONTROL_FRAME(th->cfp);
172 lep_svar_place(rb_thread_t *th, VALUE *lep)
176 if (lep && th->root_lep != lep) {
180 svar = &th->root_svar;
189 lep_svar_get(rb_thread_t *th, VALUE *lep, rb_num_t key)
191 NODE *svar = lep_svar_place(th, lep);
212 lep_svar_set(rb_thread_t *th, VALUE *lep, rb_num_t key, VALUE val)
214 NODE *svar = lep_svar_place(th, lep);
235 vm_getspecial(rb_thread_t *th, VALUE *lep, rb_num_t key, rb_num_t type)
240 val = lep_svar_get(th, lep, key);
243 VALUE backref = lep_svar_get(th, lep, 1);
297 vm_cref_push(rb_thread_t *th, VALUE klass, int noex, rb_block_t *blockptr)
299 rb_control_frame_t *cfp = vm_get_ruby_level_caller_cfp(th, th->cfp);
378 vm_get_ev_const(rb_thread_t *th, const rb_iseq_t *iseq,
385 const NODE *root_cref = rb_vm_get_cref(iseq, th->cfp->ep);
431 klass = vm_get_iclass(th->cfp, root_cref->nd_clss);
434 klass = CLASS_OF(th->cfp->self);
611 vm_throw(rb_thread_t *th, rb_control_frame_t *reg_cfp,
640 while ((VALUE *) cfp < th->stack + th->stack_size) {
658 while ((VALUE *)cfp < th->stack + th->stack_size) {
706 while ((VALUE *) cfp < th->stack + th->stack_size) {
756 th->state = state;
764 th->state = FIX2INT(err);
767 th->state = TAG_THROW;
770 th->state = GET_THROWOBJ_STATE(err);
773 th->state = TAG_RAISE;
774 /*th->state = FIX2INT(rb_ivar_get(err, idThrowState));*/
840 static VALUE vm_call_general(rb_thread_t *th, rb_control_frame_t *reg_cfp, rb_call_info_t *ci);
1012 vm_caller_setup_args(const rb_thread_t *th, rb_control_frame_t *cfp, rb_call_info_t *ci)
1138 vm_callee_setup_arg_complex(rb_thread_t *th, rb_call_info_t *ci, const rb_iseq_t *iseq, VALUE *orig_argv)
1150 th->mark_stack_len = argc + iseq->arg_size;
1214 blockval = rb_vm_make_proc(th, blockptr, rb_cProc);
1226 th->mark_stack_len = 0;
1230 static VALUE vm_call_iseq_setup_2(rb_thread_t *th, rb_control_frame_t *cfp, rb_call_info_t *ci);
1231 static inline VALUE vm_call_iseq_setup_normal(rb_thread_t *th, rb_control_frame_t *cfp, rb_call_info_t *ci);
1232 static inline VALUE vm_call_iseq_setup_tailcall(rb_thread_t *th, rb_control_frame_t *cfp, rb_call_info_t *ci);
1235 vm_callee_setup_arg(rb_thread_t *th, rb_call_info_t *ci, const rb_iseq_t *iseq,
1253 ci->aux.opt_pc = vm_callee_setup_arg_complex(th, ci, iseq, argv);
1258 vm_call_iseq_setup(rb_thread_t *th, rb_control_frame_t *cfp, rb_call_info_t *ci)
1260 vm_callee_setup_arg(th, ci, ci->me->def->body.iseq, cfp->sp - ci->argc, 0);
1261 return vm_call_iseq_setup_2(th, cfp, ci);
1265 vm_call_iseq_setup_2(rb_thread_t *th, rb_control_frame_t *cfp, rb_call_info_t *ci)
1268 return vm_call_iseq_setup_normal(th, cfp, ci);
1271 return vm_call_iseq_setup_tailcall(th, cfp, ci);
1276 vm_call_iseq_setup_normal(rb_thread_t *th, rb_control_frame_t *cfp, rb_call_info_t *ci)
1290 vm_push_frame(th, iseq, VM_FRAME_MAGIC_METHOD, ci->recv, ci->defined_class,
1299 vm_call_iseq_setup_tailcall(rb_thread_t *th, rb_control_frame_t *cfp, rb_call_info_t *ci)
1308 cfp = th->cfp = RUBY_VM_PREVIOUS_CONTROL_FRAME(th->cfp); /* pop cf */
1311 RUBY_VM_CHECK_INTS(th);
1329 vm_push_frame(th, iseq, VM_FRAME_MAGIC_METHOD | finish_flag,
1467 vm_call_cfunc_with_frame(rb_thread_t *th, rb_control_frame_t *reg_cfp, rb_call_info_t *ci)
1480 RUBY_DTRACE_CMETHOD_ENTRY_HOOK(th, me->klass, me->called_id);
1481 EXEC_EVENT_HOOK(th, RUBY_EVENT_C_CALL, recv, me->called_id, me->klass, Qundef);
1483 vm_push_frame(th, 0, VM_FRAME_MAGIC_CFUNC, recv, defined_class,
1484 VM_ENVVAL_BLOCK_PTR(blockptr), 0, th->cfp->sp, 1, me);
1492 if (reg_cfp != th->cfp + 1) {
1496 vm_pop_frame(th);
1498 EXEC_EVENT_HOOK(th, RUBY_EVENT_C_RETURN, recv, me->called_id, me->klass, val);
1499 RUBY_DTRACE_CMETHOD_RETURN_HOOK(th, me->klass, me->called_id);
1506 vm_call_cfunc_latter(rb_thread_t *th, rb_control_frame_t *reg_cfp, rb_call_info_t *ci)
1513 th->passed_ci = ci;
1520 if (reg_cfp == th->cfp) { /* no frame push */
1521 if (UNLIKELY(th->passed_ci != ci)) {
1522 rb_bug("vm_call_cfunc_latter: passed_ci error (ci: %p, passed_ci: %p)", ci, th->passed_ci);
1524 th->passed_ci = 0;
1527 if (UNLIKELY(reg_cfp != RUBY_VM_PREVIOUS_CONTROL_FRAME(th->cfp))) {
1528 rb_bug("vm_call_cfunc_latter: cfp consistency error (%p, %p)", reg_cfp, th->cfp+1);
1530 vm_pop_frame(th);
1538 vm_call_cfunc(rb_thread_t *th, rb_control_frame_t *reg_cfp, rb_call_info_t *ci)
1547 RUBY_DTRACE_CMETHOD_ENTRY_HOOK(th, me->klass, me->called_id);
1548 EXEC_EVENT_HOOK(th, RUBY_EVENT_C_CALL, recv, me->called_id, me->klass, Qnil);
1554 val = vm_call_cfunc_latter(th, reg_cfp, ci);
1556 EXEC_EVENT_HOOK(th, RUBY_EVENT_C_RETURN, recv, me->called_id, me->klass, val);
1557 RUBY_DTRACE_CMETHOD_RETURN_HOOK(th, me->klass, me->called_id);
1563 vm_call_cfunc_push_frame(rb_thread_t *th)
1565 rb_call_info_t *ci = th->passed_ci;
1567 th->passed_ci = 0;
1569 vm_push_frame(th, 0, VM_FRAME_MAGIC_CFUNC, ci->recv, ci->defined_class,
1570 VM_ENVVAL_BLOCK_PTR(ci->blockptr), 0, th->cfp->sp + ci->aux.inc_sp, 1, me);
1578 vm_call_cfunc(rb_thread_t *th, rb_control_frame_t *reg_cfp, rb_call_info_t *ci)
1580 return vm_call_cfunc_with_frame(th, reg_cfp, ci);
1585 vm_call_ivar(rb_thread_t *th, rb_control_frame_t *cfp, rb_call_info_t *ci)
1593 vm_call_attrset(rb_thread_t *th, rb_control_frame_t *cfp, rb_call_info_t *ci)
1601 vm_call_bmethod_body(rb_thread_t *th, rb_call_info_t *ci, const VALUE *argv)
1606 RUBY_DTRACE_METHOD_ENTRY_HOOK(th, ci->me->klass, ci->me->called_id);
1607 EXEC_EVENT_HOOK(th, RUBY_EVENT_CALL, ci->recv, ci->me->called_id, ci->me->klass, Qnil);
1610 th->passed_me = ci->me;
1612 val = vm_invoke_proc(th, proc, ci->recv, ci->defined_class, ci->argc, argv, ci->blockptr);
1614 EXEC_EVENT_HOOK(th, RUBY_EVENT_RETURN, ci->recv, ci->me->called_id, ci->me->klass, val);
1615 RUBY_DTRACE_METHOD_RETURN_HOOK(th, ci->me->klass, ci->me->called_id);
1621 vm_call_bmethod(rb_thread_t *th, rb_control_frame_t *cfp, rb_call_info_t *ci)
1627 return vm_call_bmethod_body(th, ci, argv);
1636 VALUE vm_call_method(rb_thread_t *th, rb_control_frame_t *cfp, rb_call_info_t *ci);
1639 vm_call_opt_send(rb_thread_t *th, rb_control_frame_t *reg_cfp, rb_call_info_t *ci)
1677 return vm_call_method(th, reg_cfp, ci);
1681 vm_call_opt_call(rb_thread_t *th, rb_control_frame_t *cfp, rb_call_info_t *ci)
1690 return rb_vm_invoke_proc(th, proc, argc, argv, ci->blockptr);
1694 vm_call_method_missing(rb_thread_t *th, rb_control_frame_t *reg_cfp, rb_call_info_t *ci)
1714 th->method_missing_reason = ci->aux.missing_reason;
1715 return vm_call_method(th, reg_cfp, &ci_entry);
1728 static VALUE vm_call_super_method(rb_thread_t *th, rb_control_frame_t *reg_cfp, rb_call_info_t *ci);
1731 current_method_entry(rb_thread_t *th, rb_control_frame_t *cfp)
1739 if (RUBY_VM_CONTROL_FRAME_STACK_OVERFLOW_P(th, cfp)) {
1755 vm_call_method(rb_thread_t *th, rb_control_frame_t *cfp, rb_call_info_t *ci)
1769 return vm_call_iseq_setup(th, cfp, ci);
1774 return vm_call_cfunc(th, cfp, ci);
1779 return vm_call_attrset(th, cfp, ci);
1785 return vm_call_ivar(th, cfp, ci);
1790 return vm_call_method_missing(th, cfp, ci);
1794 return vm_call_bmethod(th, cfp, ci);
1817 return vm_call_opt_send(th, cfp, ci);
1820 return vm_call_opt_call(th, cfp, ci);
1843 rb_control_frame_t *top_cfp = current_method_entry(th, cfp);
1882 return vm_call_method_missing(th, cfp, ci);
1888 return vm_call_method_missing(th, cfp, ci);
1894 else if ((noex_safe = NOEX_SAFE(ci->me->flag)) > th->safe_level && (noex_safe > 2)) {
1914 rb_raise_method_missing(th, ci->argc, argv, ci->recv, stat);
1919 return vm_call_method_missing(th, cfp, ci);
1927 vm_call_general(rb_thread_t *th, rb_control_frame_t *reg_cfp, rb_call_info_t *ci)
1929 return vm_call_method(th, reg_cfp, ci);
1933 vm_call_super_method(rb_thread_t *th, rb_control_frame_t *reg_cfp, rb_call_info_t *ci)
1935 return vm_call_method(th, reg_cfp, ci);
1980 rb_thread_t *th = GET_THREAD();
1984 if (RUBY_VM_CONTROL_FRAME_STACK_OVERFLOW_P(th, lcfp)) {
2009 vm_search_super_method(rb_thread_t *th, rb_control_frame_t *reg_cfp, rb_call_info_t *ci)
2082 vm_yield_with_cfunc(rb_thread_t *th, const rb_block_t *block,
2105 blockarg = rb_vm_make_proc(th, blockargptr, rb_cProc);
2112 vm_push_frame(th, (rb_iseq_t *)ifunc, VM_FRAME_MAGIC_IFUNC, self,
2114 th->cfp->sp, 1, 0);
2118 th->cfp++;
2128 vm_yield_setup_block_args_complex(rb_thread_t *th, const rb_iseq_t *iseq,
2185 vm_yield_setup_block_args(rb_thread_t *th, const rb_iseq_t * iseq,
2196 th->mark_stack_len = argc;
2210 th->mark_stack_len = argc = RARRAY_LENINT(ary);
2212 CHECK_VM_STACK_OVERFLOW(th->cfp, argc);
2242 th->mark_stack_len = argc = arg_size;
2250 opt_pc = vm_yield_setup_block_args_complex(th, iseq, argc, argv);
2267 th->mark_stack_len = iseq->arg_size;
2281 procval = rb_vm_make_proc(th, blockptr, rb_cProc);
2291 th->mark_stack_len = 0;
2296 vm_yield_setup_args(rb_thread_t * const th, const rb_iseq_t *iseq,
2316 vm_callee_setup_arg(th, &ci_entry, iseq, argv, 1);
2320 return vm_yield_setup_block_args(th, iseq, argc, argv, blockptr);
2325 vm_invoke_block(rb_thread_t *th, rb_control_frame_t *reg_cfp, rb_call_info_t *ci)
2337 vm_caller_setup_args(th, GET_CFP(), ci);
2347 opt_pc = vm_yield_setup_args(th, iseq, ci->argc, rsp, 0, block_proc_is_lambda(block->proc));
2349 vm_push_frame(th, iseq, VM_FRAME_MAGIC_BLOCK, block->self,
2359 VALUE val = vm_yield_with_cfunc(th, block, block->self, ci->argc, STACK_ADDR_FROM_TOP(ci->argc), 0);