diff options
author | Bad Diode <bd@badd10de.dev> | 2021-10-15 18:29:57 +0200 |
---|---|---|
committer | Bad Diode <bd@badd10de.dev> | 2021-10-15 18:29:57 +0200 |
commit | e0304c749a0bc2e3ec00ed80f84680676519fa42 (patch) | |
tree | 3b838f148dc3c62c924472a09ccad6f110242896 /src/bootstrap/objects.c | |
parent | 87b1a0d4a833dd0b2164481be45f7d1c59375040 (diff) | |
download | bdl-e0304c749a0bc2e3ec00ed80f84680676519fa42.tar.gz bdl-e0304c749a0bc2e3ec00ed80f84680676519fa42.zip |
Remove free_objects function
Diffstat (limited to 'src/bootstrap/objects.c')
-rw-r--r-- | src/bootstrap/objects.c | 56 |
1 files changed, 8 insertions, 48 deletions
diff --git a/src/bootstrap/objects.c b/src/bootstrap/objects.c index b03a616..cf881a0 100644 --- a/src/bootstrap/objects.c +++ b/src/bootstrap/objects.c | |||
@@ -141,59 +141,19 @@ obj_duplicate(Object *obj) { | |||
141 | append_string(copy, (StringView){obj->string, obj->string_n}); | 141 | append_string(copy, (StringView){obj->string, obj->string_n}); |
142 | } break; | 142 | } break; |
143 | case OBJ_TYPE_PAIR: { | 143 | case OBJ_TYPE_PAIR: { |
144 | Object *root = make_pair(obj_duplicate(obj->car), obj_nil); | 144 | // Object *root = make_pair(obj_duplicate(obj->car), obj_nil); |
145 | copy = root; | 145 | // copy = root; |
146 | obj = obj->cdr; | 146 | // obj = obj->cdr; |
147 | while (obj != obj_nil) { | 147 | // while (obj != obj_nil) { |
148 | root->cdr = make_pair(obj_duplicate(obj->car), obj_nil); | 148 | // root->cdr = make_pair(obj_duplicate(obj->car), obj_nil); |
149 | root = root->cdr; | 149 | // root = root->cdr; |
150 | obj = obj->cdr; | 150 | // obj = obj->cdr; |
151 | } | 151 | // } |
152 | } break; | 152 | } break; |
153 | } | 153 | } |
154 | return copy; | 154 | return copy; |
155 | } | 155 | } |
156 | 156 | ||
157 | void | ||
158 | free_objects(Object *root) { | ||
159 | switch (root->type) { | ||
160 | case OBJ_TYPE_BOOL: break; | ||
161 | case OBJ_TYPE_NIL: break; | ||
162 | case OBJ_TYPE_ERR: break; | ||
163 | case OBJ_TYPE_PROCEDURE: | ||
164 | case OBJ_TYPE_FIXNUM: { | ||
165 | free(root); | ||
166 | } break; | ||
167 | case OBJ_TYPE_SYMBOL: { | ||
168 | if (root->symbol != NULL) { | ||
169 | free(root->symbol); | ||
170 | } | ||
171 | free(root); | ||
172 | } break; | ||
173 | case OBJ_TYPE_STRING: { | ||
174 | if (root->string != NULL) { | ||
175 | free(root->string); | ||
176 | } | ||
177 | free(root); | ||
178 | } break; | ||
179 | case OBJ_TYPE_PAIR: { | ||
180 | if (root->car != NULL) { | ||
181 | free_objects(root->car); | ||
182 | } | ||
183 | if (root->cdr != NULL) { | ||
184 | free_objects(root->cdr); | ||
185 | } | ||
186 | free(root); | ||
187 | } break; | ||
188 | case OBJ_TYPE_LAMBDA: { | ||
189 | free_objects(root->params); | ||
190 | free_objects(root->body); | ||
191 | // TODO: free_env(root->env); | ||
192 | free(root); | ||
193 | } break; | ||
194 | } | ||
195 | } | ||
196 | |||
197 | void display(Object *root); | 157 | void display(Object *root); |
198 | 158 | ||
199 | void | 159 | void |