summaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2014-06-23 20:25:34 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2014-06-23 20:25:34 +0900
commit90ddc2810aa7ab2b91b99adc576025fa19c37451 (patch)
tree4e03e5345024b756bd3ea6cdad8fbbd00b3ae00a /src
parentad23483f32d251eb06abb9df7bd14749c45fe030 (diff)
parentac0addd98ff93334aca192b1eb67d640cefcc5d1 (diff)
downloadmruby-90ddc2810aa7ab2b91b99adc576025fa19c37451.tar.gz
mruby-90ddc2810aa7ab2b91b99adc576025fa19c37451.zip
Merge branch 'take-cheeze-mrb_open_without_mrbgems'
Diffstat (limited to 'src')
-rw-r--r--src/init.c5
-rw-r--r--src/state.c22
2 files changed, 18 insertions, 9 deletions
diff --git a/src/init.c b/src/init.c
index 9489cea10..955d6e3a1 100644
--- a/src/init.c
+++ b/src/init.c
@@ -24,8 +24,6 @@ void mrb_init_gc(mrb_state*);
void mrb_init_math(mrb_state*);
void mrb_init_version(mrb_state*);
void mrb_init_mrblib(mrb_state*);
-void mrb_init_mrbgems(mrb_state*);
-void mrb_final_mrbgems(mrb_state*);
#define DONE mrb_gc_arena_restore(mrb, 0);
void
@@ -50,7 +48,4 @@ mrb_init_core(mrb_state *mrb)
mrb_init_gc(mrb); DONE;
mrb_init_version(mrb); DONE;
mrb_init_mrblib(mrb); DONE;
-#ifndef DISABLE_GEMS
- mrb_init_mrbgems(mrb); DONE;
-#endif
}
diff --git a/src/state.c b/src/state.c
index 3e82a159d..8857d3294 100644
--- a/src/state.c
+++ b/src/state.c
@@ -14,6 +14,7 @@
void mrb_init_heap(mrb_state*);
void mrb_init_core(mrb_state*);
+void mrb_init_mrbgems(mrb_state*);
static mrb_value
inspect_main(mrb_state *mrb, mrb_value mod)
@@ -22,7 +23,7 @@ inspect_main(mrb_state *mrb, mrb_value mod)
}
mrb_state*
-mrb_open_allocf(mrb_allocf f, void *ud)
+mrb_open_core(mrb_allocf f, void *ud)
{
static const mrb_state mrb_state_zero = { 0 };
static const struct mrb_context mrb_context_zero = { 0 };
@@ -50,13 +51,14 @@ mrb_open_allocf(mrb_allocf f, void *ud)
mrb->c = (struct mrb_context*)mrb_malloc(mrb, sizeof(struct mrb_context));
*mrb->c = mrb_context_zero;
mrb->root_c = mrb->c;
+
mrb_init_core(mrb);
return mrb;
}
-static void*
-allocf(mrb_state *mrb, void *p, size_t size, void *ud)
+void*
+mrb_default_allocf(mrb_state *mrb, void *p, size_t size, void *ud)
{
if (size == 0) {
free(p);
@@ -102,8 +104,20 @@ mrb_alloca_free(mrb_state *mrb)
mrb_state*
mrb_open(void)
{
- mrb_state *mrb = mrb_open_allocf(allocf, NULL);
+ mrb_state *mrb = mrb_open_allocf(mrb_default_allocf, NULL);
+
+ return mrb;
+}
+mrb_state*
+mrb_open_allocf(mrb_allocf f, void *ud)
+{
+ mrb_state *mrb = mrb_open_core(f, ud);
+
+#ifndef DISABLE_GEMS
+ mrb_init_mrbgems(mrb);
+ mrb_gc_arena_restore(mrb, 0);
+#endif
return mrb;
}