summaryrefslogtreecommitdiff
path: root/eval.c
diff options
context:
space:
mode:
authormatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2003-11-16 04:34:05 +0000
committermatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2003-11-16 04:34:05 +0000
commit8fe88cc466633dd59b9bc425c641f44dacdfa99f (patch)
tree6e4fdbd3aeba019de2e3a0fc87d4b8c68729b140 /eval.c
parent5af124307659e37a47a90b9e9e40a4b017fa0a3e (diff)
* 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.c10
1 files changed, 6 insertions, 4 deletions
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);
}