aboutsummaryrefslogtreecommitdiffstats
path: root/src/bootstrap/objects.c
diff options
context:
space:
mode:
authorBad Diode <bd@badd10de.dev>2021-10-16 11:30:07 +0200
committerBad Diode <bd@badd10de.dev>2021-10-16 11:30:07 +0200
commit9a5fceac983db127de876c875a59307f8f2893ba (patch)
treeb39fa873c4f7b6a9604fca062e071506b8a10943 /src/bootstrap/objects.c
parent4948ce511d0e96d34f165ed8d0a00e1d5f1caba9 (diff)
downloadbdl-9a5fceac983db127de876c875a59307f8f2893ba.tar.gz
bdl-9a5fceac983db127de876c875a59307f8f2893ba.zip
Tag all objects as roots during parsing
Diffstat (limited to 'src/bootstrap/objects.c')
-rw-r--r--src/bootstrap/objects.c25
1 files changed, 11 insertions, 14 deletions
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;
14 14
15typedef struct Object { 15typedef struct Object {
16 ObjectType type; 16 ObjectType type;
17 bool marked;
17 union { 18 union {
18 // OBJ_TYPE_FIXNUM 19 // OBJ_TYPE_FIXNUM
19 ssize_t fixnum; 20 ssize_t fixnum;
@@ -56,17 +57,13 @@ static Object *obj_nil;
56static Object *obj_true; 57static Object *obj_true;
57static Object *obj_false; 58static Object *obj_false;
58static Object *obj_err; 59static Object *obj_err;
60static Object *obj_quote;
59 61
60// 62//
61// Constructors. 63// Constructors.
62// 64//
63 65
64Object * 66Object * alloc_object(ObjectType);
65alloc_object(ObjectType type) {
66 Object *obj = malloc(sizeof(Object));
67 obj->type = type;
68 return obj;
69}
70 67
71Object * 68Object *
72make_fixnum(ssize_t num) { 69make_fixnum(ssize_t num) {
@@ -141,14 +138,14 @@ obj_duplicate(Object *obj) {
141 append_string(copy, (StringView){obj->string, obj->string_n}); 138 append_string(copy, (StringView){obj->string, obj->string_n});
142 } break; 139 } break;
143 case OBJ_TYPE_PAIR: { 140 case OBJ_TYPE_PAIR: {
144 // Object *root = make_pair(obj_duplicate(obj->car), obj_nil); 141 Object *root = make_pair(obj_duplicate(obj->car), obj_nil);
145 // copy = root; 142 copy = root;
146 // obj = obj->cdr; 143 obj = obj->cdr;
147 // while (obj != obj_nil) { 144 while (obj != obj_nil) {
148 // root->cdr = make_pair(obj_duplicate(obj->car), obj_nil); 145 root->cdr = make_pair(obj_duplicate(obj->car), obj_nil);
149 // root = root->cdr; 146 root = root->cdr;
150 // obj = obj->cdr; 147 obj = obj->cdr;
151 // } 148 }
152 } break; 149 } break;
153 } 150 }
154 return copy; 151 return copy;