summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNobuyoshi Nakada <nobu@ruby-lang.org>2024-10-05 15:48:52 +0900
committerNobuyoshi Nakada <nobu@ruby-lang.org>2024-10-05 15:59:44 +0900
commit9dbbd0181f8c5e165f474e064c6f808050011bc8 (patch)
treeca33210dbdfcb0f122d3e671c8734d4d6f40ace0
parent6743e6285a585fbd0a3b25b8eeed10caf1fae66e (diff)
Parser string encoding is always ASCII-compatible
Notes
Notes: Merged: https://github.com/ruby/ruby/pull/11806
-rw-r--r--parse.y27
1 files changed, 5 insertions, 22 deletions
diff --git a/parse.y b/parse.y
index 50e32e842a..08cd4f420c 100644
--- a/parse.y
+++ b/parse.y
@@ -2202,8 +2202,7 @@ rb_parser_enc_associate(struct parser_params *p, rb_parser_string_t *str, rb_enc
{
if (rb_parser_str_get_encoding(str) == enc)
return str;
- if (!PARSER_ENC_CODERANGE_ASCIIONLY(str) ||
- !rb_enc_asciicompat(enc)) {
+ if (!PARSER_ENC_CODERANGE_ASCIIONLY(str)) {
PARSER_ENC_CODERANGE_CLEAR(str);
}
rb_parser_string_set_encoding(str, enc);
@@ -2216,18 +2215,6 @@ rb_parser_is_ascii_string(struct parser_params *p, rb_parser_string_t *str)
return rb_parser_enc_str_coderange(p, str) == RB_PARSER_ENC_CODERANGE_7BIT;
}
-static int
-rb_parser_enc_str_asciionly_p(struct parser_params *p, rb_parser_string_t *str)
-{
- rb_encoding *enc = rb_parser_str_get_encoding(str);
-
- if (!rb_enc_asciicompat(enc))
- return FALSE;
- else if (rb_parser_is_ascii_string(p, str))
- return TRUE;
- return FALSE;
-}
-
static rb_encoding *
rb_parser_enc_compatible_latter(struct parser_params *p, rb_parser_string_t *str1, rb_parser_string_t *str2, rb_encoding *enc1, rb_encoding *enc2)
{
@@ -2236,10 +2223,7 @@ rb_parser_enc_compatible_latter(struct parser_params *p, rb_parser_string_t *str
if (PARSER_STRING_LEN(str2) == 0)
return enc1;
if (PARSER_STRING_LEN(str1) == 0)
- return (rb_enc_asciicompat(enc1) && rb_parser_enc_str_asciionly_p(p, str2)) ? enc1 : enc2;
- if (!rb_enc_asciicompat(enc1) || !rb_enc_asciicompat(enc2)) {
- return 0;
- }
+ return rb_parser_is_ascii_string(p, str2) ? enc1 : enc2;
cr1 = rb_parser_enc_str_coderange(p, str1);
cr2 = rb_parser_enc_str_coderange(p, str2);
@@ -6991,7 +6975,6 @@ rb_parser_str_escape(struct parser_params *p, rb_parser_string_t *str)
const char *prev = ptr;
char charbuf[5] = {'\\', 'x', 0, 0, 0};
rb_parser_string_t * result = rb_parser_string_new(p, 0, 0);
- int asciicompat = rb_enc_asciicompat(enc);
while (ptr < pend) {
unsigned int c;
@@ -7021,7 +7004,7 @@ rb_parser_str_escape(struct parser_params *p, rb_parser_string_t *str)
parser_str_cat_cstr(result, cc);
prev = ptr;
}
- else if (asciicompat && rb_enc_isascii(c, enc) && ISPRINT(c)) {
+ else if (rb_enc_isascii(c, enc) && ISPRINT(c)) {
}
else {
if (ptr - n > prev) {
@@ -7703,7 +7686,7 @@ parser_str_new(struct parser_params *p, const char *ptr, long len, rb_encoding *
pstr = rb_parser_encoding_string_new(p, ptr, len, enc);
- if (!(func & STR_FUNC_REGEXP) && rb_enc_asciicompat(enc)) {
+ if (!(func & STR_FUNC_REGEXP)) {
if (rb_parser_is_ascii_string(p, pstr)) {
}
else if (rb_is_usascii_enc((void *)enc0) && enc != rb_utf8_encoding()) {
@@ -9187,7 +9170,7 @@ here_document(struct parser_params *p, rb_strterm_heredoc_t *here)
}
else {
if ((len = p->lex.pcur - p->lex.ptok) > 0) {
- if (!(func & STR_FUNC_REGEXP) && rb_enc_asciicompat(enc)) {
+ if (!(func & STR_FUNC_REGEXP)) {
int cr = ENC_CODERANGE_UNKNOWN;
rb_str_coderange_scan_restartable(p->lex.ptok, p->lex.pcur, enc, &cr);
if (cr != ENC_CODERANGE_7BIT &&