summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--include/mruby/boxing_nan.h4
-rw-r--r--mrbgems/mruby-io/src/io.c10
-rw-r--r--src/numeric.c2
3 files changed, 15 insertions, 1 deletions
diff --git a/include/mruby/boxing_nan.h b/include/mruby/boxing_nan.h
index 341121958..96ca46ef3 100644
--- a/include/mruby/boxing_nan.h
+++ b/include/mruby/boxing_nan.h
@@ -43,7 +43,11 @@ union mrb_value_ {
struct {
MRB_ENDIAN_LOHI(
uint32_t ttt;
+#ifdef MRB_64BIT
,uint32_t i;
+#else
+ ,union { uint32_t i; void *p; };
+#endif
)
};
mrb_value value;
diff --git a/mrbgems/mruby-io/src/io.c b/mrbgems/mruby-io/src/io.c
index d4505e4f7..54a806091 100644
--- a/mrbgems/mruby-io/src/io.c
+++ b/mrbgems/mruby-io/src/io.c
@@ -707,7 +707,15 @@ mrb_io_initialize(mrb_state *mrb, mrb_value io)
mode = opt = mrb_nil_value();
mrb_get_args(mrb, "i|oo", &fd, &mode, &opt);
- check_file_descriptor(mrb, fd);
+ switch (fd) {
+ case 0: /* STDIN_FILENO */
+ case 1: /* STDOUT_FILENO */
+ case 2: /* STDERR_FILENO */
+ break;
+ default:
+ check_file_descriptor(mrb, fd);
+ break;
+ }
if (mrb_nil_p(mode)) {
mode = mrb_str_new_cstr(mrb, "r");
}
diff --git a/src/numeric.c b/src/numeric.c
index fcabc6d60..2c16b8a31 100644
--- a/src/numeric.c
+++ b/src/numeric.c
@@ -853,6 +853,8 @@ flo_round(mrb_state *mrb, mrb_value num)
if (!isfinite(number)) return num;
return mrb_float_value(mrb, number);
}
+ if (!FIXABLE_FLOAT(number))
+ return mrb_float_value(mrb, number);
return mrb_int_value(mrb, (mrb_int)number);
}