diff options
| -rw-r--r-- | build_config/no-float.rb | 21 | ||||
| -rw-r--r-- | build_config/nofloat.rb | 20 | ||||
| -rw-r--r-- | include/mruby/gc.h | 2 | ||||
| -rw-r--r-- | mrbgems/mruby-bin-mruby/tools/mruby/mruby.c | 14 | ||||
| -rw-r--r-- | mrbgems/mruby-binding-core/src/binding-core.c | 5 | ||||
| -rw-r--r-- | mrbgems/mruby-catch/src/catch.c | 2 | ||||
| -rw-r--r-- | src/backtrace.c | 2 | ||||
| -rw-r--r-- | src/class.c | 8 | ||||
| -rw-r--r-- | src/dump.c | 2 | ||||
| -rw-r--r-- | src/gc.c | 3 | ||||
| -rw-r--r-- | src/proc.c | 4 | ||||
| -rw-r--r-- | src/vm.c | 2 |
12 files changed, 35 insertions, 50 deletions
diff --git a/build_config/no-float.rb b/build_config/no-float.rb index e0738cac4..977bf4e12 100644 --- a/build_config/no-float.rb +++ b/build_config/no-float.rb @@ -1,17 +1,22 @@ -# Define cross build settings -MRuby::CrossBuild.new('no-float') do |conf| - conf.toolchain +MRuby::Build.new do |conf| + # load specific toolchain settings + toolchain :gcc + + # include the GEM box + conf.gembox "stdlib" + conf.gembox "stdlib-ext" + conf.gembox "stdlib-io" + conf.gembox "metaprog" + + conf.gem :core => 'mruby-bin-mruby' + conf.gem :core => 'mruby-bin-mirb' # Add configuration conf.compilers.each do |c| c.defines << "MRB_NO_FLOAT" end - conf.gem :core => "mruby-bin-mruby" - - conf.test_runner.command = 'env' - conf.enable_debug -# conf.enable_bintest conf.enable_test + conf.enable_bintest end diff --git a/build_config/nofloat.rb b/build_config/nofloat.rb deleted file mode 100644 index 7043e4e2c..000000000 --- a/build_config/nofloat.rb +++ /dev/null @@ -1,20 +0,0 @@ -MRuby::Build.new do |conf| - # load specific toolchain settings - toolchain :gcc - - # include the GEM box - conf.gembox "stdlib" - conf.gembox "stdlib-ext" - conf.gembox "stdlib-io" - conf.gembox "metaprog" - - conf.gem :core => 'mruby-bin-mruby' - conf.gem :core => 'mruby-bin-mirb' - - conf.cc.defines << 'MRB_NO_FLOAT' - - # Turn on `enable_debug` for better debugging - conf.enable_debug - conf.enable_test - conf.enable_bintest -end diff --git a/include/mruby/gc.h b/include/mruby/gc.h index 98236a219..9f9bba410 100644 --- a/include/mruby/gc.h +++ b/include/mruby/gc.h @@ -87,6 +87,8 @@ typedef struct mrb_gc { MRB_API mrb_bool mrb_object_dead_p(struct mrb_state *mrb, struct RBasic *object); +#define MRB_GC_RED 7 + MRB_END_DECL #endif /* MRUBY_GC_H */ diff --git a/mrbgems/mruby-bin-mruby/tools/mruby/mruby.c b/mrbgems/mruby-bin-mruby/tools/mruby/mruby.c index 5c49b6d94..b189aca69 100644 --- a/mrbgems/mruby-bin-mruby/tools/mruby/mruby.c +++ b/mrbgems/mruby-bin-mruby/tools/mruby/mruby.c @@ -272,7 +272,6 @@ main(int argc, char **argv) mrb_value ARGV; mrbc_context *c; mrb_value v; - mrb_sym zero_sym; if (mrb == NULL) { fprintf(stderr, "%s: Invalid mrb_state, exiting mruby\n", *argv); @@ -304,17 +303,14 @@ main(int argc, char **argv) c->no_exec = TRUE; /* Set $0 */ - zero_sym = mrb_intern_lit(mrb, "$0"); + const char *cmdline; if (args.rfp) { - const char *cmdline; cmdline = args.cmdline ? args.cmdline : "-"; - mrbc_filename(mrb, c, cmdline); - mrb_gv_set(mrb, zero_sym, mrb_str_new_cstr(mrb, cmdline)); } else { - mrbc_filename(mrb, c, "-e"); - mrb_gv_set(mrb, zero_sym, mrb_str_new_lit(mrb, "-e")); + cmdline = "-e"; } + mrb_gv_set(mrb, mrb_intern_lit(mrb, "$0"), mrb_str_new_cstr(mrb, cmdline)); /* Load libraries */ for (i = 0; i < args.libc; i++) { @@ -326,6 +322,7 @@ main(int argc, char **argv) cleanup(mrb, &args); return EXIT_FAILURE; } + mrbc_filename(mrb, c, args.libv[i]); if (args.mrbfile) { v = mrb_load_irep_file_cxt(mrb, lfp, c); } @@ -339,6 +336,9 @@ main(int argc, char **argv) mrbc_cleanup_local_variables(mrb, c); } + /* set program file name */ + mrbc_filename(mrb, c, cmdline); + /* Load program */ if (args.mrbfile) { v = mrb_load_irep_file_cxt(mrb, args.rfp, c); diff --git a/mrbgems/mruby-binding-core/src/binding-core.c b/mrbgems/mruby-binding-core/src/binding-core.c index 209da8bf9..1454f5945 100644 --- a/mrbgems/mruby-binding-core/src/binding-core.c +++ b/mrbgems/mruby-binding-core/src/binding-core.c @@ -188,10 +188,8 @@ binding_source_location(mrb_state *mrb, mrb_value self) if (!proc || MRB_PROC_CFUNC_P(proc) || !proc->upper || MRB_PROC_CFUNC_P(proc->upper)) { srcloc = mrb_nil_value(); - goto cache_source_location; } - - { + else { const mrb_irep *irep = proc->upper->body.irep; mrb_int pc = binding_extract_pc(mrb, self); if (pc < 0) { @@ -210,7 +208,6 @@ binding_source_location(mrb_state *mrb, mrb_value self) } } -cache_source_location: if (!mrb_frozen_p(mrb_obj_ptr(self))) { mrb_iv_set(mrb, self, MRB_SYM(source_location), srcloc); } diff --git a/mrbgems/mruby-catch/src/catch.c b/mrbgems/mruby-catch/src/catch.c index 148639530..d54c49dfe 100644 --- a/mrbgems/mruby-catch/src/catch.c +++ b/mrbgems/mruby-catch/src/catch.c @@ -62,7 +62,7 @@ static const mrb_irep catch_irep = { }; static const struct RProc catch_proc = { - NULL, NULL, MRB_TT_PROC, 7 /* GC_RED */, MRB_FL_OBJ_IS_FROZEN | MRB_PROC_SCOPE | MRB_PROC_STRICT, + NULL, NULL, MRB_TT_PROC, MRB_GC_RED, MRB_FL_OBJ_IS_FROZEN | MRB_PROC_SCOPE | MRB_PROC_STRICT, { &catch_irep }, NULL, { NULL } }; diff --git a/src/backtrace.c b/src/backtrace.c index b8aee8ad6..6e7e66f8c 100644 --- a/src/backtrace.c +++ b/src/backtrace.c @@ -62,7 +62,7 @@ each_backtrace(mrb_state *mrb, ptrdiff_t ciidx, each_backtrace_func func, void * idx = (uint32_t)(pc - irep->iseq); loc.lineno = mrb_debug_get_line(mrb, irep, idx); - if (n++ == 0 && loc.lineno == -1) continue; + if (n++ == 0 && loc.lineno == -1 && ci->acc < 0) continue; loc.filename = mrb_debug_get_filename(mrb, irep, idx); if (!loc.filename) { diff --git a/src/class.c b/src/class.c index 33a65f7d6..dfd25b371 100644 --- a/src/class.c +++ b/src/class.c @@ -736,7 +736,7 @@ mrb_define_method_raw(mrb_state *mrb, struct RClass *c, mrb_sym mid, mrb_method_ ptr.proc = p; if (p) { - if (p->color != 7 /* GC_RED */) { + if (p->color != MRB_GC_RED) { p->flags |= MRB_PROC_SCOPE; p->c = NULL; mrb_field_write_barrier(mrb, (struct RBasic*)c, (struct RBasic*)p); @@ -2205,7 +2205,7 @@ mrb_alias_method(mrb_state *mrb, struct RClass *c, mrb_sym a, mrb_sym b) if (MRB_PROC_ENV_P(p)) { MRB_PROC_ENV(p)->mid = b; } - else if (p->color != 7 /* GC_RED */) { + else if (p->color != MRB_GC_RED) { struct RClass *tc = MRB_PROC_TARGET_CLASS(p); struct REnv *e = (struct REnv*)mrb_obj_alloc(mrb, MRB_TT_ENV, NULL); @@ -2806,7 +2806,7 @@ static const mrb_code new_iseq[] = { OP_MOVE, 0x0, 0x3, /* OP_MOVE R0 R3 */ OP_MOVE, 0x4, 0x1, /* OP_MOVE R4 R1 */ OP_MOVE, 0x5, 0x2, /* OP_MOVE R5 R2 */ - OP_SENDVB, 0x3, 0x1, /* OP_SENDVB R4 :initialize */ + OP_SENDVB, 0x3, 0x1, /* OP_SENDVB R3 :initialize */ OP_RETURN, 0x0 /* OP_RETURN R0 */ }; @@ -2819,7 +2819,7 @@ static const mrb_irep new_irep = { }; static const struct RProc new_proc = { - NULL, NULL, MRB_TT_PROC, 7 /* GC_RED */, MRB_FL_OBJ_IS_FROZEN | MRB_PROC_SCOPE | MRB_PROC_STRICT, + NULL, NULL, MRB_TT_PROC, MRB_GC_RED, MRB_FL_OBJ_IS_FROZEN | MRB_PROC_SCOPE | MRB_PROC_STRICT, { &new_irep }, NULL, { NULL } }; diff --git a/src/dump.c b/src/dump.c index 3805d44cf..91edf17d3 100644 --- a/src/dump.c +++ b/src/dump.c @@ -1344,7 +1344,7 @@ mrb_dump_irep_cstruct(mrb_state *mrb, const mrb_irep *irep, uint8_t flags, FILE "extern\n" "#endif", initname); - fprintf(fp, "NULL,NULL,MRB_TT_PROC,7,0,{&%s_irep_0},NULL,{NULL},\n}};\n", initname); + fprintf(fp, "NULL,NULL,MRB_TT_PROC,MRB_GC_RED,0,{&%s_irep_0},NULL,{NULL},\n}};\n", initname); fputs("static void\n", fp); fprintf(fp, "%s_init_syms(mrb_state *mrb)\n", initname); fputs("{\n", fp); @@ -200,9 +200,10 @@ gettimeofday_time(void) #define GC_WHITE_A 1 #define GC_WHITE_B (1 << 1) #define GC_BLACK (1 << 2) -#define GC_RED 7 +#define GC_RED MRB_GC_RED #define GC_WHITES (GC_WHITE_A | GC_WHITE_B) #define GC_COLOR_MASK 7 +mrb_static_assert1(MRB_GC_RED <= GC_COLOR_MASK); #define paint_gray(o) ((o)->color = GC_GRAY) #define paint_black(o) ((o)->color = GC_BLACK) diff --git a/src/proc.c b/src/proc.c index 5419ac002..78ce0e791 100644 --- a/src/proc.c +++ b/src/proc.c @@ -36,7 +36,7 @@ static const mrb_irep call_irep = { }; static const struct RProc call_proc = { - NULL, NULL, MRB_TT_PROC, 7 /* GC_RED */, MRB_FL_OBJ_IS_FROZEN | MRB_PROC_SCOPE | MRB_PROC_STRICT, + NULL, NULL, MRB_TT_PROC, MRB_GC_RED, MRB_FL_OBJ_IS_FROZEN | MRB_PROC_SCOPE | MRB_PROC_STRICT, { &call_irep }, NULL, { NULL } }; @@ -51,7 +51,7 @@ mrb_proc_new(mrb_state *mrb, const mrb_irep *irep) struct RClass *tc = NULL; if (ci->proc) { - if (ci->proc->color != 7 /* GC_RED */) { + if (ci->proc->color != MRB_GC_RED) { tc = MRB_PROC_TARGET_CLASS(ci->proc); } else { @@ -558,7 +558,7 @@ exec_irep_prepare_posthook(mrb_state *mrb, mrb_callinfo *ci, int nregs, mrb_func 0, 0, 0, 0 }; static const struct RProc hook_caller = { - NULL, NULL, MRB_TT_PROC, 7 /* GC_RED */, MRB_FL_OBJ_IS_FROZEN, { &hook_irep }, NULL, { NULL } + NULL, NULL, MRB_TT_PROC, MRB_GC_RED, MRB_FL_OBJ_IS_FROZEN, { &hook_irep }, NULL, { NULL } }; struct RProc *hook = mrb_proc_new_cfunc(mrb, posthook); |
