aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2007-07-19 10:24:17 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2007-07-19 10:24:17 +0000
commita1c76bc3de808ab3c5b36725369e952210ef8b64 (patch)
tree9c44e9098e76cec1cede0211d7a2b5239277bfc8
parent09ce106ab3341030cc1893ca308532d196658508 (diff)
downloadruby-a1c76bc3de808ab3c5b36725369e952210ef8b64.tar.gz
* 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
-rw-r--r--ChangeLog5
-rw-r--r--error.c12
-rw-r--r--eval_error.ci4
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 <nobu@ruby-lang.org>
+
+ * eval_error.ci (get_backtrace): check the result more.
+ [ruby-dev:31261] [ruby-bugs-12398]
+
Thu Jul 19 14:38:45 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
* 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