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.c23
1 files changed, 22 insertions, 1 deletions
diff --git a/src/bootstrap/primitives.c b/src/bootstrap/primitives.c
index 97058f9..61ce360 100644
--- a/src/bootstrap/primitives.c
+++ b/src/bootstrap/primitives.c
@@ -309,5 +309,26 @@ proc_or(Object *args) {
309 return obj_false; 309 return obj_false;
310} 310}
311 311
312// TODO: if/cond 312Object *
313proc_if(Object *args) {
314 if (args->type != OBJ_TYPE_PAIR || args->cdr->type != OBJ_TYPE_PAIR) {
315 fprintf(stderr, "error: wrong number of arguments.\n");
316 return NULL;
317 }
318
319 Object *condition = eval(args->car);
320 if (condition == obj_true) {
321 Object *ret = eval(args->cdr->car);
322 return ret;
323 }
324 if (args->cdr->cdr != obj_nil) {
325 Object *ret = eval(args->cdr->cdr->car);
326 return ret;
327 }
328
329 return obj_nil;
330}
331
332// TODO: cond
333// TODO: equality greater than smaller than...
313// TODO: fixnum left/right shift, mask, invert 334// TODO: fixnum left/right shift, mask, invert