gc should handle regexp and match objects

This commit is contained in:
Yukihiro Matsumoto
2012-05-07 19:19:55 +09:00
parent 4f1f243fe7
commit e93a17ed78
+28 -1
View File
@@ -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;
}