summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--build_config/no-float.rb24
-rw-r--r--mrblib/numeric.rb2
-rw-r--r--src/codedump.c2
-rw-r--r--src/dump.c2
-rw-r--r--src/load.c4
-rw-r--r--src/numeric.c2
6 files changed, 33 insertions, 3 deletions
diff --git a/build_config/no-float.rb b/build_config/no-float.rb
new file mode 100644
index 000000000..57cca1688
--- /dev/null
+++ b/build_config/no-float.rb
@@ -0,0 +1,24 @@
+MRuby::Build.new("host") do |conf|
+ # load specific toolchain settings
+ toolchain :gcc
+ conf.gem :core => "mruby-bin-mrbc"
+end
+
+# Define cross build settings
+MRuby::CrossBuild.new('no-float') do |conf|
+ toolchain :gcc
+
+ # include the GEM box
+ conf.compilers.each do |c|
+ c.defines << "MRB_NO_FLOAT"
+ end
+
+ conf.gem :core => "mruby-bin-mruby"
+ conf.gem :core => "mruby-test"
+
+ conf.test_runner.command = 'env'
+
+ conf.enable_debug
+# conf.enable_bintest
+ conf.enable_test
+end
diff --git a/mrblib/numeric.rb b/mrblib/numeric.rb
index e28d63324..1bce9c204 100644
--- a/mrblib/numeric.rb
+++ b/mrblib/numeric.rb
@@ -185,4 +185,4 @@ class Float
end
self
end
-end
+end if Object.const_defined?(:Float)
diff --git a/src/codedump.c b/src/codedump.c
index fd376c20b..4f793b753 100644
--- a/src/codedump.c
+++ b/src/codedump.c
@@ -141,7 +141,9 @@ codedump(mrb_state *mrb, const mrb_irep *irep)
op_loadl:
switch (irep->pool[b].tt) {
case IREP_TT_FLOAT:
+#ifndef MRB_NO_FLOAT
printf("OP_LOADL\tR%d\tL(%d)\t; %f", a, b, (double)irep->pool[b].u.f);
+#endif
break;
case IREP_TT_INT32:
printf("OP_LOADL\tR%d\tL(%d)\t; %" PRId32, a, b, irep->pool[b].u.i32);
diff --git a/src/dump.c b/src/dump.c
index 76d9fe1bc..a79df597b 100644
--- a/src/dump.c
+++ b/src/dump.c
@@ -964,12 +964,14 @@ dump_pool(mrb_state *mrb, const mrb_pool_value *p, FILE *fp)
fprintf(fp, "{IREP_TT_INT32, {.i32=%" PRId32 "}},\n", p->u.i32);
break;
case IREP_TT_FLOAT:
+#ifndef MRB_NO_FLOAT
if (p->u.f == 0) {
fprintf(fp, "{IREP_TT_FLOAT, {.f=%#.1f}},\n", p->u.f);
}
else {
fprintf(fp, "{IREP_TT_FLOAT, {.f=" MRB_FLOAT_FMT "}},\n", p->u.f);
}
+#endif
break;
}
}
diff --git a/src/load.c b/src/load.c
index 2489f8e04..0bd7399ee 100644
--- a/src/load.c
+++ b/src/load.c
@@ -649,10 +649,12 @@ load_irep(mrb_state *mrb, mrb_irep *irep, mrbc_context *c)
MRB_API mrb_value
mrb_load_irep_cxt(mrb_state *mrb, const uint8_t *bin, mrbc_context *c)
{
- struct RData *irep_obj = mrb_data_object_alloc(mrb, mrb->object_class, NULL, &tempirep_type);
+ struct RData *irep_obj;
mrb_irep *irep = mrb_read_irep(mrb, bin);
mrb_value ret;
+ if (!irep) return mrb_undef_value();
+ irep_obj = mrb_data_object_alloc(mrb, mrb->object_class, NULL, &tempirep_type);
irep_obj->data = irep;
mrb_irep_incref(mrb, irep);
ret = load_irep(mrb, irep, c);
diff --git a/src/numeric.c b/src/numeric.c
index a16b57dc9..ab39bd463 100644
--- a/src/numeric.c
+++ b/src/numeric.c
@@ -1697,7 +1697,7 @@ mrb_init_numeric(mrb_state *mrb)
mrb_define_method(mrb, fl, "eql?", flo_eql, MRB_ARGS_REQ(1)); /* 15.2.8.3.16 */
mrb_define_method(mrb, fl, "to_s", flo_to_s, MRB_ARGS_NONE()); /* 15.2.9.3.16(x) */
- mrb_define_method(mrb, fl, "inspect", flo_to_s , MRB_ARGS_NONE());
+ mrb_define_method(mrb, fl, "inspect", flo_to_s, MRB_ARGS_NONE());
mrb_define_method(mrb, fl, "nan?", flo_nan_p, MRB_ARGS_NONE());
#ifdef INFINITY