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.c31
1 files changed, 31 insertions, 0 deletions
diff --git a/src/bootstrap/primitives.c b/src/bootstrap/primitives.c
index a3b69f6..3afeef6 100644
--- a/src/bootstrap/primitives.c
+++ b/src/bootstrap/primitives.c
@@ -319,6 +319,22 @@ proc_is_procedure(Environment *env, Object *obj) {
319 return obj->type == OBJ_TYPE_PROCEDURE ? obj_true : obj_false; 319 return obj->type == OBJ_TYPE_PROCEDURE ? obj_true : obj_false;
320} 320}
321 321
322Object *
323proc_is_error(Environment *env, Object *obj) {
324 if (obj == obj_nil) {
325 error_push((Error){
326 .type = ERR_TYPE_RUNTIME,
327 .value = ERR_NOT_ENOUGH_ARGS,
328 });
329 return obj_err;
330 }
331 obj = eval(env, obj->car);
332 if (obj == obj_err) {
333 return obj_true;
334 }
335 return obj_false;
336}
337
322// 338//
323// Boolean/conditional procedures. 339// Boolean/conditional procedures.
324// 340//
@@ -693,6 +709,21 @@ proc_eval(Environment *env, Object *obj) {
693 return eval(env, eval(env, obj->car)); 709 return eval(env, eval(env, obj->car));
694} 710}
695 711
712Object *
713proc_supress_errors(Environment *env, Object *obj) {
714 Object *car = extract_car_with_type(env, obj, OBJ_TYPE_BOOL);
715 if (car == obj_err) {
716 return obj_err;
717 }
718
719 if (car == obj_true) {
720 supress_errors = true;
721 } else if (car == obj_false) {
722 supress_errors = false;
723 }
724 return obj_nil;
725}
726
696// TODO: map 727// TODO: map
697// TODO: apply 728// TODO: apply
698// TODO: filter 729// TODO: filter