ruby-changes:4217
From: ko1@a...
Date: Thu, 6 Mar 2008 14:31:07 +0900 (JST)
Subject: [ruby-changes:4217] naruse - Ruby:r15707 (trunk): * transcode.c (rb_str_transcode_bang): set coderange.
naruse 2008-03-06 14:30:48 +0900 (Thu, 06 Mar 2008)
New Revision: 15707
Modified files:
trunk/ChangeLog
trunk/transcode.c
Log:
* transcode.c (rb_str_transcode_bang): set coderange.
* transcode.c (rb_str_transcode): use rb_str_transcode_bang.
http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/ChangeLog?r1=15707&r2=15706&diff_format=u
http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/transcode.c?r1=15707&r2=15706&diff_format=u
Index: ChangeLog
===================================================================
--- ChangeLog (revision 15706)
+++ ChangeLog (revision 15707)
@@ -1,3 +1,9 @@
+Thu Mar 6 14:29:44 2008 NARUSE, Yui <naruse@r...>
+
+ * transcode.c (rb_str_transcode_bang): set coderange.
+
+ * transcode.c (rb_str_transcode): use rb_str_transcode_bang.
+
Thu Mar 6 14:00:10 2008 Tanaka Akira <akr@f...>
* include/ruby/missing.h (cbrt): add declaration.
Index: transcode.c
===================================================================
--- transcode.c (revision 15706)
+++ transcode.c (revision 15707)
@@ -409,10 +409,20 @@
{
VALUE newstr = str;
int encidx = str_transcode(argc, argv, &newstr);
+ int cr = 0;
if (encidx < 0) return str;
rb_str_shared_replace(str, newstr);
rb_enc_associate_index(str, encidx);
+
+ /* transcoded string never be broken. */
+ if (rb_enc_asciicompat(rb_enc_from_index(encidx))) {
+ rb_str_coderange_scan_restartable(RSTRING_PTR(str), RSTRING_END(str), 0, &cr);
+ }
+ else {
+ cr = ENC_CODERANGE_VALID;
+ }
+ ENC_CODERANGE_SET(str, cr);
return str;
}
@@ -432,19 +442,8 @@
static VALUE
rb_str_transcode(int argc, VALUE *argv, VALUE str)
{
- VALUE newstr = str;
- int encidx = str_transcode(argc, argv, &newstr);
-
- if (newstr == str) {
- newstr = rb_str_new3(str);
- if (encidx >= 0) rb_enc_associate_index(newstr, encidx);
- }
- else {
- RBASIC(newstr)->klass = rb_obj_class(str);
- OBJ_INFECT(newstr, str);
- rb_enc_associate_index(newstr, encidx);
- }
- return newstr;
+ str = rb_str_dup(str);
+ return rb_str_transcode_bang(argc, argv, str);
}
void
--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/