aboutsummaryrefslogtreecommitdiffstats
path: root/eval_error.c
diff options
context:
space:
mode:
Diffstat (limited to 'eval_error.c')
-rw-r--r--eval_error.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/eval_error.c b/eval_error.c
index e7eb9cf0fc..a2e95a759f 100644
--- a/eval_error.c
+++ b/eval_error.c
@@ -58,6 +58,17 @@ rb_get_backtrace(VALUE info)
static void
set_backtrace(VALUE info, VALUE bt)
{
+ ID set_backtrace = rb_intern("set_backtrace");
+
+ if (rb_backtrace_p(bt)) {
+ if (rb_method_defined_by(info, set_backtrace, rb_exc_set_backtrace)) {
+ rb_exc_set_backtrace(info, bt);
+ return;
+ }
+ else {
+ bt = rb_backtrace_to_str_ary(bt);
+ }
+ }
rb_funcall(info, rb_intern("set_backtrace"), 1, bt);
}