From 1c5b309211c8d41b2624766fdeb60cc5fa3faf94 Mon Sep 17 00:00:00 2001 From: ko1 Date: Sat, 8 Dec 2012 00:18:42 +0000 Subject: * ext/objspace/objspace.c (iow_size): return size of internal object for ObjectSpace.memsize_of(). * test/objspace/test_objspace.rb: add a test. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@38266 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 7 +++++++ ext/objspace/objspace.c | 9 ++++++++- test/objspace/test_objspace.rb | 10 ++++++++++ 3 files changed, 25 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 7eefd82515..becfc37d48 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +Sat Dec 8 07:57:12 2012 Koichi Sasada + + * ext/objspace/objspace.c (iow_size): return size of internal object + for ObjectSpace.memsize_of(). + + * test/objspace/test_objspace.rb: add a test. + Tue Dec 08 02:39:23 2012 James Edward Gray II * lib/csv.rb: A fix for row comparison by Stephen Wattam. [Bug #7528] diff --git a/ext/objspace/objspace.c b/ext/objspace/objspace.c index 1889f11382..5d585d69a1 100644 --- a/ext/objspace/objspace.c +++ b/ext/objspace/objspace.c @@ -639,9 +639,16 @@ iow_mark(void *ptr) rb_gc_mark((VALUE)ptr); } +static size_t +iow_size(const void *ptr) +{ + VALUE obj = (VALUE)ptr; + return memsize_of(obj); +} + static const rb_data_type_t iow_data_type = { "ObjectSpace::InternalObjectWrapper", - {iow_mark, 0, 0,}, + {iow_mark, 0, iow_size,}, }; static VALUE rb_mInternalObjectWrapper; diff --git a/test/objspace/test_objspace.rb b/test/objspace/test_objspace.rb index 723e6e431e..eeb8ffa664 100644 --- a/test/objspace/test_objspace.rb +++ b/test/objspace/test_objspace.rb @@ -92,4 +92,14 @@ class TestObjSpace < Test::Unit::TestCase } assert_operator(max, :>=, 1_001, "1000 elems + Array class") end + + def test_reachable_objects_size + ObjectSpace.each_object{|o| + ObjectSpace.reachable_objects_from(o).each{|reached_obj| + size = ObjectSpace.memsize_of(reached_obj) + assert_kind_of(Integer, size) + assert_operator(size, :>=, 0) + } + } + end end -- cgit v1.2.3