From 9a5fceac983db127de876c875a59307f8f2893ba Mon Sep 17 00:00:00 2001 From: Bad Diode Date: Sat, 16 Oct 2021 11:30:07 +0200 Subject: Tag all objects as roots during parsing --- src/bootstrap/objects.c | 25 +++++++++++-------------- 1 file changed, 11 insertions(+), 14 deletions(-) (limited to 'src/bootstrap/objects.c') diff --git a/src/bootstrap/objects.c b/src/bootstrap/objects.c index cf881a0..2bd5b1a 100644 --- a/src/bootstrap/objects.c +++ b/src/bootstrap/objects.c @@ -14,6 +14,7 @@ struct Environment; typedef struct Object { ObjectType type; + bool marked; union { // OBJ_TYPE_FIXNUM ssize_t fixnum; @@ -56,17 +57,13 @@ static Object *obj_nil; static Object *obj_true; static Object *obj_false; static Object *obj_err; +static Object *obj_quote; // // Constructors. // -Object * -alloc_object(ObjectType type) { - Object *obj = malloc(sizeof(Object)); - obj->type = type; - return obj; -} +Object * alloc_object(ObjectType); Object * make_fixnum(ssize_t num) { @@ -141,14 +138,14 @@ obj_duplicate(Object *obj) { append_string(copy, (StringView){obj->string, obj->string_n}); } break; case OBJ_TYPE_PAIR: { - // Object *root = make_pair(obj_duplicate(obj->car), obj_nil); - // copy = root; - // obj = obj->cdr; - // while (obj != obj_nil) { - // root->cdr = make_pair(obj_duplicate(obj->car), obj_nil); - // root = root->cdr; - // obj = obj->cdr; - // } + Object *root = make_pair(obj_duplicate(obj->car), obj_nil); + copy = root; + obj = obj->cdr; + while (obj != obj_nil) { + root->cdr = make_pair(obj_duplicate(obj->car), obj_nil); + root = root->cdr; + obj = obj->cdr; + } } break; } return copy; -- cgit v1.2.1