mruby  2.0.1
mruby is the lightweight implementation of the Ruby language
gc.h
Go to the documentation of this file.
1 
7 #ifndef MRUBY_GC_H
8 #define MRUBY_GC_H
9 
10 #include "common.h"
11 
16 
17 
18 struct mrb_state;
19 
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);
25 
26 #ifndef MRB_GC_ARENA_SIZE
27 #define MRB_GC_ARENA_SIZE 100
28 #endif
29 
30 typedef enum {
31  MRB_GC_STATE_ROOT = 0,
32  MRB_GC_STATE_MARK,
33  MRB_GC_STATE_SWEEP
34 } mrb_gc_state;
35 
36 /* Disable MSVC warning "C4200: nonstandard extension used: zero-sized array
37  * in struct/union" when in C++ mode */
38 #ifdef _MSC_VER
39 #pragma warning(push)
40 #pragma warning(disable : 4200)
41 #endif
42 
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;
49  mrb_bool old:1;
50  void *objects[];
52 
53 #ifdef _MSC_VER
54 #pragma warning(pop)
55 #endif
56 
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 */
64 #else
65  struct RBasic **arena; /* GC protection array */
66  int arena_capa;
67 #endif
68  int arena_idx;
69 
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;
75  size_t threshold;
76  int interval_ratio;
77  int step_ratio;
78  mrb_bool iterating :1;
79  mrb_bool disabled :1;
80  mrb_bool full :1;
81  mrb_bool generational :1;
82  mrb_bool out_of_memory :1;
83  size_t majorgc_old_threshold;
84 } mrb_gc;
85 
87 mrb_object_dead_p(struct mrb_state *mrb, struct RBasic *object);
88 
90 
91 #endif /* MRUBY_GC_H */
Definition: gc.h:57
Definition: mruby.h:153
mruby Boolean.
Definition: object.h:19
#define MRB_BEGIN_DECL
Start declarations in C mode.
Definition: common.h:26
Definition: gc.h:43
#define MRB_API
Declare a public MRuby API function.
Definition: common.h:73
#define MRB_END_DECL
End declarations in C mode.
Definition: common.h:28
mruby common platform definition"
Definition: mruby.h:215