diff options
Diffstat (limited to 'src/bootstrap/primitives.c')
-rw-r--r-- | src/bootstrap/primitives.c | 47 |
1 files changed, 29 insertions, 18 deletions
diff --git a/src/bootstrap/primitives.c b/src/bootstrap/primitives.c index 8369fa8..2a82782 100644 --- a/src/bootstrap/primitives.c +++ b/src/bootstrap/primitives.c | |||
@@ -880,21 +880,32 @@ proc_list(Environment *env, Object *obj) { | |||
880 | // Polymorphic procedures. | 880 | // Polymorphic procedures. |
881 | // | 881 | // |
882 | 882 | ||
883 | //Object * | 883 | Object * |
884 | //proc_equal(Object *args) { | 884 | proc_equal(Environment *env, Object *obj) { |
885 | // // TODO: stub | 885 | if (obj == obj_nil || obj->cdr == obj_nil) { |
886 | // (void) args; | 886 | error_push((Error){ |
887 | // return NULL; | 887 | .type = ERR_TYPE_RUNTIME, |
888 | //} | 888 | .value = ERR_NOT_ENOUGH_ARGS, |
889 | 889 | }); | |
890 | //// TODO: fixnum left/right shift, mask, invert | 890 | return obj_err; |
891 | //// TODO: implement and test missing procedures | 891 | } |
892 | //// TODO: add primitives for type transforms: string->symbol, symbol->string, etc | 892 | Object *a = eval(env, obj->car); |
893 | //// TODO: properly implement nested environments | 893 | if (a == obj_err) { |
894 | //// TODO: implement support for quotes and semi-quotes | 894 | return obj_err; |
895 | //// TODO: LAMBDA | 895 | } |
896 | //// TODO: let | 896 | Object *b = eval(env, obj->cdr->car); |
897 | //// TODO: better error handling? | 897 | if (b == obj_err) { |
898 | //// TODO: Revise all instances where we are returning an object, since currently | 898 | return obj_err; |
899 | //// we may be returning a pointer to an object instead of a new one. Check also | 899 | } |
900 | //// on eval function and everytime we do make_xxx(obj). | 900 | return obj_eq(a, b) ? obj_true : obj_false; |
901 | } | ||
902 | |||
903 | |||
904 | // TODO: fixnum left/right shift, mask, invert | ||
905 | // TODO: add primitives for type transforms: string->symbol, symbol->string, etc | ||
906 | // TODO: implement support for semi-quotes | ||
907 | // TODO: LAMBDA | ||
908 | // TODO: let | ||
909 | // TODO: Revise all instances where we are returning an object, since currently | ||
910 | // we may be returning a pointer to an object instead of a new one. Check also | ||
911 | // on eval function and everytime we do make_xxx(obj). | ||