From 03d62c6c6160677a2efef652af04c9616d37505c Mon Sep 17 00:00:00 2001 From: marcandre Date: Sat, 10 Oct 2009 05:13:08 +0000 Subject: * thread.c (rb_threadptr_execute_interrupts_rec, rb_threadptr_raise): Thread#raise with no argument will now re-raise the current exception if there is one [ruby-core:25367] * eval.c (get_errinfo, rb_rubylevel_thread_errinfo): Getter for current exception for a given thread git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@25278 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- eval.c | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) (limited to 'eval.c') diff --git a/eval.c b/eval.c index bf5b5c8f8..e9e76ad4f 100644 --- a/eval.c +++ b/eval.c @@ -902,9 +902,8 @@ VALUE rb_f_trace_var(); VALUE rb_f_untrace_var(); static VALUE * -errinfo_place(void) +errinfo_place(rb_thread_t *th) { - rb_thread_t *th = GET_THREAD(); rb_control_frame_t *cfp = th->cfp; rb_control_frame_t *end_cfp = RUBY_VM_END_CONTROL_FRAME(th); @@ -925,18 +924,23 @@ errinfo_place(void) } static VALUE -get_errinfo(void) +get_thread_errinfo(rb_thread_t *th) { - VALUE *ptr = errinfo_place(); + VALUE *ptr = errinfo_place(th); if (ptr) { return *ptr; } else { - rb_thread_t *th = GET_THREAD(); return th->errinfo; } } +static VALUE +get_errinfo(void) +{ + return get_thread_errinfo(GET_THREAD()); +} + static VALUE errinfo_getter(ID id) { @@ -951,7 +955,7 @@ errinfo_setter(VALUE val, ID id, VALUE *var) rb_raise(rb_eTypeError, "assigning non-exception to $!"); } else { - VALUE *ptr = errinfo_place(); + VALUE *ptr = errinfo_place(GET_THREAD()); if (ptr) { *ptr = val; } @@ -984,6 +988,12 @@ rb_rubylevel_errinfo(void) return get_errinfo(); } +VALUE +rb_rubylevel_thread_errinfo(rb_thread_t *th) +{ + return get_thread_errinfo(th); +} + static VALUE errat_getter(ID id) { -- cgit