From bae11ef68971ce08bf32ab6bd930615ad3dd7fbd Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Mon, 11 Jul 2022 11:25:31 +0900 Subject: [PATCH] complex.c (mrb_complex_copy): allow copying of complex numbers. --- include/mruby/internal.h | 1 + mrbgems/mruby-bin-mrbc/tools/mrbc/stub.c | 3 +++ mrbgems/mruby-complex/src/complex.c | 9 +++++++++ src/class.c | 5 +++++ 4 files changed, 18 insertions(+) diff --git a/include/mruby/internal.h b/include/mruby/internal.h index 17e867d7b..1f991c414 100644 --- a/include/mruby/internal.h +++ b/include/mruby/internal.h @@ -88,6 +88,7 @@ mrb_value mrb_complex_add(mrb_state *mrb, mrb_value x, mrb_value y); mrb_value mrb_complex_sub(mrb_state *mrb, mrb_value x, mrb_value y); mrb_value mrb_complex_mul(mrb_state *mrb, mrb_value x, mrb_value y); mrb_value mrb_complex_div(mrb_state *mrb, mrb_value x, mrb_value y); +void mrb_complex_copy(mrb_state *mrb, mrb_value x, mrb_value y); #endif #ifdef MRB_USE_RATIONAL mrb_value mrb_rational_new(mrb_state *mrb, mrb_int x, mrb_int y); diff --git a/mrbgems/mruby-bin-mrbc/tools/mrbc/stub.c b/mrbgems/mruby-bin-mrbc/tools/mrbc/stub.c index 1513471c1..13ca03932 100644 --- a/mrbgems/mruby-bin-mrbc/tools/mrbc/stub.c +++ b/mrbgems/mruby-bin-mrbc/tools/mrbc/stub.c @@ -34,6 +34,9 @@ mrb_value mrb_complex_to_f(mrb_state *mrb, mrb_value x) { return mrb_nil_value(); } +void mrb_complex_copy(mrb_state *mrb, mrb_value x, mrb_value y) +{ +} #endif #ifdef MRB_USE_RATIONAL diff --git a/mrbgems/mruby-complex/src/complex.c b/mrbgems/mruby-complex/src/complex.c index 7cc82177d..55f7412b8 100644 --- a/mrbgems/mruby-complex/src/complex.c +++ b/mrbgems/mruby-complex/src/complex.c @@ -84,6 +84,15 @@ mrb_complex_new(mrb_state *mrb, mrb_float real, mrb_float imaginary) #define complex_new(mrb, real, imag) mrb_complex_new(mrb, real, imag) +void +mrb_complex_copy(mrb_state *mrb, mrb_value x, mrb_value y) +{ + struct mrb_complex *p1 = complex_ptr(mrb, x); + struct mrb_complex *p2 = complex_ptr(mrb, y); + p1->real = p2->real; + p1->imaginary = p2->imaginary; +} + static mrb_value complex_real(mrb_state *mrb, mrb_value self) { diff --git a/src/class.c b/src/class.c index 581a1a859..c2581be9a 100644 --- a/src/class.c +++ b/src/class.c @@ -2747,6 +2747,11 @@ init_copy(mrb_state *mrb, mrb_value dest, mrb_value obj) mrb_rational_copy(mrb, dest, obj); break; #endif +#ifdef MRB_USE_COMPLEX + case MRB_TT_COMPLEX: + mrb_complex_copy(mrb, dest, obj); + break; +#endif default: break;