2 ** mruby/gc.h - garbage collector for mruby
4 ** See Copyright Notice in mruby.h
13 * Uncommon memory management stuffs.
20 #define MRB_EACH_OBJ_OK 0
21 #define MRB_EACH_OBJ_BREAK 1
22 typedef int (mrb_each_object_callback)(struct mrb_state *mrb, struct RBasic *obj, void *data);
23 void mrb_objspace_each_objects(struct mrb_state *mrb, mrb_each_object_callback *callback, void *data);
24 MRB_API void mrb_free_context(struct mrb_state *mrb, struct mrb_context *c);
26 #ifndef MRB_GC_ARENA_SIZE
27 #define MRB_GC_ARENA_SIZE 100
31 MRB_GC_STATE_ROOT = 0,
36 /* Disable MSVC warning "C4200: nonstandard extension used: zero-sized array
37 * in struct/union" when in C++ mode */
40 #pragma warning(disable : 4200)
43 typedef struct mrb_heap_page {
44 struct RBasic *freelist;
45 struct mrb_heap_page *prev;
46 struct mrb_heap_page *next;
47 struct mrb_heap_page *free_next;
48 struct mrb_heap_page *free_prev;
57 typedef struct mrb_gc {
58 mrb_heap_page *heaps; /* heaps for GC */
59 mrb_heap_page *sweeps;
60 mrb_heap_page *free_heaps;
61 size_t live; /* count of live objects */
62 #ifdef MRB_GC_FIXED_ARENA
63 struct RBasic *arena[MRB_GC_ARENA_SIZE]; /* GC protection array */
65 struct RBasic **arena; /* GC protection array */
70 mrb_gc_state state; /* state of gc */
71 int current_white_part; /* make white object by white_part */
72 struct RBasic *gray_list; /* list of gray objects to be traversed incrementally */
73 struct RBasic *atomic_gray_list; /* list of objects to be traversed atomically */
74 size_t live_after_mark;
78 mrb_bool iterating :1;
81 mrb_bool generational :1;
82 mrb_bool out_of_memory :1;
83 size_t majorgc_old_threshold;
87 mrb_object_dead_p(struct mrb_state *mrb, struct RBasic *object);
91 #endif /* MRUBY_GC_H */