mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* string.c (rb_str_shared_replace): no need for
str_make_independent. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@22368 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
c9e4dc308f
commit
62dd7a00fc
2 changed files with 21 additions and 11 deletions
|
@ -1,3 +1,8 @@
|
||||||
|
Tue Feb 17 12:50:57 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
||||||
|
|
||||||
|
* string.c (rb_str_shared_replace): no need for
|
||||||
|
str_make_independent.
|
||||||
|
|
||||||
Tue Feb 17 05:41:08 2009 Koichi Sasada <ko1@atdot.net>
|
Tue Feb 17 05:41:08 2009 Koichi Sasada <ko1@atdot.net>
|
||||||
|
|
||||||
* compile.c: fix to add "ensure" codes across "while" clause
|
* compile.c: fix to add "ensure" codes across "while" clause
|
||||||
|
|
27
string.c
27
string.c
|
@ -759,6 +759,8 @@ rb_str_to_str(VALUE str)
|
||||||
return rb_convert_type(str, T_STRING, "String", "to_str");
|
return rb_convert_type(str, T_STRING, "String", "to_str");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline void str_discard(VALUE str);
|
||||||
|
|
||||||
void
|
void
|
||||||
rb_str_shared_replace(VALUE str, VALUE str2)
|
rb_str_shared_replace(VALUE str, VALUE str2)
|
||||||
{
|
{
|
||||||
|
@ -767,11 +769,8 @@ rb_str_shared_replace(VALUE str, VALUE str2)
|
||||||
if (str == str2) return;
|
if (str == str2) return;
|
||||||
enc = STR_ENC_GET(str2);
|
enc = STR_ENC_GET(str2);
|
||||||
cr = ENC_CODERANGE(str2);
|
cr = ENC_CODERANGE(str2);
|
||||||
rb_str_modify(str);
|
str_discard(str);
|
||||||
OBJ_INFECT(str, str2);
|
OBJ_INFECT(str, str2);
|
||||||
if (!STR_SHARED_P(str) && !STR_EMBED_P(str)) {
|
|
||||||
xfree(RSTRING_PTR(str));
|
|
||||||
}
|
|
||||||
if (RSTRING_LEN(str2) <= RSTRING_EMBED_LEN_MAX) {
|
if (RSTRING_LEN(str2) <= RSTRING_EMBED_LEN_MAX) {
|
||||||
STR_SET_EMBED(str);
|
STR_SET_EMBED(str);
|
||||||
memcpy(RSTRING_PTR(str), RSTRING_PTR(str2), RSTRING_LEN(str2)+1);
|
memcpy(RSTRING_PTR(str), RSTRING_PTR(str2), RSTRING_LEN(str2)+1);
|
||||||
|
@ -1194,6 +1193,17 @@ str_modify_keep_cr(VALUE str)
|
||||||
ENC_CODERANGE_CLEAR(str);
|
ENC_CODERANGE_CLEAR(str);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline void
|
||||||
|
str_discard(VALUE str)
|
||||||
|
{
|
||||||
|
str_modifiable(str);
|
||||||
|
if (!STR_SHARED_P(str) && !STR_EMBED_P(str)) {
|
||||||
|
xfree(RSTRING_PTR(str));
|
||||||
|
RSTRING(str)->as.heap.ptr = 0;
|
||||||
|
RSTRING(str)->as.heap.len = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
rb_str_associate(VALUE str, VALUE add)
|
rb_str_associate(VALUE str, VALUE add)
|
||||||
{
|
{
|
||||||
|
@ -3789,9 +3799,7 @@ rb_str_replace(VALUE str, VALUE str2)
|
||||||
if (STR_ASSOC_P(str2)) {
|
if (STR_ASSOC_P(str2)) {
|
||||||
str2 = rb_str_new4(str2);
|
str2 = rb_str_new4(str2);
|
||||||
}
|
}
|
||||||
if (str_independent(str) && !STR_EMBED_P(str)) {
|
str_discard(str);
|
||||||
xfree(RSTRING_PTR(str));
|
|
||||||
}
|
|
||||||
if (STR_SHARED_P(str2)) {
|
if (STR_SHARED_P(str2)) {
|
||||||
STR_SET_NOEMBED(str);
|
STR_SET_NOEMBED(str);
|
||||||
RSTRING(str)->as.heap.len = len;
|
RSTRING(str)->as.heap.len = len;
|
||||||
|
@ -3822,10 +3830,7 @@ rb_str_replace(VALUE str, VALUE str2)
|
||||||
static VALUE
|
static VALUE
|
||||||
rb_str_clear(VALUE str)
|
rb_str_clear(VALUE str)
|
||||||
{
|
{
|
||||||
/* rb_str_modify() */ /* no need for str_make_independent */
|
str_discard(str);
|
||||||
if (str_independent(str) && !STR_EMBED_P(str)) {
|
|
||||||
xfree(RSTRING_PTR(str));
|
|
||||||
}
|
|
||||||
STR_SET_EMBED(str);
|
STR_SET_EMBED(str);
|
||||||
STR_SET_EMBED_LEN(str, 0);
|
STR_SET_EMBED_LEN(str, 0);
|
||||||
RSTRING_PTR(str)[0] = 0;
|
RSTRING_PTR(str)[0] = 0;
|
||||||
|
|
Loading…
Add table
Reference in a new issue