aboutsummaryrefslogtreecommitdiffstats
path: root/eval.c
diff options
context:
space:
mode:
Diffstat (limited to 'eval.c')
-rw-r--r--eval.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/eval.c b/eval.c
index c5a72dc609..63f6a06901 100644
--- a/eval.c
+++ b/eval.c
@@ -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) {