From e93a17ed785548fa342cd5b1652b88d610aa4fdd Mon Sep 17 00:00:00 2001 From: Yukihiro Matsumoto Date: Mon, 7 May 2012 19:19:55 +0900 Subject: gc should handle regexp and match objects --- src/gc.c | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) (limited to 'src') 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; } -- cgit v1.2.3