diff options
| author | Nobuyoshi Nakada <nobu@ruby-lang.org> | 2026-01-17 14:19:15 +0900 |
|---|---|---|
| committer | Nobuyoshi Nakada <nobu@ruby-lang.org> | 2026-01-17 14:19:15 +0900 |
| commit | 78b7646bdb91285873ac26bca060591e06c45afe (patch) | |
| tree | 769227a92b9a221c8e398122cbae46a4b5f99f8a /string.c | |
| parent | 8ca2f6489bc2b04902472c544edd69664cef0c4e (diff) | |
[Bug #21842] Let `rb_interned_str` return US-ASCII if possible
Diffstat (limited to 'string.c')
| -rw-r--r-- | string.c | 10 |
1 files changed, 9 insertions, 1 deletions
@@ -12709,7 +12709,15 @@ VALUE rb_interned_str(const char *ptr, long len) { struct RString fake_str = {RBASIC_INIT}; - return register_fstring(setup_fake_str(&fake_str, ptr, len, ENCINDEX_US_ASCII), true, false); + int encidx = ENCINDEX_US_ASCII; + int coderange = ENC_CODERANGE_7BIT; + if (len > 0 && search_nonascii(ptr, ptr + len)) { + encidx = ENCINDEX_ASCII_8BIT; + coderange = ENC_CODERANGE_VALID; + } + VALUE str = setup_fake_str(&fake_str, ptr, len, encidx); + ENC_CODERANGE_SET(str, coderange); + return register_fstring(str, true, false); } VALUE |
