diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2013-05-18 11:19:25 +0900 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2013-05-18 11:19:25 +0900 |
| commit | 834ea241e06d084e666bab1644a61f00492db787 (patch) | |
| tree | 8f4875cf9c8f78336031c964136fe029f9e93e69 /src/gc.c | |
| parent | 36216ac6f7373c879ca103a30b55cab21a339415 (diff) | |
| parent | 8161f0f6d7f89ad723163943d2d3abc38cd02df5 (diff) | |
| download | mruby-834ea241e06d084e666bab1644a61f00492db787.tar.gz mruby-834ea241e06d084e666bab1644a61f00492db787.zip | |
Merge branch 'master' of https://github.com/Archytaus/mruby into Archytaus-master
Diffstat (limited to 'src/gc.c')
| -rw-r--r-- | src/gc.c | 20 |
1 files changed, 20 insertions, 0 deletions
@@ -20,6 +20,7 @@ #include "mruby/range.h" #include "mruby/string.h" #include "mruby/variable.h" +#include "mruby/gc.h" /* = Tri-color Incremental Garbage Collection @@ -1141,6 +1142,24 @@ gc_generational_mode_set(mrb_state *mrb, mrb_value self) return mrb_bool_value(enable); } +void +mrb_objspace_each_objects(mrb_state *mrb, each_object_callback* callback, void *data) +{ + struct heap_page* page = mrb->heaps; + + while (page != NULL) { + RVALUE *p, *pend; + + p = page->objects; + pend = p + MRB_HEAP_PAGE_SIZE; + for (;p < pend; p++) { + (*callback)(mrb, &p->as.basic, data); + } + + page = page->next; + } +} + #ifdef GC_TEST #ifdef GC_DEBUG static mrb_value gc_test(mrb_state *, mrb_value); @@ -1151,6 +1170,7 @@ void mrb_init_gc(mrb_state *mrb) { struct RClass *gc; + gc = mrb_define_module(mrb, "GC"); mrb_define_class_method(mrb, gc, "start", gc_start, MRB_ARGS_NONE()); |
