diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2013-10-22 16:18:11 +0900 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2013-10-22 16:18:11 +0900 |
| commit | 2607970ed9ab59165d9532c05440fb57846d636e (patch) | |
| tree | 7d95b33c858762f4473b78438af9aba9eb92f32e /src/numeric.c | |
| parent | 620f8b2721e2bf05b610116cc3857a87b6c140e6 (diff) | |
| download | mruby-2607970ed9ab59165d9532c05440fb57846d636e.tar.gz mruby-2607970ed9ab59165d9532c05440fb57846d636e.zip | |
move some methods to make floats and integers compatible [mruby special]
Diffstat (limited to 'src/numeric.c')
| -rw-r--r-- | src/numeric.c | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/src/numeric.c b/src/numeric.c index 65fe5051b..414522fb6 100644 --- a/src/numeric.c +++ b/src/numeric.c @@ -784,6 +784,21 @@ fix_divmod(mrb_state *mrb, mrb_value x) } } +static mrb_value +flo_divmod(mrb_state *mrb, mrb_value x) +{ + mrb_value y; + mrb_float div, mod; + mrb_value a, b; + + mrb_get_args(mrb, "o", &y); + + flodivmod(mrb, mrb_float(x), mrb_to_flo(mrb, y), &div, &mod); + a = mrb_float_value(mrb, (mrb_int)div); + b = mrb_float_value(mrb, mod); + return mrb_assoc_new(mrb, a, b); +} + /* 15.2.8.3.7 */ /* * call-seq: @@ -1270,7 +1285,6 @@ mrb_init_numeric(mrb_state *mrb) /* Numeric Class */ numeric = mrb_define_class(mrb, "Numeric", mrb->object_class); - mrb_include_module(mrb, numeric, mrb_class_get(mrb, "Comparable")); mrb_define_method(mrb, numeric, "**", num_pow, MRB_ARGS_REQ(1)); mrb_define_method(mrb, numeric, "/", num_div, MRB_ARGS_REQ(1)); /* 15.2.8.3.4 */ @@ -1319,6 +1333,7 @@ mrb_init_numeric(mrb_state *mrb) mrb_define_method(mrb, fl, "to_i", flo_truncate, MRB_ARGS_NONE()); /* 15.2.9.3.14 */ mrb_define_method(mrb, fl, "to_int", flo_truncate, MRB_ARGS_NONE()); mrb_define_method(mrb, fl, "truncate", flo_truncate, MRB_ARGS_NONE()); /* 15.2.9.3.15 */ + mrb_define_method(mrb, fixnum, "divmod", flo_divmod, MRB_ARGS_REQ(1)); 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()); |
