diff options
author | akr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2008-01-24 13:11:00 +0000 |
---|---|---|
committer | akr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2008-01-24 13:11:00 +0000 |
commit | 14b9d47ae07e3c1aa5dd88d4dc24639c9d99240e (patch) | |
tree | d23a18e43ef6817f9f10e29876229b8f4bb3c1d2 /parse.y | |
parent | e27f4ef689bf15d47b7d5a56fbc11f39e5b377a0 (diff) |
* parse.y (reg_fragment_setenc_gen): associate ASCII-8BIT only if
str has only ASCII characters.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@15220 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'parse.y')
-rw-r--r-- | parse.y | 17 |
1 files changed, 13 insertions, 4 deletions
@@ -8475,17 +8475,26 @@ reg_fragment_setenc_gen(struct parser_params* parser, VALUE str, int options) if (c) { int opt, idx; rb_char_to_option_kcode(c, &opt, &idx); - if (idx != ENCODING_GET(str) && !ENCODING_IS_ASCII8BIT(str) && + if (idx != ENCODING_GET(str) && rb_enc_str_coderange(str) != ENC_CODERANGE_7BIT) { - compile_error(PARSER_ARG - "regexp encoding option '%c' differs from source encoding '%s'", - c, rb_enc_name(rb_enc_get(str))); + goto error; } ENCODING_SET(str, idx); } else if (RE_OPTION_ENCODING_NONE(options)) { + if (!ENCODING_IS_ASCII8BIT(str) && + rb_enc_str_coderange(str) != ENC_CODERANGE_7BIT) { + c = 'n'; + goto error; + } rb_enc_associate(str, rb_ascii8bit_encoding()); } + return; + +error: + compile_error(PARSER_ARG + "regexp encoding option '%c' differs from source encoding '%s'", + c, rb_enc_name(rb_enc_get(str))); } static void |