added garbage collector draft

This commit is contained in:
Francesco Cozzuto
2021-12-06 00:12:02 +01:00
parent 60b871be55
commit dbcf50c71b
21 changed files with 389 additions and 48 deletions
+11 -1
View File
@@ -9,13 +9,15 @@ struct ClosureObject {
Object *vars;
};
static void walk(Object *self, void (*callback)(Object **referer, void *userp), void *userp);
static Object *select(Object *self, Object *key, Heap *heap, Error *err);
static const Type t_closure = {
static TypeObject t_closure = {
.base = (Object) { .type = &t_type, .flags = Object_STATIC },
.name = "closure",
.size = sizeof(ClosureObject),
.select = select,
.walk = walk,
};
Object *Object_NewClosure(Object *parent, Object *new_map, Heap *heap, Error *error)
@@ -54,4 +56,12 @@ static Object *select(Object *self, Object *key, Heap *heap, Error *err)
}
return selected;
}
static void walk(Object *self, void (*callback)(Object **referer, void *userp), void *userp)
{
ClosureObject *closure = (ClosureObject*) self;
callback((Object**) &closure->prev, userp);
callback(&closure->vars, userp);
}