summaryrefslogtreecommitdiffhomepage
path: root/src/gc.c
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2013-11-08 20:39:50 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2013-11-08 20:39:50 +0900
commitde790bdc2785ee36730563982afc45480f6c0f42 (patch)
treeefc81547c8a6190a00bbd0fce704a02c8e373c3a /src/gc.c
parentcba07b02755711630e418fcf361d94cf47bb6730 (diff)
downloadmruby-de790bdc2785ee36730563982afc45480f6c0f42.tar.gz
mruby-de790bdc2785ee36730563982afc45480f6c0f42.zip
allow irep to be GCed
Diffstat (limited to 'src/gc.c')
-rw-r--r--src/gc.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/src/gc.c b/src/gc.c
index 866d5bdc8..a1ff4d32b 100644
--- a/src/gc.c
+++ b/src/gc.c
@@ -640,6 +640,16 @@ obj_free(mrb_state *mrb, struct RBasic *obj)
mrb_gc_free_str(mrb, (struct RString*)obj);
break;
+ case MRB_TT_PROC:
+ {
+ struct RProc *p = (struct RProc*)obj;
+
+ if (!MRB_PROC_CFUNC_P(p) && p->body.irep) {
+ mrb_irep_decref(mrb, p->body.irep);
+ }
+ }
+ break;
+
case MRB_TT_RANGE:
mrb_free(mrb, ((struct RRange*)obj)->edges);
break;