ruby-changes:4010
From: ko1@a...
Date: Sat, 16 Feb 2008 13:18:34 +0900 (JST)
Subject: [ruby-changes:4010] akr - Ruby:r15500 (trunk): * string.c (rb_str_sub_bang): stringize replacing hash values.
akr 2008-02-16 13:17:52 +0900 (Sat, 16 Feb 2008)
New Revision: 15500
Modified files:
trunk/ChangeLog
trunk/string.c
Log:
* string.c (rb_str_sub_bang): stringize replacing hash values.
(str_gsub): ditto.
http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/string.c?r1=15500&r2=15499&diff_format=u
http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/ChangeLog?r1=15500&r2=15499&diff_format=u
Index: ChangeLog
===================================================================
--- ChangeLog (revision 15499)
+++ ChangeLog (revision 15500)
@@ -1,3 +1,8 @@
+Sat Feb 16 13:16:49 2008 Tanaka Akira <akr@f...>
+
+ * string.c (rb_str_sub_bang): stringize replacing hash values.
+ (str_gsub): ditto.
+
Sat Feb 16 13:01:33 2008 NARUSE, Yui <naruse@r...>
* string.c (rb_enc_strlen): add search_nonascii like character
Index: string.c
===================================================================
--- string.c (revision 15499)
+++ string.c (revision 15500)
@@ -2902,18 +2902,21 @@
match = rb_backref_get();
regs = RMATCH(match)->regs;
- if (iter) {
+ if (iter || !NIL_P(hash)) {
char *p = RSTRING_PTR(str); long len = RSTRING_LEN(str);
- rb_match_busy(match);
- repl = rb_obj_as_string(rb_yield(rb_reg_nth_match(0, match)));
+ if (iter) {
+ rb_match_busy(match);
+ repl = rb_obj_as_string(rb_yield(rb_reg_nth_match(0, match)));
+ }
+ else {
+ repl = rb_hash_aref(hash, rb_str_subseq(str, BEG(0), END(0) - BEG(0)));
+ repl = rb_obj_as_string(repl);
+ }
str_mod_check(str, p, len);
str_frozen_check(str);
- rb_backref_set(match);
+ if (iter) rb_backref_set(match);
}
- else if (!NIL_P(hash)) {
- repl = rb_hash_aref(hash, rb_str_subseq(str, BEG(0), END(0) - BEG(0)));
- }
else {
repl = rb_reg_regsub(repl, str, regs, pat);
}
@@ -3045,19 +3048,22 @@
n++;
match = rb_backref_get();
regs = RMATCH(match)->regs;
- if (iter) {
- rb_match_busy(match);
- val = rb_obj_as_string(rb_yield(rb_reg_nth_match(0, match)));
+ if (iter || !NIL_P(hash)) {
+ if (iter) {
+ rb_match_busy(match);
+ val = rb_obj_as_string(rb_yield(rb_reg_nth_match(0, match)));
+ }
+ else {
+ val = rb_hash_aref(hash, rb_str_subseq(str, BEG(0), END(0) - BEG(0)));
+ val = rb_obj_as_string(val);
+ }
str_mod_check(str, sp, slen);
if (bang) str_frozen_check(str);
if (val == dest) { /* paranoid check [ruby-dev:24827] */
rb_raise(rb_eRuntimeError, "block should not cheat");
}
- rb_backref_set(match);
+ if (iter) rb_backref_set(match);
}
- else if (!NIL_P(hash)) {
- val = rb_hash_aref(hash, rb_str_subseq(str, BEG(0), END(0) - BEG(0)));
- }
else {
val = rb_reg_regsub(repl, str, regs, pat);
}
--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/