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

ruby-changes:11986

From: matz <ko1@a...>
Date: Mon, 8 Jun 2009 14:44:33 +0900 (JST)
Subject: [ruby-changes:11986] Ruby:r23650 (trunk): * hash.c (rb_hash_reject_bang): always check frozen status.

matz	2009-06-08 14:44:17 +0900 (Mon, 08 Jun 2009)

  New Revision: 23650

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

  Log:
    * hash.c (rb_hash_reject_bang): always check frozen status.
      [ruby-core:23715]
    * hash.c (rb_hash_update): ditto.
    
    * hash.c (rb_hash_reject_bang): call rb_hash_foreach() directly.
    
    * hash.c (rb_hash_update_i): call st_insert() directly.
    
    * hash.c (rb_hash_update_block_i): ditto.

  Modified files:
    trunk/ChangeLog
    trunk/hash.c

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 23649)
+++ ChangeLog	(revision 23650)
@@ -9,6 +9,19 @@
 
 	* lib/cmath.rb (log): avoided redundant expression.
 
+Sat Jun  6 02:49:05 2009  Yukihiro Matsumoto  <matz@r...>
+
+	* hash.c (rb_hash_reject_bang): always check frozen status.
+	  [ruby-core:23715]
+
+	* hash.c (rb_hash_update): ditto.
+
+	* hash.c (rb_hash_reject_bang): call rb_hash_foreach() directly.
+
+	* hash.c (rb_hash_update_i): call st_insert() directly.
+
+	* hash.c (rb_hash_update_block_i): ditto.
+
 Fri Jun  5 07:12:32 2009  Yukihiro Matsumoto  <matz@r...>
 
 	* lib/mkmf.rb (#link_command): should dup CONFTEST_C which is
Index: hash.c
===================================================================
--- hash.c	(revision 23649)
+++ hash.c	(revision 23650)
@@ -882,10 +882,11 @@
     st_index_t n;
 
     RETURN_ENUMERATOR(hash, 0, 0);
+    rb_hash_modify(hash);
     if (!RHASH(hash)->ntbl)
         return Qnil;
     n = RHASH(hash)->ntbl->num_entries;
-    rb_hash_delete_if(hash);
+    rb_hash_foreach(hash, delete_if_i, hash);
     if (n == RHASH(hash)->ntbl->num_entries) return Qnil;
     return hash;
 }
@@ -1601,7 +1602,7 @@
 rb_hash_update_i(VALUE key, VALUE value, VALUE hash)
 {
     if (key == Qundef) return ST_CONTINUE;
-    rb_hash_aset(hash, key, value);
+    st_insert(RHASH(hash)->ntbl, key, value);
     return ST_CONTINUE;
 }
 
@@ -1612,7 +1613,7 @@
     if (rb_hash_has_key(hash, key)) {
 	value = rb_yield_values(3, key, rb_hash_aref(hash, key), value);
     }
-    rb_hash_aset(hash, key, value);
+    st_insert(RHASH(hash)->ntbl, key, value);
     return ST_CONTINUE;
 }
 
@@ -1642,6 +1643,7 @@
 static VALUE
 rb_hash_update(VALUE hash1, VALUE hash2)
 {
+    rb_hash_modify(hash1);
     hash2 = to_hash(hash2);
     if (rb_block_given_p()) {
 	rb_hash_foreach(hash2, rb_hash_update_block_i, hash1);

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

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