diff options
| author | Daniel Bovensiepen <[email protected]> | 2012-12-05 17:45:24 +0800 |
|---|---|---|
| committer | Daniel Bovensiepen <[email protected]> | 2012-12-05 17:45:24 +0800 |
| commit | be99d87ca49da86f1795bd1779f9ce82cf821a6e (patch) | |
| tree | 1de9b778cd4414956f2864cbb8f0fca76f7c346b | |
| parent | 471c00a31dcaa04d4658de9b59fc23b24479d2fd (diff) | |
| parent | b8e5a570479a2e45d8746d85df15f84b619466d6 (diff) | |
| download | mruby-be99d87ca49da86f1795bd1779f9ce82cf821a6e.tar.gz mruby-be99d87ca49da86f1795bd1779f9ce82cf821a6e.zip | |
rename mrb_load_irep for mrbtest to be consistent to name change
| -rw-r--r-- | include/mruby/dump.h | 5 | ||||
| -rw-r--r-- | src/load.c | 36 | ||||
| -rw-r--r-- | src/parse.y | 3 | ||||
| -rw-r--r-- | test/init_mrbtest.c | 9 | ||||
| -rw-r--r-- | tools/mruby/mruby.c | 2 |
5 files changed, 42 insertions, 13 deletions
diff --git a/include/mruby/dump.h b/include/mruby/dump.h index cad797275..87c9841e6 100644 --- a/include/mruby/dump.h +++ b/include/mruby/dump.h @@ -16,9 +16,10 @@ extern "C" { #include <stdint.h> int mrb_dump_irep(mrb_state*,int,FILE*); -int mrb_load_irep(mrb_state*,FILE*); -int mrb_load_irep_offset(mrb_state*,FILE*,long); int mrb_read_irep(mrb_state*,const char*); +int mrb_read_irep_file(mrb_state*,FILE*); +mrb_value mrb_load_irep(mrb_state*,const char*); +mrb_value mrb_load_irep_file(mrb_state*,FILE*); int mrb_bdump_irep(mrb_state *mrb, int n, FILE *f,const char *initname); diff --git a/src/load.c b/src/load.c index 142c6fdf7..3cd8d91b0 100644 --- a/src/load.c +++ b/src/load.c @@ -11,6 +11,7 @@ #ifdef ENABLE_REGEXP #include "re.h" #endif +#include "mruby/proc.h" #include "mruby/irep.h" typedef struct _RiteFILE @@ -28,7 +29,7 @@ const char hex2bin[256] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 0, 0, 0, 0, 0, //30-3f 0, 10, 11, 12, 13, 14, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, //40-4f 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, //50-5f - 0, 10, 11, 12, 13, 14, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0 //60-6f + 0, 10, 11, 12, 13, 14, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0 //60-6f //70-ff }; @@ -241,7 +242,7 @@ error_exit: } int -mrb_load_irep(mrb_state *mrb, FILE* fp) +mrb_read_irep_file(mrb_state *mrb, FILE* fp) { int ret, i; uint32_t len, rlen = 0; @@ -659,3 +660,34 @@ hex_to_str(char *hex, char *str, uint16_t *str_len) } return str; } + +static void +irep_error(mrb_state *mrb, int n) +{ + static const char msg[] = "irep load error"; + mrb->exc = (struct RObject*)mrb_object(mrb_exc_new(mrb, E_SCRIPT_ERROR, msg, sizeof(msg) - 1)); +} + +mrb_value +mrb_load_irep_file(mrb_state *mrb, FILE* fp) +{ + int n = mrb_read_irep_file(mrb, fp); + + if (n < 0) { + irep_error(mrb, n); + return mrb_nil_value(); + } + return mrb_run(mrb, mrb_proc_new(mrb, mrb->irep[n]), mrb_top_self(mrb)); +} + +mrb_value +mrb_load_irep(mrb_state *mrb, const char *bin) +{ + int n = mrb_read_irep(mrb, bin); + + if (n < 0) { + irep_error(mrb, n); + return mrb_nil_value(); + } + return mrb_run(mrb, mrb_proc_new(mrb, mrb->irep[n]), mrb_top_self(mrb)); +} diff --git a/src/parse.y b/src/parse.y index bfea1f69c..19e6bf23e 100644 --- a/src/parse.y +++ b/src/parse.y @@ -3307,7 +3307,8 @@ read_escape(parser_state *p) int buf[3]; int i; - for (i=0; i<3; i++) { + buf[0] = c; + for (i=1; i<3; i++) { buf[i] = nextc(p); if (buf[i] == -1) goto eof; if (buf[i] < '0' || '7' < buf[i]) { diff --git a/test/init_mrbtest.c b/test/init_mrbtest.c index ce9dd4cdd..47b14c325 100644 --- a/test/init_mrbtest.c +++ b/test/init_mrbtest.c @@ -10,14 +10,9 @@ extern const char mrbgemtest_irep[]; void mrb_init_mrbtest(mrb_state *mrb) { - int n = mrb_read_irep(mrb, mrbtest_irep); + mrb_load_irep(mrb, mrbtest_irep); #ifdef ENABLE_GEMS - int m = mrb_read_irep(mrb, mrbgemtest_irep); -#endif - - mrb_run(mrb, mrb_proc_new(mrb, mrb->irep[n]), mrb_top_self(mrb)); -#ifdef ENABLE_GEMS - mrb_run(mrb, mrb_proc_new(mrb, mrb->irep[m]), mrb_top_self(mrb)); + mrb_load_irep(mrb, mrbgemtest_irep); #endif if (mrb->exc) { mrb_p(mrb, mrb_obj_value(mrb->exc)); diff --git a/tools/mruby/mruby.c b/tools/mruby/mruby.c index d9386f6e2..d3ea924c7 100644 --- a/tools/mruby/mruby.c +++ b/tools/mruby/mruby.c @@ -238,7 +238,7 @@ main(int argc, char **argv) mrb_define_global_const(mrb, "ARGV", ARGV); if (args.mrbfile) { - n = mrb_load_irep(mrb, args.rfp); + n = mrb_read_irep_file(mrb, args.rfp); if (n < 0) { fprintf(stderr, "failed to load mrb file: %s\n", args.cmdline); } |
