summaryrefslogtreecommitdiffhomepage
path: root/src/gc.c
diff options
context:
space:
mode:
authorRyan Scott <[email protected]>2013-05-17 07:41:13 +1000
committerRyan Scott <[email protected]>2013-05-17 07:41:13 +1000
commitf62cc5b1eebb29d244977c6030c04d9cb8ebefba (patch)
tree188d07664a7a32ae8e229bfb75028d9a5afcc598 /src/gc.c
parent222918deae84ae8dda26aa769bf3cc6b68e3aeec (diff)
downloadmruby-f62cc5b1eebb29d244977c6030c04d9cb8ebefba.tar.gz
mruby-f62cc5b1eebb29d244977c6030c04d9cb8ebefba.zip
Changed the object_count so that it only iterates over the RBasic object, not the full RVALUE known by the GC
Diffstat (limited to 'src/gc.c')
-rw-r--r--src/gc.c22
1 files changed, 21 insertions, 1 deletions
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 <stdio.h>
#include <sys/time.h>
@@ -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;