summaryrefslogtreecommitdiffhomepage
path: root/src/gc.c
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2021-03-18 16:27:35 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2021-03-19 10:37:10 +0900
commit08f9d5bab5092fe1193dd100765079e3e4d746b9 (patch)
tree627588dd204f5a7c24ea79ab17076f3eeab818eb /src/gc.c
parenteb070303080b24458d3740424aa7aa8a45fa49eb (diff)
downloadmruby-08f9d5bab5092fe1193dd100765079e3e4d746b9.tar.gz
mruby-08f9d5bab5092fe1193dd100765079e3e4d746b9.zip
rational.c: overhaul rational operators.
- define `MRB_TT_RATIONAL` - change object structure (`struct RRational`) - add memory management for `MRB_TT_RATIONAL` - avoid operator overloading as much as possible - implement division overloading in C - as a result, performance improved a lot
Diffstat (limited to 'src/gc.c')
-rw-r--r--src/gc.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/src/gc.c b/src/gc.c
index 07ca61e52..9ea3c1712 100644
--- a/src/gc.c
+++ b/src/gc.c
@@ -903,6 +903,17 @@ obj_free(mrb_state *mrb, struct RBasic *obj, int end)
}
break;
+#if defined(MRB_INT64) && defined(MRB_32BIT)
+#ifdef MRB_USE_RATIONAL
+ case MRB_TT_RATIONAL:
+ {
+ struct RData *o = (struct RData*)obj;
+ mrb_free(mrb, obj->iv_tbl);
+ }
+ break;
+#endif
+#endif
+
default:
break;
}