From 4013c49a479e59689b6a585b8a9c2cb4c861b0db Mon Sep 17 00:00:00 2001 From: naruse Date: Wed, 20 Feb 2008 10:20:43 +0000 Subject: * 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. git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@15553 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- string.c | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) (limited to 'string.c') diff --git a/string.c b/string.c index 4540b86f7..dbd6a09dc 100644 --- a/string.c +++ b/string.c @@ -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 -- cgit