aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBad Diode <bd@badd10de.dev>2021-10-15 18:29:57 +0200
committerBad Diode <bd@badd10de.dev>2021-10-15 18:29:57 +0200
commite0304c749a0bc2e3ec00ed80f84680676519fa42 (patch)
tree3b838f148dc3c62c924472a09ccad6f110242896
parent87b1a0d4a833dd0b2164481be45f7d1c59375040 (diff)
downloadbdl-e0304c749a0bc2e3ec00ed80f84680676519fa42.tar.gz
bdl-e0304c749a0bc2e3ec00ed80f84680676519fa42.zip
Remove free_objects function
-rw-r--r--src/bootstrap/objects.c56
-rw-r--r--src/bootstrap/parser.c3
2 files changed, 8 insertions, 51 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
157void
158free_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
197void display(Object *root); 157void display(Object *root);
198 158
199void 159void
diff --git a/src/bootstrap/parser.c b/src/bootstrap/parser.c
index f047b8e..869678e 100644
--- a/src/bootstrap/parser.c
+++ b/src/bootstrap/parser.c
@@ -54,12 +54,10 @@ parse_list(Visitor *vs) {
54 break; 54 break;
55 } 55 }
56 if (tok.type == TOKEN_EOF) { 56 if (tok.type == TOKEN_EOF) {
57 free_objects(root);
58 return obj_err; 57 return obj_err;
59 } 58 }
60 next_obj = parse_tree(vs); 59 next_obj = parse_tree(vs);
61 if (next_obj == obj_err) { 60 if (next_obj == obj_err) {
62 free_objects(root);
63 return obj_err; 61 return obj_err;
64 } 62 }
65 list->cdr = make_pair(next_obj, obj_nil); 63 list->cdr = make_pair(next_obj, obj_nil);
@@ -94,7 +92,6 @@ parse_tree(Visitor *vs) {
94 Object *quote_sym = make_symbol((StringView){"quote", 5}); 92 Object *quote_sym = make_symbol((StringView){"quote", 5});
95 Object *next_obj = parse_tree(vs); 93 Object *next_obj = parse_tree(vs);
96 if (next_obj == obj_err) { 94 if (next_obj == obj_err) {
97 free_objects(quote_sym);
98 return obj_err; 95 return obj_err;
99 } 96 }
100 return make_pair(quote_sym, make_pair(next_obj, obj_nil)); 97 return make_pair(quote_sym, make_pair(next_obj, obj_nil));