diff options
Diffstat (limited to 'eval.c')
-rw-r--r-- | eval.c | 9 |
1 files changed, 8 insertions, 1 deletions
@@ -424,9 +424,13 @@ rb_longjmp(int tag, volatile VALUE mesg) rb_trap_restore_mask(); - if (tag != TAG_FATAL) { + if (tag == TAG_FATAL) { + if (UNLIKELY(TRACE_RAISE_ENABLED())) FIRE_RAISE(0, (char*)"fatal", (char*)file, line); + } + else { EXEC_EVENT_HOOK(th, RUBY_EVENT_RAISE, th->cfp->self, 0 /* TODO: id */, 0 /* TODO: klass */); + if (UNLIKELY(TRACE_RAISE_ENABLED())) FIRE_RAISE(mesg, (char*)rb_class2name(CLASS_OF(mesg)), (char*)file, line); } rb_thread_raised_clear(th); @@ -633,6 +637,9 @@ rb_rescue2(VALUE (* b_proc) (ANYARGS), VALUE data1, va_end(args); if (handle) { + if (UNLIKELY(TRACE_RESCUE_ENABLED())) { + FIRE_RESCUE(th->errinfo, (char*)rb_class2name(CLASS_OF(th->errinfo)), (char*)"<unknown>", 0); + } if (r_proc) { PUSH_TAG(); if ((state = EXEC_TAG()) == 0) { |