diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2021-03-24 11:04:58 +0900 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2021-03-24 11:04:58 +0900 |
| commit | fa3ac351ff86efe517180afa6159679887656ced (patch) | |
| tree | 4aa9460c19cc2c057b18bdfabe4891b05edfcb68 /mrbgems/mruby-complex/src | |
| parent | afb3c00e8c7e9f32a96f1241c2408633550329f3 (diff) | |
| download | mruby-fa3ac351ff86efe517180afa6159679887656ced.tar.gz mruby-fa3ac351ff86efe517180afa6159679887656ced.zip | |
complex.c: override float division to support `Complex`.
Diffstat (limited to 'mrbgems/mruby-complex/src')
| -rw-r--r-- | mrbgems/mruby-complex/src/complex.c | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/mrbgems/mruby-complex/src/complex.c b/mrbgems/mruby-complex/src/complex.c index f0269f165..b4217d4d6 100644 --- a/mrbgems/mruby-complex/src/complex.c +++ b/mrbgems/mruby-complex/src/complex.c @@ -348,6 +348,24 @@ int_quo(mrb_state *mrb, mrb_value x) } #endif +static mrb_value +flo_div(mrb_state *mrb, mrb_value x) +{ + mrb_float a = mrb_float(x); + mrb_value y = mrb_get_arg1(mrb); + + switch(mrb_type(y)) { + case MRB_TT_COMPLEX: + return complex_div(mrb, complex_new(mrb, a, 0)); + case MRB_TT_FLOAT: + a = div_flo(a, mrb_float(y)); + return mrb_float_value(mrb, a); + default: + a = div_flo(a, mrb_to_flo(mrb, y)); + return mrb_float_value(mrb, a); + } +} + void mrb_mruby_complex_gem_init(mrb_state *mrb) { struct RClass *comp; @@ -376,6 +394,8 @@ void mrb_mruby_complex_gem_init(mrb_state *mrb) mrb_define_method(mrb, mrb->integer_class, "/", int_div, MRB_ARGS_REQ(1)); /* overrride */ mrb_define_method(mrb, mrb->integer_class, "quo", int_quo, MRB_ARGS_REQ(1)); /* overrride */ #endif + mrb_define_method(mrb, mrb->float_class, "/", flo_div, MRB_ARGS_REQ(1)); /* overrride */ + mrb_define_method(mrb, mrb->float_class, "quo", flo_div, MRB_ARGS_REQ(1)); /* overrride */ } void |
