summaryrefslogtreecommitdiffhomepage
path: root/src/gc.c
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2021-03-19 10:30:16 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2021-03-19 10:37:10 +0900
commitd3184e4a6d8b85a22dd46f4e2909492a0a08cab1 (patch)
treeb45f9be65a970d80d4b60401e44d053f3b78b394 /src/gc.c
parent08f9d5bab5092fe1193dd100765079e3e4d746b9 (diff)
downloadmruby-d3184e4a6d8b85a22dd46f4e2909492a0a08cab1.tar.gz
mruby-d3184e4a6d8b85a22dd46f4e2909492a0a08cab1.zip
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
Diffstat (limited to 'src/gc.c')
-rw-r--r--src/gc.c13
1 files changed, 10 insertions, 3 deletions
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: