aboutsummaryrefslogtreecommitdiffstats
path: root/src/bootstrap/primitives.c
diff options
context:
space:
mode:
authorBad Diode <bd@badd10de.dev>2021-10-13 21:08:17 +0200
committerBad Diode <bd@badd10de.dev>2021-10-13 21:08:17 +0200
commit00cf382196f81e22256e22e5c79a9d3503db5e91 (patch)
tree861137232ac8199beffd5c8d53284ec7be751fba /src/bootstrap/primitives.c
parentd38ae947933fe26773a810d91fba3b23766d4d92 (diff)
downloadbdl-00cf382196f81e22256e22e5c79a9d3503db5e91.tar.gz
bdl-00cf382196f81e22256e22e5c79a9d3503db5e91.zip
Add supress-errors primitive and variable tests
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