From 6047f56db82852f07e4f7e308af69fa80b1cc259 Mon Sep 17 00:00:00 2001 From: lemon Date: Tue, 18 Oct 2022 09:12:03 +0200 Subject: gc mark record --- pez.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/pez.c b/pez.c index 8201437..098b2ff 100644 --- a/pez.c +++ b/pez.c @@ -950,6 +950,19 @@ markdilambda(PezContext *cx, Dilambda *dl) gcmark(cx, (Obj *)dl->setf); } +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) { @@ -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; } } -- cgit v1.2.3