From eb261a293ae88ff5f71e0569208e77e7a23e1e59 Mon Sep 17 00:00:00 2001
From: Yuichi Nishiwaki <yuichi.nishiwaki@gmail.com>
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 {