diff options
author | Bad Diode <bd@badd10de.dev> | 2021-10-13 21:08:17 +0200 |
---|---|---|
committer | Bad Diode <bd@badd10de.dev> | 2021-10-13 21:08:17 +0200 |
commit | 00cf382196f81e22256e22e5c79a9d3503db5e91 (patch) | |
tree | 861137232ac8199beffd5c8d53284ec7be751fba /src/bootstrap/primitives.c | |
parent | d38ae947933fe26773a810d91fba3b23766d4d92 (diff) | |
download | bdl-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.c | 31 |
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 | ||
322 | Object * | ||
323 | proc_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 | ||
712 | Object * | ||
713 | proc_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 |