From 8fe88cc466633dd59b9bc425c641f44dacdfa99f Mon Sep 17 00:00:00 2001 From: matz Date: Sun, 16 Nov 2003 04:34:05 +0000 Subject: [PATCH] * eval.c (eval): prepend error position in evaluating string to "mesg" attribute string only when it's available and is a string. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@4967 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 6 ++++++ eval.c | 10 ++++++---- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/ChangeLog b/ChangeLog index ac9ed5c994..0648bd18a8 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +Sun Nov 16 13:26:07 2003 Yukihiro Matsumoto + + * eval.c (eval): prepend error position in evaluating string to + "mesg" attribute string only when it's available and is a + string. + Sun Nov 16 12:16:10 2003 Minero Aoki * lib/net/protocol.rb: logging response body. [experimental] diff --git a/eval.c b/eval.c index 4d3fd66b7f..4a582ded66 100644 --- a/eval.c +++ b/eval.c @@ -5582,10 +5582,12 @@ eval(self, src, scope, file, line) if (strcmp(file, "(eval)") == 0) { VALUE mesg, errat; - errat = get_backtrace(ruby_errinfo); - mesg = rb_obj_as_string(ruby_errinfo); - rb_str_update(mesg, 0, 0, RARRAY(errat)->ptr[0]); - RARRAY(errat)->ptr[0] = RARRAY(backtrace(-2))->ptr[0]; + mesg = rb_attr_get(ruby_errinfo, rb_intern("mesg")); + if (!NIL_P(mesg) && TYPE(mesg) == T_STRING) { + errat = get_backtrace(ruby_errinfo); + rb_str_update(mesg, 0, 0, RARRAY(errat)->ptr[0]); + RARRAY(errat)->ptr[0] = RARRAY(backtrace(-2))->ptr[0]; + } } rb_exc_raise(ruby_errinfo); }