summaryrefslogtreecommitdiffhomepage
path: root/include
diff options
context:
space:
mode:
Diffstat (limited to 'include')
-rw-r--r--include/mruby.h29
-rw-r--r--include/mruby/gc.h1
-rw-r--r--include/mruby/value.h11
3 files changed, 27 insertions, 14 deletions
diff --git a/include/mruby.h b/include/mruby.h
index 9fe70e5b8..73c38cf1d 100644
--- a/include/mruby.h
+++ b/include/mruby.h
@@ -61,16 +61,8 @@ typedef struct {
struct REnv *env;
} mrb_callinfo;
-enum gc_state {
- GC_STATE_NONE = 0,
- GC_STATE_MARK,
- GC_STATE_SWEEP
-};
-
-typedef struct mrb_state {
- void *jmp;
-
- mrb_allocf allocf;
+struct mrb_context {
+ struct mrb_context *prev;
mrb_value *stack;
mrb_value *stbase, *stend;
@@ -82,10 +74,24 @@ typedef struct mrb_state {
int rsize;
struct RProc **ensure;
int esize;
+};
+
+enum gc_state {
+ GC_STATE_NONE = 0,
+ GC_STATE_MARK,
+ GC_STATE_SWEEP
+};
+
+typedef struct mrb_state {
+ void *jmp;
+
+ mrb_allocf allocf;
+
+ struct mrb_context *c;
+ struct mrb_context *root_c;
struct RObject *exc;
struct iv_tbl *globals;
-
struct mrb_irep **irep;
size_t irep_len, irep_capa;
@@ -140,7 +146,6 @@ typedef struct mrb_state {
struct RClass *eStandardError_class;
void *ud; /* auxiliary data */
-
} mrb_state;
typedef mrb_value (*mrb_func_t)(mrb_state *mrb, mrb_value);
diff --git a/include/mruby/gc.h b/include/mruby/gc.h
index 2f7dc73cf..7afa24b48 100644
--- a/include/mruby/gc.h
+++ b/include/mruby/gc.h
@@ -12,5 +12,6 @@
typedef void (each_object_callback)(mrb_state *mrb, struct RBasic* obj, void *data);
void mrb_objspace_each_objects(mrb_state *mrb, each_object_callback* callback, void *data);
+void mrb_free_context(mrb_state *mrb, struct mrb_context *c);
#endif /* MRUBY_GC_H */
diff --git a/include/mruby/value.h b/include/mruby/value.h
index 0ce59e06a..fa2a68ac8 100644
--- a/include/mruby/value.h
+++ b/include/mruby/value.h
@@ -34,7 +34,8 @@ enum mrb_vtype {
MRB_TT_FILE, /* 19 */
MRB_TT_ENV, /* 20 */
MRB_TT_DATA, /* 21 */
- MRB_TT_MAXDEFINE /* 22 */
+ MRB_TT_FIBER, /* 22 */
+ MRB_TT_MAXDEFINE /* 23 */
};
typedef struct mrb_value {
@@ -92,7 +93,8 @@ enum mrb_vtype {
MRB_TT_FILE, /* 20 */
MRB_TT_ENV, /* 21 */
MRB_TT_DATA, /* 22 */
- MRB_TT_MAXDEFINE /* 23 */
+ MRB_TT_FIBER, /* 23 */
+ MRB_TT_MAXDEFINE /* 24 */
};
#ifdef MRB_ENDIAN_BIG
@@ -202,6 +204,11 @@ struct RObject {
#define mrb_immediate_p(x) (mrb_type(x) <= MRB_TT_VOIDP)
#define mrb_special_const_p(x) mrb_immediate_p(x)
+struct RFiber {
+ MRB_OBJECT_HEADER;
+ struct mrb_context *cxt;
+};
+
static inline mrb_value
mrb_fixnum_value(mrb_int i)
{