From d3184e4a6d8b85a22dd46f4e2909492a0a08cab1 Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Fri, 19 Mar 2021 10:30:16 +0900 Subject: complex.c: overhaul complex operators. - define `MRB_TT_COMPLEX` - change object structure (`struct RComplex`) - add memory management for `MRB_TT_COMPLEX` - avoid operator overloading as much as possible - as a result, performance improved a log - should work with and without `Rational` defined --- src/gc.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) (limited to 'src/gc.c') diff --git a/src/gc.c b/src/gc.c index 9ea3c1712..0a38139eb 100644 --- a/src/gc.c +++ b/src/gc.c @@ -903,15 +903,22 @@ obj_free(mrb_state *mrb, struct RBasic *obj, int end) } break; -#if defined(MRB_INT64) && defined(MRB_32BIT) -#ifdef MRB_USE_RATIONAL +#if defined(MRB_USE_RATIONAL) && defined(MRB_INT64) && defined(MRB_32BIT) case MRB_TT_RATIONAL: { struct RData *o = (struct RData*)obj; - mrb_free(mrb, obj->iv_tbl); + mrb_free(mrb, o->iv); } break; #endif + +#if defined(MRB_USE_COMPLEX) && defined(MRB_32BIT) && !defined(MRB_USE_FLOAT32) + case MRB_TT_COMPLEX: + { + struct RData *o = (struct RData*)obj; + mrb_free(mrb, o->iv); + } + break; #endif default: -- cgit v1.2.3