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

ruby-changes:17856

From: nobu <ko1@a...>
Date: Mon, 22 Nov 2010 18:33:39 +0900 (JST)
Subject: [ruby-changes:17856] Ruby:r29868 (trunk): * string.c (rb_str_inspect): append for each chars instead of bulk

nobu	2010-11-22 18:33:32 +0900 (Mon, 22 Nov 2010)

  New Revision: 29868

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=29868

  Log:
    * string.c (rb_str_inspect): append for each chars instead of bulk
      copy if encoding conversion is needed.  [ruby-core:33283]

  Modified files:
    trunk/ChangeLog
    trunk/string.c
    trunk/test/ruby/test_string.rb

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 29867)
+++ ChangeLog	(revision 29868)
@@ -1,3 +1,8 @@
+Mon Nov 22 18:33:30 2010  Nobuyoshi Nakada  <nobu@r...>
+
+	* string.c (rb_str_inspect): append for each chars instead of bulk
+	  copy if encoding conversion is needed.  [ruby-core:33283]
+
 Mon Nov 22 14:22:45 2010  NARUSE, Yui  <naruse@r...>
 
 	* time.c (time_zone): use rb_locale_str_new_cstr to set encoding
Index: string.c
===================================================================
--- string.c	(revision 29867)
+++ string.c	(revision 29868)
@@ -4238,8 +4238,10 @@
               (cc == '$' || cc == '@' || cc == '{')))) {
 	    if (p - n > prev) str_buf_cat(result, prev, p - n - prev);
 	    str_buf_cat2(result, "\\");
-	    prev = p - n;
-	    continue;
+	    if (enc == resenc) {
+		prev = p - n;
+		continue;
+	    }
 	}
 	switch (c) {
 	  case '\n': cc = 'n'; break;
Index: test/ruby/test_string.rb
===================================================================
--- test/ruby/test_string.rb	(revision 29867)
+++ test/ruby/test_string.rb	(revision 29868)
@@ -1890,10 +1890,12 @@
   end
 
   def test_ascii_incomat_inspect
+    bug4081 = '[ruby-core:33283]'
     [Encoding::UTF_16LE, Encoding::UTF_16BE,
      Encoding::UTF_32LE, Encoding::UTF_32BE].each do |e|
       assert_equal('"abc"', "abc".encode(e).inspect)
       assert_equal('"\\u3042\\u3044\\u3046"', "\u3042\u3044\u3046".encode(e).inspect)
+      assert_equal('"ab\\"c"', "ab\"c".encode(e).inspect, bug4081)
     end
   end
 

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

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