From eb261a293ae88ff5f71e0569208e77e7a23e1e59 Mon Sep 17 00:00:00 2001 From: Yuichi Nishiwaki Date: Tue, 16 Sep 2014 16:18:19 +0900 Subject: [PATCH] add custom marker --- gc.c | 3 +++ include/picrin/data.h | 1 + 2 files changed, 4 insertions(+) diff --git a/gc.c b/gc.c index 2d61be7f..b0dc6a08 100644 --- a/gc.c +++ b/gc.c @@ -481,6 +481,9 @@ gc_mark_object(pic_state *pic, struct pic_object *obj) while (xh_next(&it)) { gc_mark(pic, xh_val(it.e, 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 {