diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2013-11-15 10:49:40 +0900 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2013-11-15 10:49:40 +0900 |
| commit | 04a2c58e949843dcab9650c5a5ed2f2490bf0837 (patch) | |
| tree | 53cd9e8810b8f618f31da977985627b7d73a08ed /src | |
| parent | d8f9a30ef37b5ac53b7e54123c870e069f5c88c7 (diff) | |
| download | mruby-04a2c58e949843dcab9650c5a5ed2f2490bf0837.tar.gz mruby-04a2c58e949843dcab9650c5a5ed2f2490bf0837.zip | |
add new function mrb_load_irep_file_cxt() and simplifies mruby.c
Diffstat (limited to 'src')
| -rw-r--r-- | src/load.c | 22 |
1 files changed, 18 insertions, 4 deletions
diff --git a/src/load.c b/src/load.c index 562a1a0d9..5b689368f 100644 --- a/src/load.c +++ b/src/load.c @@ -477,7 +477,7 @@ irep_error(mrb_state *mrb) } mrb_value -mrb_load_irep(mrb_state *mrb, const uint8_t *bin) +mrb_load_irep_cxt(mrb_state *mrb, const uint8_t *bin, mrbc_context *c) { mrb_irep *irep = mrb_read_irep(mrb, bin); mrb_value val; @@ -488,11 +488,18 @@ mrb_load_irep(mrb_state *mrb, const uint8_t *bin) return mrb_nil_value(); } proc = mrb_proc_new(mrb, irep); - val = mrb_context_run(mrb, proc, mrb_top_self(mrb), 0); mrb_irep_decref(mrb, irep); + if (c && c->no_exec) return mrb_obj_value(proc); + val = mrb_context_run(mrb, proc, mrb_top_self(mrb), 0); return val; } +mrb_value +mrb_load_irep(mrb_state *mrb, const uint8_t *bin) +{ + return mrb_load_irep_cxt(mrb, bin, NULL); +} + #ifdef ENABLE_STDIO static int @@ -691,7 +698,7 @@ mrb_read_irep_file(mrb_state *mrb, FILE* fp) } mrb_value -mrb_load_irep_file(mrb_state *mrb, FILE* fp) +mrb_load_irep_file_cxt(mrb_state *mrb, FILE* fp, mrbc_context *c) { mrb_irep *irep = mrb_read_irep_file(mrb, fp); mrb_value val; @@ -702,8 +709,15 @@ mrb_load_irep_file(mrb_state *mrb, FILE* fp) return mrb_nil_value(); } proc = mrb_proc_new(mrb, irep); - val = mrb_context_run(mrb, proc, mrb_top_self(mrb), 0); mrb_irep_decref(mrb, irep); + if (c && c->no_exec) return mrb_obj_value(proc); + val = mrb_context_run(mrb, proc, mrb_top_self(mrb), 0); return val; } + +mrb_value +mrb_load_irep_file(mrb_state *mrb, FILE* fp) +{ + return mrb_load_irep_file_cxt(mrb, fp, NULL); +} #endif /* ENABLE_STDIO */ |
