diff options
author | Bad Diode <bd@badd10de.dev> | 2021-10-16 21:22:08 +0200 |
---|---|---|
committer | Bad Diode <bd@badd10de.dev> | 2021-10-16 21:22:08 +0200 |
commit | bb58afb57221eb0316d6ee14e19c5f4c4a822ba1 (patch) | |
tree | f7e35285282ad2341740a83834bdb521cd61a857 /src/bootstrap/objects.c | |
parent | 9a5fceac983db127de876c875a59307f8f2893ba (diff) | |
download | bdl-bb58afb57221eb0316d6ee14e19c5f4c4a822ba1.tar.gz bdl-bb58afb57221eb0316d6ee14e19c5f4c4a822ba1.zip |
Add a working GC with mark-and-sweep
Diffstat (limited to 'src/bootstrap/objects.c')
-rw-r--r-- | src/bootstrap/objects.c | 35 |
1 files changed, 0 insertions, 35 deletions
diff --git a/src/bootstrap/objects.c b/src/bootstrap/objects.c index 2bd5b1a..09076db 100644 --- a/src/bootstrap/objects.c +++ b/src/bootstrap/objects.c | |||
@@ -116,41 +116,6 @@ append_string(Object *obj, const StringView sv) { | |||
116 | obj->string_n += sv.n; | 116 | obj->string_n += sv.n; |
117 | } | 117 | } |
118 | 118 | ||
119 | Object * | ||
120 | obj_duplicate(Object *obj) { | ||
121 | Object *copy = obj_err; | ||
122 | switch (obj->type) { | ||
123 | case OBJ_TYPE_BOOL: | ||
124 | case OBJ_TYPE_NIL: | ||
125 | case OBJ_TYPE_PROCEDURE: | ||
126 | case OBJ_TYPE_LAMBDA: // TODO: should we duplicate everything inside? | ||
127 | case OBJ_TYPE_ERR: { | ||
128 | copy = obj; | ||
129 | } break; | ||
130 | case OBJ_TYPE_FIXNUM: { | ||
131 | copy = make_fixnum(obj->fixnum); | ||
132 | } break; | ||
133 | case OBJ_TYPE_SYMBOL: { | ||
134 | copy = make_symbol((StringView){obj->symbol, obj->symbol_n}); | ||
135 | } break; | ||
136 | case OBJ_TYPE_STRING: { | ||
137 | copy = make_string(); | ||
138 | append_string(copy, (StringView){obj->string, obj->string_n}); | ||
139 | } break; | ||
140 | case OBJ_TYPE_PAIR: { | ||
141 | Object *root = make_pair(obj_duplicate(obj->car), obj_nil); | ||
142 | copy = root; | ||
143 | obj = obj->cdr; | ||
144 | while (obj != obj_nil) { | ||
145 | root->cdr = make_pair(obj_duplicate(obj->car), obj_nil); | ||
146 | root = root->cdr; | ||
147 | obj = obj->cdr; | ||
148 | } | ||
149 | } break; | ||
150 | } | ||
151 | return copy; | ||
152 | } | ||
153 | |||
154 | void display(Object *root); | 119 | void display(Object *root); |
155 | 120 | ||
156 | void | 121 | void |