ruby-changes:5227
From: akr <ko1@a...>
Date: Sat, 31 May 2008 23:03:41 +0900 (JST)
Subject: [ruby-changes:5227] Ruby:r16724 (trunk): * gc.c (count_objects): clear given hash.
akr 2008-05-31 23:03:23 +0900 (Sat, 31 May 2008)
New Revision: 16724
Modified files:
trunk/ChangeLog
trunk/gc.c
trunk/test/ruby/test_objectspace.rb
Log:
* gc.c (count_objects): clear given hash.
http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/ChangeLog?r1=16724&r2=16723&diff_format=u
http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/gc.c?r1=16724&r2=16723&diff_format=u
http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/test/ruby/test_objectspace.rb?r1=16724&r2=16723&diff_format=u
Index: ChangeLog
===================================================================
--- ChangeLog (revision 16723)
+++ ChangeLog (revision 16724)
@@ -1,3 +1,7 @@
+Sat May 31 23:02:00 2008 Tanaka Akira <akr@f...>
+
+ * gc.c (count_objects): clear given hash.
+
Sat May 31 20:28:10 2008 Yusuke Endoh <mame@t...>
* test/ruby/test_regexp.rb: add tests.
Index: gc.c
===================================================================
--- gc.c (revision 16723)
+++ gc.c (revision 16724)
@@ -2239,6 +2239,15 @@
return (VALUE)((SIGNED_VALUE)obj|FIXNUM_FLAG);
}
+static int
+set_zero(st_data_t key, st_data_t val, st_data_t arg)
+{
+ VALUE k = (VALUE)key;
+ VALUE hash = (VALUE)arg;
+ rb_hash_aset(hash, k, INT2FIX(0));
+ return ST_CONTINUE;
+}
+
/*
* call-seq:
* ObjectSpace.count_objects([result_hash]) -> hash
@@ -2272,6 +2281,9 @@
if (rb_scan_args(argc, argv, "01", &hash) == 1) {
if (TYPE(hash) != T_HASH)
rb_raise(rb_eTypeError, "non-hash given");
+ if (!RHASH_EMPTY_P(hash)) {
+ st_foreach(RHASH_TBL(hash), set_zero, hash);
+ }
}
for (i = 0; i <= T_MASK; i++) {
Index: test/ruby/test_objectspace.rb
===================================================================
--- test/ruby/test_objectspace.rb (revision 16723)
+++ test/ruby/test_objectspace.rb (revision 16724)
@@ -47,5 +47,11 @@
assert(h.values.all? {|x| x.is_a?(Integer) })
assert_raise(TypeError) { ObjectSpace.count_objects(1) }
+
+ h0 = {:T_FOO=>1000}
+ h = ObjectSpace.count_objects(h0)
+ p h0.equal?(h)
+ assert_same(h0, h)
+ assert_equal(0, h0[:T_FOO])
end
end
--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/