summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--build_config/no-float.rb21
-rw-r--r--build_config/nofloat.rb20
-rw-r--r--include/mruby/gc.h2
-rw-r--r--mrbgems/mruby-bin-mruby/tools/mruby/mruby.c14
-rw-r--r--mrbgems/mruby-binding-core/src/binding-core.c5
-rw-r--r--mrbgems/mruby-catch/src/catch.c2
-rw-r--r--src/backtrace.c2
-rw-r--r--src/class.c8
-rw-r--r--src/dump.c2
-rw-r--r--src/gc.c3
-rw-r--r--src/proc.c4
-rw-r--r--src/vm.c2
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);
diff --git a/src/gc.c b/src/gc.c
index 0a38139eb..96013da00 100644
--- a/src/gc.c
+++ b/src/gc.c
@@ -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 {
diff --git a/src/vm.c b/src/vm.c
index 303bd5634..346a14ba3 100644
--- a/src/vm.c
+++ b/src/vm.c
@@ -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);