summaryrefslogtreecommitdiff
path: root/parse.y
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-02-14 14:56:40 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-02-14 14:56:40 +0000
commit67d0ce36f5c9405434a5a97230ca3593dbe86974 (patch)
treea8a2dfa0919de4474ca831af579f936bf4b0ba48 /parse.y
parent5aa388c23c12747fd63827e93200fa0d90a7733c (diff)
* parse.y (reg_compile_gen): appends error message from
rb_reg_compile() to one from reg_fragment_setenc(). git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@15475 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'parse.y')
-rw-r--r--parse.y11
1 files changed, 8 insertions, 3 deletions
diff --git a/parse.y b/parse.y
index 24fc338e51..90098a6f99 100644
--- a/parse.y
+++ b/parse.y
@@ -8546,7 +8546,7 @@ reg_fragment_setenc_gen(struct parser_params* parser, VALUE str, int options)
}
return;
-error:
+ error:
compile_error(PARSER_ARG
"regexp encoding option '%c' differs from source encoding '%s'",
c, rb_enc_name(rb_enc_get(str)));
@@ -8648,12 +8648,17 @@ static VALUE
reg_compile_gen(struct parser_params* parser, VALUE str, int options)
{
VALUE re;
+ VALUE err;
reg_fragment_setenc(str, options);
+ err = rb_errinfo();
re = rb_reg_compile(str, options & RE_OPTION_MASK);
if (NIL_P(re)) {
- RB_GC_GUARD(re) = rb_obj_as_string(rb_errinfo());
- compile_error(PARSER_ARG "%s", RSTRING_PTR(re));
+ ID mesg = rb_intern("mesg");
+ VALUE m = rb_attr_get(err, mesg);
+ rb_str_cat(m, "\n", 1);
+ rb_str_append(m, rb_attr_get(rb_errinfo(), mesg));
+ rb_set_errinfo(err);
return Qnil;
}
return re;