diff options
Diffstat (limited to 'src/bootstrap/objects.c')
-rw-r--r-- | src/bootstrap/objects.c | 25 |
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 | ||
15 | typedef struct Object { | 15 | typedef 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; | |||
56 | static Object *obj_true; | 57 | static Object *obj_true; |
57 | static Object *obj_false; | 58 | static Object *obj_false; |
58 | static Object *obj_err; | 59 | static Object *obj_err; |
60 | static Object *obj_quote; | ||
59 | 61 | ||
60 | // | 62 | // |
61 | // Constructors. | 63 | // Constructors. |
62 | // | 64 | // |
63 | 65 | ||
64 | Object * | 66 | Object * alloc_object(ObjectType); |
65 | alloc_object(ObjectType type) { | ||
66 | Object *obj = malloc(sizeof(Object)); | ||
67 | obj->type = type; | ||
68 | return obj; | ||
69 | } | ||
70 | 67 | ||
71 | Object * | 68 | Object * |
72 | make_fixnum(ssize_t num) { | 69 | make_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; |