summaryrefslogtreecommitdiff
path: root/parse.y
diff options
context:
space:
mode:
Diffstat (limited to 'parse.y')
-rw-r--r--parse.y9
1 files changed, 6 insertions, 3 deletions
diff --git a/parse.y b/parse.y
index 29b74ae759..2708415446 100644
--- a/parse.y
+++ b/parse.y
@@ -5115,7 +5115,6 @@ parser_regx_options(struct parser_params *parser)
{
extern int rb_char_to_option_kcode(int c, int *option, int *kcode);
- int kcode = 0;
int options = 0;
int c, opt, kc;
@@ -5126,7 +5125,11 @@ parser_regx_options(struct parser_params *parser)
}
else if (rb_char_to_option_kcode(c, &opt, &kc)) {
options |= opt;
- if (kc != 0) kcode = kc;
+ if (kc != 0 && rb_enc_from_index(kc) != parser->enc) {
+ compile_error(PARSER_ARG
+ "regexp encoding option '%c' mismatch to %s",
+ c, rb_enc_name(parser->enc));
+ }
}
else {
tokadd(c);
@@ -5138,7 +5141,7 @@ parser_regx_options(struct parser_params *parser)
compile_error(PARSER_ARG "unknown regexp option%s - %s",
toklen() > 1 ? "s" : "", tok());
}
- return options | kcode;
+ return options;
}
#define STR_FUNC_ESCAPE 0x01