Using is_ascii_string to check encoding

This commit is contained in:
S-H-GAMELINKS 2022-05-01 23:13:59 +09:00 коммит произвёл Nobuyoshi Nakada
Родитель 51a3ebf4ec
Коммит 420f3ced4d
6 изменённых файлов: 11 добавлений и 11 удалений

2
file.c
Просмотреть файл

@ -4001,7 +4001,7 @@ rb_file_expand_path_internal(VALUE fname, VALUE dname, int abs_mode, int long_na
rb_str_set_len(result, p - buf + strlen(p));
encidx = ENCODING_GET(result);
tmp = result;
if (encidx != ENCINDEX_UTF_8 && rb_enc_str_coderange(result) != ENC_CODERANGE_7BIT) {
if (encidx != ENCINDEX_UTF_8 && !is_ascii_string(result)) {
tmp = rb_str_encode_ospath(result);
}
len = MultiByteToWideChar(CP_UTF8, 0, RSTRING_PTR(tmp), -1, NULL, 0);

2
io.c
Просмотреть файл

@ -3836,7 +3836,7 @@ check_getline_args(VALUE *rsp, long *limit, VALUE io)
enc_rs = rb_enc_get(rs);
enc_io = io_read_encoding(fptr);
if (enc_io != enc_rs &&
(rb_enc_str_coderange(rs) != ENC_CODERANGE_7BIT ||
(!is_ascii_string(rs) ||
(RSTRING_LEN(rs) > 0 && !rb_enc_asciicompat(enc_io)))) {
if (rs == rb_default_rs) {
rs = rb_enc_str_new(0, 0, enc_io);

Просмотреть файл

@ -481,7 +481,7 @@ w_symbol(VALUE sym, struct dump_arg *arg)
}
encname = encoding_name(sym, arg);
if (NIL_P(encname) ||
rb_enc_str_coderange(sym) == ENC_CODERANGE_7BIT) {
is_ascii_string(sym)) {
encname = Qnil;
}
else {

Просмотреть файл

@ -6570,7 +6570,7 @@ parser_str_new(const char *ptr, long len, rb_encoding *enc, int func, rb_encodin
str = rb_enc_str_new(ptr, len, enc);
if (!(func & STR_FUNC_REGEXP) && rb_enc_asciicompat(enc)) {
if (rb_enc_str_coderange(str) == ENC_CODERANGE_7BIT) {
if (is_ascii_string(str)) {
}
else if (enc0 == rb_usascii_encoding() && enc != rb_utf8_encoding()) {
rb_enc_associate(str, rb_ascii8bit_encoding());
@ -12939,21 +12939,21 @@ rb_reg_fragment_setenc(struct parser_params* p, VALUE str, int options)
int opt, idx;
rb_char_to_option_kcode(c, &opt, &idx);
if (idx != ENCODING_GET(str) &&
rb_enc_str_coderange(str) != ENC_CODERANGE_7BIT) {
!is_ascii_string(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) {
!is_ascii_string(str)) {
c = 'n';
goto error;
}
rb_enc_associate(str, rb_ascii8bit_encoding());
}
else if (p->enc == rb_usascii_encoding()) {
if (rb_enc_str_coderange(str) != ENC_CODERANGE_7BIT) {
if (!is_ascii_string(str)) {
/* raise in re.c */
rb_enc_associate(str, rb_usascii_encoding());
}

Просмотреть файл

@ -856,7 +856,7 @@ rb_enc_str_asciionly_p(VALUE str)
if (!rb_enc_asciicompat(enc))
return FALSE;
else if (rb_enc_str_coderange(str) == ENC_CODERANGE_7BIT)
else if (is_ascii_string(str))
return TRUE;
return FALSE;
}
@ -1276,7 +1276,7 @@ rb_external_str_with_enc(VALUE str, rb_encoding *eenc)
{
int eidx = rb_enc_to_index(eenc);
if (eidx == rb_usascii_encindex() &&
rb_enc_str_coderange(str) != ENC_CODERANGE_7BIT) {
!is_ascii_string(str)) {
rb_enc_associate_index(str, rb_ascii8bit_encindex());
return str;
}
@ -3521,7 +3521,7 @@ st_index_t
rb_str_hash(VALUE str)
{
int e = ENCODING_GET(str);
if (e && rb_enc_str_coderange(str) == ENC_CODERANGE_7BIT) {
if (e && is_ascii_string(str)) {
e = 0;
}
return rb_memhash((const void *)RSTRING_PTR(str), RSTRING_LEN(str)) ^ e;

Просмотреть файл

@ -2721,7 +2721,7 @@ str_transcode0(int argc, VALUE *argv, VALUE *self, int ecflags, VALUE ecopts)
return NIL_P(arg2) ? -1 : dencidx;
}
if (senc && denc && rb_enc_asciicompat(senc) && rb_enc_asciicompat(denc)) {
if (rb_enc_str_coderange(str) == ENC_CODERANGE_7BIT) {
if (is_ascii_string(str)) {
return dencidx;
}
}