diff options
author | Nobuyoshi Nakada <nobu@ruby-lang.org> | 2020-02-12 20:09:57 +0900 |
---|---|---|
committer | Nobuyoshi Nakada <nobu@ruby-lang.org> | 2020-02-12 20:09:57 +0900 |
commit | 160d3165eb095d81ae6e156f832a99728c853b01 (patch) | |
tree | 77f6422d7840b9f0011520e11c89f8646d2f4a24 /string.c | |
parent | bdf3032e3542b318c6f52dbe20d1c97cca3d7067 (diff) | |
download | ruby-160d3165eb095d81ae6e156f832a99728c853b01.tar.gz |
Copy non-inlined encoding index
Diffstat (limited to 'string.c')
-rw-r--r-- | string.c | 6 |
1 files changed, 6 insertions, 0 deletions
@@ -1511,6 +1511,7 @@ str_duplicate(VALUE klass, VALUE str) ; VALUE flags = FL_TEST_RAW(str, flag_mask); VALUE dup = str_alloc(klass); + int encidx = 0; MEMCPY(RSTRING(dup)->as.ary, RSTRING(str)->as.ary, char, embed_size); if (flags & STR_NOEMBED) { @@ -1530,7 +1531,12 @@ str_duplicate(VALUE klass, VALUE str) char, embed_size); } } + if ((flags & ENCODING_MASK) == (ENCODING_INLINE_MAX<<ENCODING_SHIFT)) { + encidx = rb_enc_get_index(str); + flags &= ~ENCODING_MASK; + } FL_SET_RAW(dup, flags & ~FL_FREEZE); + if (encidx) rb_enc_associate_index(dup, encidx); return dup; } |