diff options
author | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2003-11-16 04:34:05 +0000 |
---|---|---|
committer | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2003-11-16 04:34:05 +0000 |
commit | 8fe88cc466633dd59b9bc425c641f44dacdfa99f (patch) | |
tree | 6e4fdbd3aeba019de2e3a0fc87d4b8c68729b140 /eval.c | |
parent | 5af124307659e37a47a90b9e9e40a4b017fa0a3e (diff) | |
download | ruby-8fe88cc466633dd59b9bc425c641f44dacdfa99f.tar.gz |
* 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
Diffstat (limited to 'eval.c')
-rw-r--r-- | eval.c | 10 |
1 files changed, 6 insertions, 4 deletions
@@ -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); } |