From 7f83bd3732b9ecb66655416a58b4c2bf329afa20 Mon Sep 17 00:00:00 2001 From: S-H-GAMELINKS Date: Thu, 26 Sep 2024 22:04:49 +0900 Subject: [PATCH] Reduce `is_ascii_string` function dependency for parser Changed to use `rb_parser_is_ascii_string` function instead of `is_ascii_string` function --- parse.y | 9 +++++++-- ruby_parser.c | 7 ------- rubyparser.h | 1 - universal_parser.c | 1 - 4 files changed, 7 insertions(+), 11 deletions(-) diff --git a/parse.y b/parse.y index 94c4c5da4d670d..3e0a903b774e32 100644 --- a/parse.y +++ b/parse.y @@ -7694,16 +7694,21 @@ static VALUE parser_str_new(struct parser_params *p, const char *ptr, long len, rb_encoding *enc, int func, rb_encoding *enc0) { VALUE str; + rb_parser_string_t *pstr; + + pstr = rb_parser_encoding_string_new(p, ptr, len, enc); + str = rb_str_new_mutable_parser_string(pstr); - str = rb_enc_str_new(ptr, len, enc); if (!(func & STR_FUNC_REGEXP) && rb_enc_asciicompat(enc)) { - if (is_ascii_string(str)) { + if (rb_parser_is_ascii_string(p, pstr)) { } else if (rb_is_usascii_enc((void *)enc0) && enc != rb_utf8_encoding()) { rb_enc_associate(str, rb_ascii8bit_encoding()); } } + rb_parser_string_free(p, pstr); + return str; } diff --git a/ruby_parser.c b/ruby_parser.c index a965fc44dc2760..8a87b3ae64b486 100644 --- a/ruby_parser.c +++ b/ruby_parser.c @@ -34,12 +34,6 @@ #define parser_encoding const void -static int -is_ascii_string2(VALUE str) -{ - return is_ascii_string(str); -} - RBIMPL_ATTR_FORMAT(RBIMPL_PRINTF_FORMAT, 6, 0) static VALUE syntax_error_append(VALUE exc, VALUE file, int line, int column, @@ -375,7 +369,6 @@ static const rb_parser_config_t rb_global_parser_config = { .str_new = rb_str_new, .str_new_cstr = rb_str_new_cstr, .str_to_interned_str = rb_str_to_interned_str, - .is_ascii_string = is_ascii_string2, .enc_str_new = enc_str_new, .str_vcatf = rb_str_vcatf, .rb_sprintf = rb_sprintf, diff --git a/rubyparser.h b/rubyparser.h index 2e7e6b63cb8b5a..99e8b27bfd11e2 100644 --- a/rubyparser.h +++ b/rubyparser.h @@ -1221,7 +1221,6 @@ typedef struct rb_parser_config_struct { VALUE (*str_new)(const char *ptr, long len); VALUE (*str_new_cstr)(const char *ptr); VALUE (*str_to_interned_str)(VALUE); - int (*is_ascii_string)(VALUE str); VALUE (*enc_str_new)(const char *ptr, long len, rb_encoding *enc); RBIMPL_ATTR_FORMAT(RBIMPL_PRINTF_FORMAT, 2, 0) VALUE (*str_vcatf)(VALUE str, const char *fmt, va_list ap); diff --git a/universal_parser.c b/universal_parser.c index 9ba7bef4a785e1..afe5e471f5c53f 100644 --- a/universal_parser.c +++ b/universal_parser.c @@ -121,7 +121,6 @@ #undef rb_str_new_cstr #define rb_str_new_cstr p->config->str_new_cstr #define rb_str_to_interned_str p->config->str_to_interned_str -#define is_ascii_string p->config->is_ascii_string #define rb_enc_str_new p->config->enc_str_new #define rb_str_vcatf p->config->str_vcatf #define rb_sprintf p->config->rb_sprintf