[前][次][番号順一覧][スレッド一覧]

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/

[前][次][番号順一覧][スレッド一覧]