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

ruby-changes:5377

From: akr <ko1@a...>
Date: Sun, 8 Jun 2008 01:20:15 +0900 (JST)
Subject: [ruby-changes:5377] Ruby:r16880 (trunk, ruby_1_8): * hash.c (hash_i): make Hash#hash order insensitive.

akr	2008-06-08 01:19:47 +0900 (Sun, 08 Jun 2008)

  New Revision: 16880

  Modified files:
    branches/ruby_1_8/ChangeLog
    branches/ruby_1_8/hash.c
    branches/ruby_1_8/test/ruby/test_hash.rb
    trunk/ChangeLog
    trunk/hash.c
    trunk/test/ruby/test_hash.rb

  Log:
    * hash.c (hash_i): make Hash#hash order insensitive.


  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/test/ruby/test_hash.rb?r1=16880&r2=16879&diff_format=u
  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/hash.c?r1=16880&r2=16879&diff_format=u
  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/branches/ruby_1_8/ChangeLog?r1=16880&r2=16879&diff_format=u
  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/ChangeLog?r1=16880&r2=16879&diff_format=u
  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/branches/ruby_1_8/test/ruby/test_hash.rb?r1=16880&r2=16879&diff_format=u
  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/branches/ruby_1_8/hash.c?r1=16880&r2=16879&diff_format=u

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 16879)
+++ ChangeLog	(revision 16880)
@@ -1,3 +1,8 @@
+Sun Jun  8 01:15:11 2008  Tanaka Akira  <akr@f...>
+
+	* hash.c (hash_i): make Hash#hash order insensitive.
+	  (rb_hash_dup): use DUPSETUP.
+
 Sat Jun  7 23:47:35 2008  Akinori MUSHA  <knu@i...>
 
 	* ext/zlib/zlib.c (rb_deflate_initialize, Init_zlib): Fix up
Index: hash.c
===================================================================
--- hash.c	(revision 16879)
+++ hash.c	(revision 16880)
@@ -231,14 +231,16 @@
 VALUE
 rb_hash_dup(VALUE hash)
 {
-    VALUE ret = hash_alloc(RBASIC(hash)->klass);
+    NEWOBJ(ret, struct RHash);
+    DUPSETUP(ret, hash);
+
     if (!RHASH_EMPTY_P(hash))
-        RHASH(ret)->ntbl = st_copy(RHASH(hash)->ntbl);
+        ret->ntbl = st_copy(RHASH(hash)->ntbl);
     if (FL_TEST(hash, HASH_PROC_DEFAULT)) {
         FL_SET(ret, HASH_PROC_DEFAULT);
     }
-    RHASH(ret)->ifnone = RHASH(hash)->ifnone;
-    return ret;
+    ret->ifnone = RHASH(hash)->ifnone;
+    return (VALUE)ret;
 }
 
 static void
@@ -1470,7 +1472,6 @@
 {
     if (key == Qundef) return ST_CONTINUE;
     *hval ^= rb_hash(key);
-    *hval *= 137;
     *hval ^= rb_hash(val);
     return ST_CONTINUE;
 }
Index: test/ruby/test_hash.rb
===================================================================
--- test/ruby/test_hash.rb	(revision 16879)
+++ test/ruby/test_hash.rb	(revision 16880)
@@ -830,4 +830,8 @@
     #assert_equal("bar", h[a])
     assert_nil(h["foo"])
   end
+
+  def test_hash_hash
+    assert_equal({0=>2,11=>1}.hash, {11=>1,0=>2}.hash)
+  end
 end
Index: ruby_1_8/hash.c
===================================================================
--- ruby_1_8/hash.c	(revision 16879)
+++ ruby_1_8/hash.c	(revision 16880)
@@ -1602,7 +1602,6 @@
 {
     if (key == Qundef) return ST_CONTINUE;
     *hval ^= rb_hash(key);
-    *hval *= 137;
     *hval ^= rb_hash(val);
     return ST_CONTINUE;
 }
Index: ruby_1_8/ChangeLog
===================================================================
--- ruby_1_8/ChangeLog	(revision 16879)
+++ ruby_1_8/ChangeLog	(revision 16880)
@@ -1,3 +1,7 @@
+Sun Jun  8 01:15:11 2008  Tanaka Akira  <akr@f...>
+
+	* hash.c (hash_i): make Hash#hash order insensitive.
+
 Sat Jun  7 22:15:02 2008  Nobuyoshi Nakada  <nobu@r...>
 
 	* configure.in (VENDOR_DIR): use LIBDIR instead of PREFIX as well as
Index: ruby_1_8/test/ruby/test_hash.rb
===================================================================
--- ruby_1_8/test/ruby/test_hash.rb	(revision 16879)
+++ ruby_1_8/test/ruby/test_hash.rb	(revision 16880)
@@ -635,4 +635,7 @@
     assert_equal([], expected - vals)
   end
 
+  def test_hash_hash
+    assert_equal({0=>2,11=>1}.hash, {11=>1,0=>2}.hash)
+  end
 end

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

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