aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBad Diode <bd@badd10de.dev>2021-10-19 12:59:41 +0200
committerBad Diode <bd@badd10de.dev>2021-10-19 12:59:41 +0200
commitc0202d26b94434253fb99450734152b7cb1ae388 (patch)
tree2f3d34437812c9cb34b1c2ce8f27299ec36941cb
parent004d49dc5fc2a38aa1485dcd799dfe7cfd33902e (diff)
downloadbdl-c0202d26b94434253fb99450734152b7cb1ae388.tar.gz
bdl-c0202d26b94434253fb99450734152b7cb1ae388.zip
Argument checking should happen before evaluation
-rw-r--r--src/bootstrap/primitives.c16
1 files changed, 7 insertions, 9 deletions
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:
118 }); 118 });
119 return obj_err; 119 return obj_err;
120 } 120 }
121 if (args->car == obj_nil) {
122 error_push((Error){
123 .type = ERR_TYPE_RUNTIME,
124 .value = ERR_NOT_ENOUGH_ARGS,
125 });
126 return obj_err;
127 }
121 Object *symbol = params->car; 128 Object *symbol = params->car;
122 Object *value = eval(env, args->car); 129 Object *value = eval(env, args->car);
123 if (value == obj_err) { 130 if (value == obj_err) {
124 return obj_err; 131 return obj_err;
125 } 132 }
126 if (value == obj_nil) {
127 // Need to reconsider this, it can cause issues when
128 // arguments contain a random nil
129 // error_push((Error){
130 // .type = ERR_TYPE_RUNTIME,
131 // .value = ERR_NOT_ENOUGH_ARGS,
132 // });
133 // return obj_err;
134 }
135 env_add_or_update_current(tmp, symbol, value); 133 env_add_or_update_current(tmp, symbol, value);
136 args = args->cdr; 134 args = args->cdr;
137 params = params->cdr; 135 params = params->cdr;