From c0202d26b94434253fb99450734152b7cb1ae388 Mon Sep 17 00:00:00 2001 From: Bad Diode Date: Tue, 19 Oct 2021 12:59:41 +0200 Subject: Argument checking should happen before evaluation --- src/bootstrap/primitives.c | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) (limited to 'src/bootstrap') diff --git a/src/bootstrap/primitives.c b/src/bootstrap/primitives.c index 9960688..64dea95 100644 --- a/src/bootstrap/primitives.c +++ b/src/bootstrap/primitives.c @@ -118,20 +118,18 @@ eval_lambda: }); return obj_err; } + if (args->car == obj_nil) { + error_push((Error){ + .type = ERR_TYPE_RUNTIME, + .value = ERR_NOT_ENOUGH_ARGS, + }); + return obj_err; + } Object *symbol = params->car; Object *value = eval(env, args->car); if (value == obj_err) { return obj_err; } - if (value == obj_nil) { - // Need to reconsider this, it can cause issues when - // arguments contain a random nil - // error_push((Error){ - // .type = ERR_TYPE_RUNTIME, - // .value = ERR_NOT_ENOUGH_ARGS, - // }); - // return obj_err; - } env_add_or_update_current(tmp, symbol, value); args = args->cdr; params = params->cdr; -- cgit v1.2.1