From a1c76bc3de808ab3c5b36725369e952210ef8b64 Mon Sep 17 00:00:00 2001 From: nobu Date: Thu, 19 Jul 2007 10:24:17 +0000 Subject: [PATCH] * eval_error.ci (get_backtrace): check the result more. [ruby-dev:31261] [ruby-bugs-12398] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@12815 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 5 +++++ error.c | 12 ++++++------ eval_error.ci | 4 +++- 3 files changed, 14 insertions(+), 7 deletions(-) diff --git a/ChangeLog b/ChangeLog index 9586a8c95e..6d137eb006 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +Thu Jul 19 19:24:14 2007 Nobuyoshi Nakada + + * eval_error.ci (get_backtrace): check the result more. + [ruby-dev:31261] [ruby-bugs-12398] + Thu Jul 19 14:38:45 2007 Nobuyoshi Nakada * bignum.c (rb_big_lshift, rb_big_rshift): separated functions diff --git a/error.c b/error.c index f12c89041a..77d63d7b38 100644 --- a/error.c +++ b/error.c @@ -495,14 +495,14 @@ exc_inspect(VALUE exc) static VALUE exc_backtrace(VALUE exc) { - ID bt = rb_intern("bt"); + static ID bt; - if (!rb_ivar_defined(exc, bt)) return Qnil; - return rb_ivar_get(exc, bt); + if (!bt) bt = rb_intern("bt"); + return rb_attr_get(exc, bt); } -static VALUE -check_backtrace(VALUE bt) +VALUE +rb_check_backtrace(VALUE bt) { long i; static const char *err = "backtrace must be Array of String"; @@ -536,7 +536,7 @@ check_backtrace(VALUE bt) static VALUE exc_set_backtrace(VALUE exc, VALUE bt) { - return rb_iv_set(exc, "bt", check_backtrace(bt)); + return rb_iv_set(exc, "bt", rb_check_backtrace(bt)); } /* diff --git a/eval_error.ci b/eval_error.ci index f81ef8ffb5..2820c92df6 100644 --- a/eval_error.ci +++ b/eval_error.ci @@ -66,6 +66,8 @@ error_pos(void) } } +VALUE rb_check_backtrace(VALUE); + static VALUE get_backtrace(VALUE info) { @@ -74,7 +76,7 @@ get_backtrace(VALUE info) info = rb_funcall(info, rb_intern("backtrace"), 0); if (NIL_P(info)) return Qnil; - return rb_check_array_type(info); + return rb_check_backtrace(info); } static void