diff options
| author | take_cheeze <[email protected]> | 2014-06-16 15:28:04 +0900 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2014-06-23 20:06:17 +0900 |
| commit | 6bb56ed9201c10738404aef3f5a375145cba1153 (patch) | |
| tree | 25e511363f9fd67f6ceed8e0452ea15699a06a40 | |
| parent | ad23483f32d251eb06abb9df7bd14749c45fe030 (diff) | |
| download | mruby-6bb56ed9201c10738404aef3f5a375145cba1153.tar.gz mruby-6bb56ed9201c10738404aef3f5a375145cba1153.zip | |
add mrb_open_without_mrbgems API
| -rw-r--r-- | include/mruby.h | 1 | ||||
| -rw-r--r-- | src/init.c | 5 | ||||
| -rw-r--r-- | src/state.c | 25 |
3 files changed, 24 insertions, 7 deletions
diff --git a/include/mruby.h b/include/mruby.h index 7b9f1b428..e5248ab7c 100644 --- a/include/mruby.h +++ b/include/mruby.h @@ -296,6 +296,7 @@ mrb_value mrb_str_new_static(mrb_state *mrb, const char *p, size_t len); mrb_state* mrb_open(void); mrb_state* mrb_open_allocf(mrb_allocf, void *ud); +mrb_state* mrb_open_without_mrbgems(mrb_allocf, void *ud); void mrb_close(mrb_state*); mrb_value mrb_top_self(mrb_state *); 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..f264a8eba 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) @@ -21,8 +22,8 @@ inspect_main(mrb_state *mrb, mrb_value mod) return mrb_str_new_lit(mrb, "main"); } -mrb_state* -mrb_open_allocf(mrb_allocf f, void *ud) +static mrb_state* +mrb_open_common(mrb_allocf f, void *ud, mrb_bool with_gems) { static const mrb_state mrb_state_zero = { 0 }; static const struct mrb_context mrb_context_zero = { 0 }; @@ -50,8 +51,16 @@ 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); +#ifndef DISABLE_GEMS + if (with_gems) { + mrb_init_mrbgems(mrb); + mrb_gc_arena_restore(mrb, 0); + } +#endif + return mrb; } @@ -107,6 +116,18 @@ mrb_open(void) return mrb; } +mrb_state* +mrb_open_allocf(mrb_allocf f, void *ud) +{ + return mrb_open_common(f, ud, TRUE); +} + +mrb_state* +mrb_open_without_mrbgems(mrb_allocf f, void *ud) +{ + return mrb_open_common(f, ud, FALSE); +} + void mrb_free_symtbl(mrb_state *mrb); void mrb_free_heap(mrb_state *mrb); |
