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

ruby-changes:33017

From: nagachika <ko1@a...>
Date: Sat, 22 Feb 2014 11:49:19 +0900 (JST)
Subject: [ruby-changes:33017] nagachika:r45096 (ruby_2_0_0): merge revision(s) r45076: [Backport #9535]

nagachika	2014-02-22 11:49:01 +0900 (Sat, 22 Feb 2014)

  New Revision: 45096

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

  Log:
    merge revision(s) r45076: [Backport #9535]
    
    * class.c (rb_mod_init_copy): do nothing if copying self.
      [ruby-dev:47989] [Bug #9535]
    
    * hash.c (rb_hash_initialize_copy): ditto.

  Modified directories:
    branches/ruby_2_0_0/
  Modified files:
    branches/ruby_2_0_0/ChangeLog
    branches/ruby_2_0_0/class.c
    branches/ruby_2_0_0/ext/bigdecimal/bigdecimal.c
    branches/ruby_2_0_0/ext/json/generator/generator.c
    branches/ruby_2_0_0/ext/zlib/zlib.c
    branches/ruby_2_0_0/hash.c
    branches/ruby_2_0_0/test/ruby/test_hash.rb
    branches/ruby_2_0_0/test/ruby/test_module.rb
    branches/ruby_2_0_0/version.h
Index: ruby_2_0_0/ChangeLog
===================================================================
--- ruby_2_0_0/ChangeLog	(revision 45095)
+++ ruby_2_0_0/ChangeLog	(revision 45096)
@@ -1,3 +1,10 @@ https://github.com/ruby/ruby/blob/trunk/ruby_2_0_0/ChangeLog#L1
+Sat Feb 22 11:44:50 2014  Nobuyoshi Nakada  <nobu@r...>
+
+	* class.c (rb_mod_init_copy): do nothing if copying self.
+	  [ruby-dev:47989] [Bug #9535]
+
+	* hash.c (rb_hash_initialize_copy): ditto.
+
 Thu Feb 20 02:14:18 2014  Zachary Scott  <e@z...>
 
 	* ext/openssl/lib/openssl/buffering.rb: Fix warning in copyright
Index: ruby_2_0_0/class.c
===================================================================
--- ruby_2_0_0/class.c	(revision 45095)
+++ ruby_2_0_0/class.c	(revision 45096)
@@ -198,7 +198,7 @@ rb_mod_init_copy(VALUE clone, VALUE orig https://github.com/ruby/ruby/blob/trunk/ruby_2_0_0/class.c#L198
     if (RB_TYPE_P(clone, T_CLASS)) {
 	class_init_copy_check(clone, orig);
     }
-    rb_obj_init_copy(clone, orig);
+    if (!OBJ_INIT_COPY(clone, orig)) return clone;
     if (!FL_TEST(CLASS_OF(clone), FL_SINGLETON)) {
 	RBASIC(clone)->klass = rb_singleton_class_clone(orig);
 	rb_singleton_class_attached(RBASIC(clone)->klass, (VALUE)clone);
Index: ruby_2_0_0/ext/bigdecimal/bigdecimal.c
===================================================================
--- ruby_2_0_0/ext/bigdecimal/bigdecimal.c	(revision 45095)
+++ ruby_2_0_0/ext/bigdecimal/bigdecimal.c	(revision 45096)
@@ -2427,7 +2427,9 @@ BigDecimal_initialize_copy(VALUE self, V https://github.com/ruby/ruby/blob/trunk/ruby_2_0_0/ext/bigdecimal/bigdecimal.c#L2427
     Real *pv = rb_check_typeddata(self, &BigDecimal_data_type);
     Real *x = rb_check_typeddata(other, &BigDecimal_data_type);
 
-    DATA_PTR(self) = VpCopy(pv, x);
+    if (self != other) {
+	DATA_PTR(self) = VpCopy(pv, x);
+    }
     return self;
 }
 
Index: ruby_2_0_0/ext/zlib/zlib.c
===================================================================
--- ruby_2_0_0/ext/zlib/zlib.c	(revision 45095)
+++ ruby_2_0_0/ext/zlib/zlib.c	(revision 45096)
@@ -1554,6 +1554,7 @@ rb_deflate_init_copy(VALUE self, VALUE o https://github.com/ruby/ruby/blob/trunk/ruby_2_0_0/ext/zlib/zlib.c#L1554
     Data_Get_Struct(self, struct zstream, z1);
     z2 = get_zstream(orig);
 
+    if (z1 == z2) return self;
     err = deflateCopy(&z1->stream, &z2->stream);
     if (err != Z_OK) {
 	raise_zlib_error(err, 0);
Index: ruby_2_0_0/ext/json/generator/generator.c
===================================================================
--- ruby_2_0_0/ext/json/generator/generator.c	(revision 45095)
+++ ruby_2_0_0/ext/json/generator/generator.c	(revision 45096)
@@ -957,6 +957,7 @@ static VALUE cState_init_copy(VALUE obj, https://github.com/ruby/ruby/blob/trunk/ruby_2_0_0/ext/json/generator/generator.c#L957
 {
     JSON_Generator_State *objState, *origState;
 
+    if (obj == orig) return obj;
     Data_Get_Struct(obj, JSON_Generator_State, objState);
     Data_Get_Struct(orig, JSON_Generator_State, origState);
     if (!objState) rb_raise(rb_eArgError, "unallocated JSON::State");
Index: ruby_2_0_0/hash.c
===================================================================
--- ruby_2_0_0/hash.c	(revision 45095)
+++ ruby_2_0_0/hash.c	(revision 45096)
@@ -1240,6 +1240,8 @@ rb_hash_initialize_copy(VALUE hash, VALU https://github.com/ruby/ruby/blob/trunk/ruby_2_0_0/hash.c#L1240
 
     Check_Type(hash2, T_HASH);
 
+    if (hash == hash2) return hash;
+
     ntbl = RHASH(hash)->ntbl;
     if (RHASH(hash2)->ntbl) {
 	if (ntbl) st_free_table(ntbl);
Index: ruby_2_0_0/version.h
===================================================================
--- ruby_2_0_0/version.h	(revision 45095)
+++ ruby_2_0_0/version.h	(revision 45096)
@@ -1,10 +1,10 @@ https://github.com/ruby/ruby/blob/trunk/ruby_2_0_0/version.h#L1
 #define RUBY_VERSION "2.0.0"
-#define RUBY_RELEASE_DATE "2014-02-21"
-#define RUBY_PATCHLEVEL 443
+#define RUBY_RELEASE_DATE "2014-02-22"
+#define RUBY_PATCHLEVEL 444
 
 #define RUBY_RELEASE_YEAR 2014
 #define RUBY_RELEASE_MONTH 2
-#define RUBY_RELEASE_DAY 21
+#define RUBY_RELEASE_DAY 22
 
 #include "ruby/version.h"
 
Index: ruby_2_0_0/test/ruby/test_module.rb
===================================================================
--- ruby_2_0_0/test/ruby/test_module.rb	(revision 45095)
+++ ruby_2_0_0/test/ruby/test_module.rb	(revision 45096)
@@ -309,6 +309,17 @@ class TestModule < Test::Unit::TestCase https://github.com/ruby/ruby/blob/trunk/ruby_2_0_0/test/ruby/test_module.rb#L309
     assert_equal([:MIXIN, :USER], User.constants.sort)
   end
 
+  def test_self_initialize_copy
+    bug9535 = '[ruby-dev:47989] [Bug #9535]'
+    m = Module.new do
+      def foo
+        :ok
+      end
+      initialize_copy(self)
+    end
+    assert_equal(:ok, Object.new.extend(m).foo, bug9535)
+  end
+
   def test_dup
     bug6454 = '[ruby-core:45132]'
 
Index: ruby_2_0_0/test/ruby/test_hash.rb
===================================================================
--- ruby_2_0_0/test/ruby/test_hash.rb	(revision 45095)
+++ ruby_2_0_0/test/ruby/test_hash.rb	(revision 45096)
@@ -108,6 +108,12 @@ class TestHash < Test::Unit::TestCase https://github.com/ruby/ruby/blob/trunk/ruby_2_0_0/test/ruby/test_hash.rb#L108
     assert_empty(h)
   end
 
+  def test_self_initialize_copy
+    h = @cls[1=>2]
+    h.instance_eval {initialize_copy(h)}
+    assert_equal(2, h[1])
+  end
+
   def test_dup_will_rehash
     set1 = @cls[]
     set2 = @cls[set1 => true]

Property changes on: ruby_2_0_0
___________________________________________________________________
Modified: svn:mergeinfo
   Merged /trunk:r45076


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

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