diff options
Diffstat (limited to 'src/bootstrap/objects.c')
-rw-r--r-- | src/bootstrap/objects.c | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/src/bootstrap/objects.c b/src/bootstrap/objects.c index 0361ae8..497a04d 100644 --- a/src/bootstrap/objects.c +++ b/src/bootstrap/objects.c | |||
@@ -197,3 +197,39 @@ display(Object *root) { | |||
197 | } | 197 | } |
198 | return; | 198 | return; |
199 | } | 199 | } |
200 | |||
201 | bool | ||
202 | obj_eq(Object *a, Object* b) { | ||
203 | if (a->type != b->type) { | ||
204 | return false; | ||
205 | } | ||
206 | switch (a->type) { | ||
207 | case OBJ_TYPE_FIXNUM: { | ||
208 | return a->fixnum == b->fixnum; | ||
209 | } break; | ||
210 | case OBJ_TYPE_STRING: { | ||
211 | if (a->string_n != b->string_n) { | ||
212 | return false; | ||
213 | } | ||
214 | for (size_t i = 0; i < a->string_n; i++) { | ||
215 | if (a->string[i] != b->string[i]) { | ||
216 | return false; | ||
217 | } | ||
218 | } | ||
219 | } break; | ||
220 | case OBJ_TYPE_SYMBOL: { | ||
221 | if (a->symbol_n != b->symbol_n) { | ||
222 | return false; | ||
223 | } | ||
224 | for (size_t i = 0; i < a->symbol_n; i++) { | ||
225 | if (a->symbol[i] != b->symbol[i]) { | ||
226 | return false; | ||
227 | } | ||
228 | } | ||
229 | } break; | ||
230 | default: { | ||
231 | return a == b; | ||
232 | } break; | ||
233 | } | ||
234 | return true; | ||
235 | } | ||