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

ruby-changes:10668

From: nobu <ko1@a...>
Date: Wed, 11 Feb 2009 15:47:23 +0900 (JST)
Subject: [ruby-changes:10668] Ruby:r22231 (trunk): * array.c (ary_make_shared): returns shared root array itself, and

nobu	2009-02-11 15:47:12 +0900 (Wed, 11 Feb 2009)

  New Revision: 22231

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

  Log:
    * array.c (ary_make_shared): returns shared root array itself, and
      frozen array can be shared.

  Modified files:
    trunk/ChangeLog
    trunk/array.c

Index: array.c
===================================================================
--- array.c	(revision 22230)
+++ array.c	(revision 22231)
@@ -211,14 +211,16 @@
 }
 
 static inline void
-rb_ary_unshare_safe(VALUE ary) {
+rb_ary_unshare_safe(VALUE ary)
+{
     if (ARY_SHARED_P(ary) && !ARY_EMBED_P(ary)) {
 	rb_ary_unshare(ary);
     }
 }
 
 static VALUE
-rb_ary_increment_share(VALUE shared) {
+rb_ary_increment_share(VALUE shared)
+{
     int num = ARY_SHARED_NUM(shared);
     if (num >= 0) {
 	ARY_SET_SHARED_NUM(shared, num + 1);
@@ -390,6 +392,15 @@
     if (ARY_SHARED_P(ary)) {
 	return ARY_SHARED(ary);
     }
+    else if (ARY_SHARED_ROOT_P(ary)) {
+	return ary;
+    }
+    else if (OBJ_FROZEN(ary)) {
+	ary_resize_capa(ary, ARY_HEAP_LEN(ary));
+	FL_SET_SHARED_ROOT(ary);
+	ARY_SET_SHARED_NUM(ary, 0);
+	return ary;
+    }
     else {
 	NEWOBJ(shared, struct RArray);
 	OBJSETUP(shared, 0, T_ARRAY);
@@ -2389,7 +2400,8 @@
         VALUE shared = ary_make_shared(orig);
         if (ARY_OWNS_HEAP_P(copy)) {
             xfree(RARRAY_PTR(copy));
-        } else {
+        }
+        else {
             rb_ary_unshare_safe(copy);
         }
         FL_UNSET_EMBED(copy);
Index: ChangeLog
===================================================================
--- ChangeLog	(revision 22230)
+++ ChangeLog	(revision 22231)
@@ -1,3 +1,8 @@
+Wed Feb 11 15:47:10 2009  Nobuyoshi Nakada  <nobu@r...>
+
+	* array.c (ary_make_shared): returns shared root array itself, and
+	  frozen array can be shared.
+
 Wed Feb 11 14:46:16 2009  Nobuyoshi Nakada  <nobu@r...>
 
 	* insns.def (setspecial, putstring): fixed typos in rdoc.

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

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