diff options
| -rw-r--r-- | include/mruby/boxing_nan.h | 4 | ||||
| -rw-r--r-- | mrbgems/mruby-io/src/io.c | 10 | ||||
| -rw-r--r-- | src/numeric.c | 2 |
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); } |
