From f3ec5f744f5c59ecf0c7b1a761c7f3be266deb01 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?fn=20=E2=8C=83=20=E2=8C=A5?= <70830482+FnControlOption@users.noreply.github.com> Date: Mon, 24 Oct 2022 09:30:27 -0700 Subject: [PATCH 1/3] rational.c: implement `nil.to_r` and `Float#to_r` --- mrbgems/mruby-rational/src/rational.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/mrbgems/mruby-rational/src/rational.c b/mrbgems/mruby-rational/src/rational.c index 164ae9f2f..40b27aa20 100644 --- a/mrbgems/mruby-rational/src/rational.c +++ b/mrbgems/mruby-rational/src/rational.c @@ -347,12 +347,26 @@ rational_negative_p(mrb_state *mrb, mrb_value self) return mrb_false_value(); } +#ifndef MRB_NO_FLOAT +static mrb_value +float_to_r(mrb_state *mrb, mrb_value self) +{ + return rational_new_f(mrb, mrb_float(self)); +} +#endif + static mrb_value fix_to_r(mrb_state *mrb, mrb_value self) { return rational_new(mrb, mrb_integer(self), 1); } +static mrb_value +nil_to_r(mrb_state *mrb, mrb_value self) +{ + return rational_new(mrb, 0, 1); +} + static mrb_value rational_m(mrb_state *mrb, mrb_value self) { @@ -776,7 +790,11 @@ void mrb_mruby_rational_gem_init(mrb_state *mrb) mrb_define_method(mrb, rat, "quo", rational_div, MRB_ARGS_REQ(1)); mrb_define_method(mrb, rat, "**", rational_pow, MRB_ARGS_REQ(1)); mrb_define_method(mrb, rat, "hash", rational_hash, MRB_ARGS_NONE()); +#ifndef MRB_NO_FLOAT + mrb_define_method(mrb, mrb->float_class, "to_r", float_to_r, MRB_ARGS_NONE()); +#endif mrb_define_method(mrb, mrb->integer_class, "to_r", fix_to_r, MRB_ARGS_NONE()); + mrb_define_method(mrb, mrb->nil_class, "to_r", nil_to_r, MRB_ARGS_NONE()); mrb_define_method(mrb, mrb->kernel_module, "Rational", rational_m, MRB_ARGS_ARG(1,1)); } From 78017417905e2ba81dbf2a70e4ef3590707fab11 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?fn=20=E2=8C=83=20=E2=8C=A5?= <70830482+FnControlOption@users.noreply.github.com> Date: Mon, 24 Oct 2022 09:30:41 -0700 Subject: [PATCH 2/3] complex.c: implement `nil.to_c` --- mrbgems/mruby-complex/src/complex.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/mrbgems/mruby-complex/src/complex.c b/mrbgems/mruby-complex/src/complex.c index 63b28af3f..ad88a67ec 100644 --- a/mrbgems/mruby-complex/src/complex.c +++ b/mrbgems/mruby-complex/src/complex.c @@ -381,6 +381,12 @@ complex_hash(mrb_state *mrb, mrb_value cpx) return mrb_int_value(mrb, hash); } +static mrb_value +nil_to_c(mrb_state *mrb, mrb_value self) +{ + return complex_new(mrb, 0, 0); +} + void mrb_mruby_complex_gem_init(mrb_state *mrb) { struct RClass *comp; @@ -404,6 +410,7 @@ void mrb_mruby_complex_gem_init(mrb_state *mrb) mrb_define_method(mrb, comp, "quo", complex_div, MRB_ARGS_REQ(1)); mrb_define_method(mrb, comp, "==", complex_eq, MRB_ARGS_REQ(1)); mrb_define_method(mrb, comp, "hash", complex_hash, MRB_ARGS_NONE()); + mrb_define_method(mrb, mrb->nil_class, "to_c", nil_to_c, MRB_ARGS_NONE()); } void From c65200cb5a8540f1cb654929ec91e3bf56a3f121 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?fn=20=E2=8C=83=20=E2=8C=A5?= <70830482+FnControlOption@users.noreply.github.com> Date: Mon, 24 Oct 2022 09:31:47 -0700 Subject: [PATCH 3/3] complex.rb: implement `Numeric#to_c` --- mrbgems/mruby-complex/mrblib/complex.rb | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/mrbgems/mruby-complex/mrblib/complex.rb b/mrbgems/mruby-complex/mrblib/complex.rb index 4c36179cb..e341efc5d 100644 --- a/mrbgems/mruby-complex/mrblib/complex.rb +++ b/mrbgems/mruby-complex/mrblib/complex.rb @@ -74,3 +74,9 @@ class Complex < Numeric end undef i end + +class Numeric + def to_c + Complex(self, 0) + end +end