diff options
author | Koichi Sasada <ko1@atdot.net> | 2023-08-01 17:25:20 +0900 |
---|---|---|
committer | Koichi Sasada <ko1@atdot.net> | 2023-08-01 22:46:17 +0900 |
commit | d68c01fd314ebd6dc1d89c95a2734fad4f0953b0 (patch) | |
tree | b8d8794f59990f635eaf984119519f0a9cd51bd1 /vm_insnhelper.c | |
parent | f11ac06337fc56104172c3241393fd95d3a6c60d (diff) |
support `rescue` event for TracePoint
fix [Feature #19572]
Notes
Notes:
Merged: https://github.com/ruby/ruby/pull/8150
Diffstat (limited to 'vm_insnhelper.c')
-rw-r--r-- | vm_insnhelper.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/vm_insnhelper.c b/vm_insnhelper.c index 6291e13fec..b226e1397e 100644 --- a/vm_insnhelper.c +++ b/vm_insnhelper.c @@ -6483,6 +6483,14 @@ rb_vm_opt_cfunc_p(CALL_CACHE cc, int insn) } \ } while (0) +static VALUE +rescue_errinfo(rb_execution_context_t *ec, rb_control_frame_t *cfp) +{ + VM_ASSERT(VM_FRAME_RUBYFRAME_P(cfp)); + VM_ASSERT(ISEQ_BODY(cfp->iseq)->type == ISEQ_TYPE_RESCUE); + return cfp->ep[VM_ENV_INDEX_LAST_LVAR]; +} + static void vm_trace(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp) { @@ -6559,6 +6567,7 @@ vm_trace(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp) vm_trace_hook(ec, reg_cfp, pc, RUBY_EVENT_CALL, RUBY_EVENT_CALL, global_hooks, bmethod_local_hooks_ptr, Qundef); } VM_TRACE_HOOK(RUBY_EVENT_CLASS | RUBY_EVENT_CALL | RUBY_EVENT_B_CALL, Qundef); + VM_TRACE_HOOK(RUBY_EVENT_RESCUE, rescue_errinfo(ec, reg_cfp)); VM_TRACE_HOOK(RUBY_EVENT_LINE, Qundef); VM_TRACE_HOOK(RUBY_EVENT_COVERAGE_LINE, Qundef); VM_TRACE_HOOK(RUBY_EVENT_COVERAGE_BRANCH, Qundef); |