summaryrefslogtreecommitdiff
path: root/pez.c
diff options
context:
space:
mode:
Diffstat (limited to 'pez.c')
-rw-r--r--pez.c16
1 files changed, 16 insertions, 0 deletions
diff --git a/pez.c b/pez.c
index 8201437..098b2ff 100644
--- a/pez.c
+++ b/pez.c
@@ -951,6 +951,19 @@ markdilambda(PezContext *cx, Dilambda *dl)
}
static void
+markrecord(PezContext *cx, Record *rc)
+{
+ for (uint i = 0; i < (1 << rc->exp); ++i) {
+ if (isobj(rc->dat[i].k)) {
+ gcmark(cx, unbox_obj(rc->dat[i].k));
+ }
+ if (isobj(rc->dat[i].v)) {
+ gcmark(cx, unbox_obj(rc->dat[i].v));
+ }
+ }
+}
+
+static void
gcmark(PezContext *cx, Obj *o)
{
assert(cx->gccanrun);
@@ -974,6 +987,9 @@ gcmark(PezContext *cx, Obj *o)
case PEZ_TDilambda:
markdilambda(cx, (Dilambda *)o);
break;
+ case PEZ_TRecord:
+ markrecord(cx, (Record *)o);
+ break;
}
}