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

ruby-changes:8618

From: yugui <ko1@a...>
Date: Sat, 8 Nov 2008 20:09:25 +0900 (JST)
Subject: [ruby-changes:8618] Ruby:r20153 (trunk): merges r20050 from ruby_1_9_1 into trunk.

yugui	2008-11-08 20:09:20 +0900 (Sat, 08 Nov 2008)

  New Revision: 20153

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

  Log:
    merges r20050 from ruby_1_9_1 into trunk.
    * array.c (rb_ary_sort_bang): refactoring.

  Modified files:
    trunk/array.c

Index: array.c
===================================================================
--- array.c	(revision 20152)
+++ array.c	(revision 20153)
@@ -1769,19 +1769,25 @@
             assert(ARY_EMBED_P(tmp));
             if (ARY_SHARED_P(ary)) { /* ary might be destructively operated in the given block */
                 rb_ary_unshare(ary);
-                FL_SET_EMBED(ary);
             }
+            FL_SET_EMBED(ary);
             MEMCPY(RARRAY_PTR(ary), ARY_EMBED_PTR(tmp), VALUE, ARY_EMBED_LEN(tmp));
             ARY_SET_LEN(ary, ARY_EMBED_LEN(tmp));
         }
         else {
             assert(!ARY_EMBED_P(tmp));
-            if (ARY_EMBED_P(ary) || RARRAY_PTR(ary) != RARRAY_PTR(tmp)) {
+            if (ARY_HEAP_PTR(ary) == ARY_HEAP_PTR(tmp)) {
+                assert(!ARY_EMBED_P(ary));
+                FL_UNSET_SHARED(ary);
+                ARY_SET_CAPA(ary, ARY_CAPA(tmp));
+            }
+            else {
                 assert(!ARY_SHARED_P(tmp));
                 if (ARY_EMBED_P(ary)) {
                     FL_UNSET_EMBED(ary);
                 }
                 else if (ARY_SHARED_P(ary)) {
+                    /* ary might be destructively operated in the given block */
                     rb_ary_unshare(ary);
                 }
                 else {
@@ -1791,10 +1797,6 @@
                 ARY_SET_HEAP_LEN(ary, RARRAY_LEN(tmp));
                 ARY_SET_CAPA(ary, ARY_CAPA(tmp));
             } 
-            else {
-                FL_UNSET_SHARED(ary);
-                ARY_SET_CAPA(ary, ARY_CAPA(tmp));
-            }
             /* tmp was lost ownership for the ptr */
             FL_UNSET(tmp, FL_FREEZE);
             FL_SET_EMBED(tmp);

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

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