summaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorYukihiro Matsumoto <[email protected]>2012-05-07 19:19:55 +0900
committerYukihiro Matsumoto <[email protected]>2012-05-07 19:19:55 +0900
commite93a17ed785548fa342cd5b1652b88d610aa4fdd (patch)
tree9541855ef4e05d641b273f55271093734521061f /src
parent4f1f243fe7e34acf6249d32cc68eedc8ff5bccbf (diff)
downloadmruby-e93a17ed785548fa342cd5b1652b88d610aa4fdd.tar.gz
mruby-e93a17ed785548fa342cd5b1652b88d610aa4fdd.zip
gc should handle regexp and match objects
Diffstat (limited to 'src')
-rw-r--r--src/gc.c29
1 files changed, 28 insertions, 1 deletions
diff --git a/src/gc.c b/src/gc.c
index 9ff9cd217..8f11f1e1d 100644
--- a/src/gc.c
+++ b/src/gc.c
@@ -369,6 +369,24 @@ gc_mark_children(mrb_state *mrb, struct RBasic *obj)
}
break;
+#ifdef INCLUDE_REGEXP
+ case MRB_TT_MATCH:
+ {
+ struct RMatch *m = (struct RMatch*)obj;
+
+ mrb_gc_mark(mrb, (struct RBasic*)m->str);
+ mrb_gc_mark(mrb, (struct RBasic*)m->regexp);
+ }
+ break;
+ case MRB_TT_REGEX:
+ {
+ struct RRegexp *r = (struct RRegexp*)obj;
+
+ mrb_gc_mark(mrb, (struct RBasic*)r->src);
+ }
+ break;
+#endif
+
default:
break;
}
@@ -443,7 +461,7 @@ obj_free(mrb_state *mrb, struct RBasic *obj)
d->type->dfree(mrb, d->data);
}
}
- break;
+ break;
default:
break;
@@ -541,6 +559,15 @@ gc_gray_mark(mrb_state *mrb, struct RBasic *obj)
children+=2;
break;
+#ifdef INCLUDE_REGEXP
+ case MRB_TT_MATCH:
+ children+=2;
+ break;
+ case MRB_TT_REGEX:
+ children+=1;
+ break;
+#endif
+
default:
break;
}