[#290] — Florian Frank <flori@...>
Hi all,
5 messages
2002/08/03
[#297] GC longjmp macros — Michal Rokos <m.rokos@...>
Hi,
5 messages
2002/08/05
[#308] Q: OSSL in std. distr? — Michal Rokos <m.rokos@...>
Hi,
4 messages
2002/08/08
[#326] Implications of a #force_free method in Object? — Matthew Bloch <mattbee@...>
Hello;
8 messages
2002/08/19
[#328] Int vs Long — Michal Rokos <m.rokos@...>
Hi,
7 messages
2002/08/21
[#337] Int vs Long (2nd part) — Michal Rokos <m.rokos@...>
Hi,
7 messages
2002/08/22
[#340] Int vs Long #3 — Michal Rokos <m.rokos@...>
Hi,
9 messages
2002/08/22
[#344] Re: [Cleanup] Int vs Long #3
— nobu.nokada@...
2002/08/22
Hi,
[#348] Re: [Cleanup] Int vs Long #3
— Michal Rokos <m.rokos@...>
2002/08/23
Hello,
[#353] File (struct stat handling) — Michal Rokos <m.rokos@...>
Hello,
6 messages
2002/08/23
[#358] node.h for eval.c — Michal Rokos <m.rokos@...>
Hi,
5 messages
2002/08/23
[#372] rb_class_path — Michal Rokos <m.rokos@...>
Hello,
7 messages
2002/08/27
[#382] Port match to new dup, clone framework — Michal Rokos <m.rokos@...>
Hi,
5 messages
2002/08/28
[#393] in dln.c — Michal Rokos <m.rokos@...>
Hi,
14 messages
2002/08/30
[#398] Re: [MemLeak] in dln.c
— nobu.nokada@...
2002/08/31
Hi,
[#403] Re: [MemLeak] in dln.c
— Michal Rokos <m.rokos@...>
2002/09/02
Hello,
Re: [Clenup?] rb_str_replace
From:
matz@... (Yukihiro Matsumoto)
Date:
2002-08-28 16:50:30 UTC
List:
ruby-core #390
Hi,
In message "[Clenup?] rb_str_replace"
on 02/08/29, Michal Rokos <m.rokos@sh.cvut.cz> writes:
| condition FL_TEST(str2, ELTS_SHARED|STR_ASSOC) is allway true,
| because FL_TEST(str2, ELTS_SHARED) is already true.
|
| Is the cleanup really so easy? Or I'm missing something (as
| usual :-))
Thank you for finding. Probably we need this too.
|--- string.c 2002/08/28 08:05:23 1.115
|+++ string.c 2002/08/28 15:43:13
|@@ -1603,25 +1603,20 @@ rb_str_replace(str, str2)
| if (str == str2) return str;
|
| StringValue(str2);
| if (FL_TEST(str2, ELTS_SHARED)) {
| if (str_independent(str)) {
| free(RSTRING(str)->ptr);
| }
| RSTRING(str)->len = RSTRING(str2)->len;
| RSTRING(str)->ptr = RSTRING(str2)->ptr;
|- if (FL_TEST(str2, ELTS_SHARED|STR_ASSOC)) {
|- FL_SET(str, RBASIC(str2)->flags & (ELTS_SHARED|STR_ASSOC));
|- RSTRING(str)->aux.shared = RSTRING(str2)->aux.shared;
|- }
|- else {
|- RSTRING(str)->aux.capa = RSTRING(str2)->aux.capa;
|- }
|+ FL_SET(str, RBASIC(str2)->flags & (ELTS_SHARED|STR_ASSOC));
|+ RSTRING(str)->aux.shared = RSTRING(str2)->aux.shared;
| }
| else {
| rb_str_modify(str);
| rb_str_resize(str, RSTRING(str2)->len);
| memcpy(RSTRING(str)->ptr, RSTRING(str2)->ptr, RSTRING(str2)->len);
+ if (FL_TEST(str2, STR_ASSOC)) {
+ FL_SET(str, RBASIC(str2)->flags & (ELTS_SHARED|STR_ASSOC));
+ RSTRING(str)->aux.shared = RSTRING(str2)->aux.shared;
+ }
| }
|
| OBJ_INFECT(str, str2);
| return str;
|--
matz.