Add progn special form

This commit is contained in:
2022-11-04 09:49:37 -04:00
parent 4dab281b1f
commit c37e46e354
3 changed files with 28 additions and 8 deletions

View File

@@ -44,13 +44,7 @@ struct ucl_object *ucl_special_if(struct ucl_state *state, struct ucl_object *ar
return ucl_evaluate(state, true_form);
}
struct ucl_object *result = NULL;
FOREACH_LIST(false_forms, iter, form) {
result = ucl_evaluate(state, form);
}
return (result == NULL) ? ucl_nil_create() : result;
return ucl_progn(state, false_forms);
}
@@ -80,13 +74,18 @@ struct ucl_object *ucl_special_defun(struct ucl_state *state, struct ucl_object
struct ucl_object *ucl_special_setq(struct ucl_state *state, struct ucl_object *args) {
// TODO: Check arguments
struct ucl_object *sym = ucl_car(args);
struct ucl_state *root_state = ucl_state_get_root(state);
if (sym->type != UCL_TYPE_SYMBOL) {
return ucl_error_create("First argument to defun must be a symbol");
}
struct ucl_object *value = ucl_evaluate(state, ucl_list_nth(args, 1));
ucl_state_put(ucl_state_get_root(state), sym->symbol, value);
ucl_state_put(root_state, sym->symbol, value);
return sym;
}
struct ucl_object *ucl_special_progn(struct ucl_state *state, struct ucl_object *args) {
return ucl_progn(state, args);
}