aboutsummaryrefslogtreecommitdiffstats
path: root/src/bootstrap/primitives.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/bootstrap/primitives.c')
-rw-r--r--src/bootstrap/primitives.c57
1 files changed, 40 insertions, 17 deletions
diff --git a/src/bootstrap/primitives.c b/src/bootstrap/primitives.c
index 6300067..806656e 100644
--- a/src/bootstrap/primitives.c
+++ b/src/bootstrap/primitives.c
@@ -300,49 +300,72 @@ proc_print(Object *args) {
300 300
301Object * 301Object *
302proc_is_boolean(Object *args) { 302proc_is_boolean(Object *args) {
303 Object *obj = NULL; 303 if (args->type != OBJ_TYPE_PAIR) {
304 if (args->type == OBJ_TYPE_PAIR) { 304 fprintf(stderr, "error: wrong number of arguments.\n");
305 obj = eval(args->car); 305 return NULL;
306 } else {
307 obj = eval(args);
308 } 306 }
307 Object *obj = eval(args->car);
309 return (obj == obj_true || obj == obj_false) ? obj_true : obj_false; 308 return (obj == obj_true || obj == obj_false) ? obj_true : obj_false;
310} 309}
311 310
312Object * 311Object *
313proc_is_null(Object *args) { 312proc_is_null(Object *args) {
314 // TODO: stub 313 if (args->type != OBJ_TYPE_PAIR) {
315 return NULL; 314 fprintf(stderr, "error: wrong number of arguments.\n");
315 return NULL;
316 }
317 Object *obj = eval(args->car);
318 return obj == obj_nil ? obj_true : obj_false;
316} 319}
317 320
318Object * 321Object *
319proc_is_symbol(Object *args) { 322proc_is_symbol(Object *args) {
320 // TODO: stub 323 if (args->type != OBJ_TYPE_PAIR) {
321 return NULL; 324 fprintf(stderr, "error: wrong number of arguments.\n");
325 return NULL;
326 }
327 Object *obj = eval(args->car);
328 return obj->type == OBJ_TYPE_SYMBOL ? obj_true : obj_false;
322} 329}
323 330
324Object * 331Object *
325proc_is_string(Object *args) { 332proc_is_string(Object *args) {
326 // TODO: stub 333 if (args->type != OBJ_TYPE_PAIR) {
327 return NULL; 334 fprintf(stderr, "error: wrong number of arguments.\n");
335 return NULL;
336 }
337 Object *obj = eval(args->car);
338 return obj->type == OBJ_TYPE_STRING ? obj_true : obj_false;
328} 339}
329 340
330Object * 341Object *
331proc_is_fixnum(Object *args) { 342proc_is_fixnum(Object *args) {
332 // TODO: stub 343 if (args->type != OBJ_TYPE_PAIR) {
333 return NULL; 344 fprintf(stderr, "error: wrong number of arguments.\n");
345 return NULL;
346 }
347 Object *obj = eval(args->car);
348 return obj->type == OBJ_TYPE_FIXNUM ? obj_true : obj_false;
334} 349}
335 350
336Object * 351Object *
337proc_is_pair(Object *args) { 352proc_is_pair(Object *args) {
338 // TODO: stub 353 if (args->type != OBJ_TYPE_PAIR) {
339 return NULL; 354 fprintf(stderr, "error: wrong number of arguments.\n");
355 return NULL;
356 }
357 Object *obj = eval(args->car);
358 return obj->type == OBJ_TYPE_PAIR ? obj_true : obj_false;
340} 359}
341 360
342Object * 361Object *
343proc_is_procedure(Object *args) { 362proc_is_procedure(Object *args) {
344 // TODO: stub 363 if (args->type != OBJ_TYPE_PAIR) {
345 return NULL; 364 fprintf(stderr, "error: wrong number of arguments.\n");
365 return NULL;
366 }
367 Object *obj = eval(args->car);
368 return obj->type == OBJ_TYPE_PROCEDURE ? obj_true : obj_false;
346} 369}
347 370
348// 371//