diff options
-rw-r--r-- | ChangeLog | 13 | ||||
-rw-r--r-- | string.c | 23 |
2 files changed, 32 insertions, 4 deletions
@@ -1,3 +1,16 @@ +Wed Feb 20 19:15:38 2008 NARUSE, Yui <naruse@ruby-lang.org> + + * string.c (rb_enc_str_copy): added for wrapper for rb_enc_copy. + this also copy coderange when ptr and len is equal. + + * string.c (rb_enc_cr_str_copy): added for wrapper for rb_enc_copy. + this always copy coderange. + + * string.c (str_replace_shared): use rb_enc_str_copy. + + * string.c (str_new3): don't rb_enc_copy because encoding is copied + at str_replace_shared. + Wed Feb 20 13:08:52 2008 Nobuyoshi Nakada <nobu@ruby-lang.org> * instruby.rb (parse_args): added --dir-mode, --script-mode and @@ -201,6 +201,23 @@ coderange_scan(const char *p, long len, rb_encoding *enc) return ENC_CODERANGE_VALID; } +void +rb_enc_str_copy(VALUE str1, VALUE str2) +{ + rb_enc_copy(str1, str2); + if (RSTRING_PTR(str1) == RSTRING_PTR(str2) && + RSTRING_LEN(str1) == RSTRING_LEN(str2)) { + ENC_CODERANGE_SET(str1, ENC_CODERANGE(str2)); + } +} + +void +rb_enc_cr_str_copy(VALUE str1, VALUE str2) +{ + rb_enc_copy(str1, str2); + ENC_CODERANGE_SET(str1, ENC_CODERANGE(str2)); +} + int rb_enc_str_coderange(VALUE str) { @@ -359,6 +376,7 @@ str_replace_shared(VALUE str2, VALUE str) RSTRING(str2)->as.heap.aux.shared = str; FL_SET(str2, ELTS_SHARED); } + rb_enc_cr_str_copy(str2, str); return str2; } @@ -372,10 +390,7 @@ str_new_shared(VALUE klass, VALUE str) static VALUE str_new3(VALUE klass, VALUE str) { - VALUE str2 = str_new_shared(klass, str); - - rb_enc_copy(str2, str); - return str2; + return str_new_shared(klass, str); } VALUE |