From 6bb56ed9201c10738404aef3f5a375145cba1153 Mon Sep 17 00:00:00 2001 From: take_cheeze Date: Mon, 16 Jun 2014 15:28:04 +0900 Subject: add mrb_open_without_mrbgems API --- include/mruby.h | 1 + src/init.c | 5 ----- 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); -- cgit v1.2.3 From 36813c87f6a676e858e70717c9d6ec4e989a0260 Mon Sep 17 00:00:00 2001 From: take_cheeze Date: Thu, 13 Mar 2014 02:51:14 +0900 Subject: make default allocf public to use it with mrb_open_without_mrbgems --- include/mruby.h | 2 ++ src/state.c | 6 +++--- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/include/mruby.h b/include/mruby.h index e5248ab7c..8ed83afd5 100644 --- a/include/mruby.h +++ b/include/mruby.h @@ -299,6 +299,8 @@ mrb_state* mrb_open_allocf(mrb_allocf, void *ud); mrb_state* mrb_open_without_mrbgems(mrb_allocf, void *ud); void mrb_close(mrb_state*); +void* mrb_default_allocf(mrb_state*, void*, size_t, void*); + mrb_value mrb_top_self(mrb_state *); mrb_value mrb_run(mrb_state*, struct RProc*, mrb_value); mrb_value mrb_toplevel_run(mrb_state*, struct RProc*); diff --git a/src/state.c b/src/state.c index f264a8eba..e344dc4d3 100644 --- a/src/state.c +++ b/src/state.c @@ -64,8 +64,8 @@ mrb_open_common(mrb_allocf f, void *ud, mrb_bool with_gems) 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); @@ -111,7 +111,7 @@ 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; } -- cgit v1.2.3 From baca365caa00f805fe813844f203c1c542ea6677 Mon Sep 17 00:00:00 2001 From: take_cheeze Date: Sat, 22 Mar 2014 04:07:31 +0900 Subject: rename mrb_open_without_mrbgems to mrb_open_core --- include/mruby.h | 2 +- src/state.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/include/mruby.h b/include/mruby.h index 8ed83afd5..80bbe2d68 100644 --- a/include/mruby.h +++ b/include/mruby.h @@ -296,7 +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); +mrb_state* mrb_open_core(mrb_allocf, void *ud); void mrb_close(mrb_state*); void* mrb_default_allocf(mrb_state*, void*, size_t, void*); diff --git a/src/state.c b/src/state.c index e344dc4d3..ca776b36d 100644 --- a/src/state.c +++ b/src/state.c @@ -123,7 +123,7 @@ mrb_open_allocf(mrb_allocf f, void *ud) } mrb_state* -mrb_open_without_mrbgems(mrb_allocf f, void *ud) +mrb_open_core(mrb_allocf f, void *ud) { return mrb_open_common(f, ud, FALSE); } -- cgit v1.2.3 From ac0addd98ff93334aca192b1eb67d640cefcc5d1 Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Wed, 18 Jun 2014 15:49:22 +0900 Subject: refacor mrb_open_core() to reduce a local variable --- src/state.c | 23 ++++++++--------------- 1 file changed, 8 insertions(+), 15 deletions(-) diff --git a/src/state.c b/src/state.c index ca776b36d..8857d3294 100644 --- a/src/state.c +++ b/src/state.c @@ -22,8 +22,8 @@ inspect_main(mrb_state *mrb, mrb_value mod) return mrb_str_new_lit(mrb, "main"); } -static mrb_state* -mrb_open_common(mrb_allocf f, void *ud, mrb_bool with_gems) +mrb_state* +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 }; @@ -54,13 +54,6 @@ mrb_open_common(mrb_allocf f, void *ud, mrb_bool with_gems) mrb_init_core(mrb); -#ifndef DISABLE_GEMS - if (with_gems) { - mrb_init_mrbgems(mrb); - mrb_gc_arena_restore(mrb, 0); - } -#endif - return mrb; } @@ -119,13 +112,13 @@ mrb_open(void) mrb_state* mrb_open_allocf(mrb_allocf f, void *ud) { - return mrb_open_common(f, ud, TRUE); -} + mrb_state *mrb = mrb_open_core(f, ud); -mrb_state* -mrb_open_core(mrb_allocf f, void *ud) -{ - return mrb_open_common(f, ud, FALSE); +#ifndef DISABLE_GEMS + mrb_init_mrbgems(mrb); + mrb_gc_arena_restore(mrb, 0); +#endif + return mrb; } void mrb_free_symtbl(mrb_state *mrb); -- cgit v1.2.3