diff --git a/gc.c b/gc.c index 6712dd9e..38be3150 100644 --- a/gc.c +++ b/gc.c @@ -480,6 +480,9 @@ gc_mark_object(pic_state *pic, struct pic_object *obj) for (it = xh_begin(&data->storage); it != NULL; it = xh_next(it)) { gc_mark(pic, xh_val(it, pic_value)); } + if (data->type->mark) { + data->type->mark(pic, data->data, gc_mark); + } break; } case PIC_TT_DICT: { diff --git a/include/picrin/data.h b/include/picrin/data.h index 0e59095d..79b633a5 100644 --- a/include/picrin/data.h +++ b/include/picrin/data.h @@ -12,6 +12,7 @@ extern "C" { typedef struct { const char *type_name; void (*dtor)(pic_state *, void *); + void (*mark)(pic_state *, void *, void (*)(pic_state *, pic_value)); } pic_data_type; struct pic_data {