From 00cf382196f81e22256e22e5c79a9d3503db5e91 Mon Sep 17 00:00:00 2001 From: Bad Diode Date: Wed, 13 Oct 2021 21:08:17 +0200 Subject: Add supress-errors primitive and variable tests --- src/bootstrap/primitives.c | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) (limited to 'src/bootstrap/primitives.c') 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) { return obj->type == OBJ_TYPE_PROCEDURE ? obj_true : obj_false; } +Object * +proc_is_error(Environment *env, Object *obj) { + if (obj == obj_nil) { + error_push((Error){ + .type = ERR_TYPE_RUNTIME, + .value = ERR_NOT_ENOUGH_ARGS, + }); + return obj_err; + } + obj = eval(env, obj->car); + if (obj == obj_err) { + return obj_true; + } + return obj_false; +} + // // Boolean/conditional procedures. // @@ -693,6 +709,21 @@ proc_eval(Environment *env, Object *obj) { return eval(env, eval(env, obj->car)); } +Object * +proc_supress_errors(Environment *env, Object *obj) { + Object *car = extract_car_with_type(env, obj, OBJ_TYPE_BOOL); + if (car == obj_err) { + return obj_err; + } + + if (car == obj_true) { + supress_errors = true; + } else if (car == obj_false) { + supress_errors = false; + } + return obj_nil; +} + // TODO: map // TODO: apply // TODO: filter -- cgit v1.2.1