aboutsummaryrefslogtreecommitdiffstats
path: root/src/bootstrap/objects.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/bootstrap/objects.c')
-rw-r--r--src/bootstrap/objects.c36
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
201bool
202obj_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}