From f62cc5b1eebb29d244977c6030c04d9cb8ebefba Mon Sep 17 00:00:00 2001 From: Ryan Scott Date: Fri, 17 May 2013 07:41:13 +1000 Subject: Changed the object_count so that it only iterates over the RBasic object, not the full RVALUE known by the GC --- src/gc.c | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/gc.c b/src/gc.c index 199551c55..f824ee9d4 100644 --- a/src/gc.c +++ b/src/gc.c @@ -73,6 +73,26 @@ */ +struct free_obj { + MRB_OBJECT_HEADER; + struct RBasic *next; +}; + +typedef struct { + union { + struct free_obj free; + struct RBasic basic; + struct RObject object; + struct RClass klass; + struct RString string; + struct RArray array; + struct RHash hash; + struct RRange range; + struct RData data; + struct RProc proc; + } as; +} RVALUE; + #ifdef GC_PROFILE #include #include @@ -1133,7 +1153,7 @@ mrb_objspace_each_objects(mrb_state *mrb, each_object_callback* callback, void * p = page->objects; pend = p + MRB_HEAP_PAGE_SIZE; for (;p < pend; p++) { - callback(p, data); + callback(mrb, p->as.basic, data); } page = page->next; -- cgit v1.2.3