C: add const specifiers where appropriate

As a hint whether values are eaten.
This commit is contained in:
Přemysl Eric Janouch 2018-10-10 21:39:29 +02:00
parent c81f986ec2
commit 728977d241
Signed by: p
GPG Key ID: A0420B94F92B9493
1 changed files with 23 additions and 17 deletions

40
ell.c
View File

@ -793,12 +793,14 @@ ell_can_modify_error (struct ell *ell) {
return !ell->memory_failure && ell->error[0] != '_'; return !ell->memory_failure && ell->error[0] != '_';
} }
static bool ell_eval_statement (struct ell *, struct ell_v *, struct ell_v **); static bool ell_eval_statement
(struct ell *, const struct ell_v *, struct ell_v **);
static bool ell_eval_block static bool ell_eval_block
(struct ell *, struct ell_v *, struct ell_v *, struct ell_v **); (struct ell *, const struct ell_v *, struct ell_v *, struct ell_v **);
static bool static bool
ell_eval_args (struct ell *ell, struct ell_v *args, struct ell_v **result) { ell_eval_args (struct ell *ell,
const struct ell_v *args, struct ell_v **result) {
size_t i = 0; size_t i = 0;
struct ell_v *res = NULL, **out = &res; struct ell_v *res = NULL, **out = &res;
for (; args; args = args->next) { for (; args; args = args->next) {
@ -828,7 +830,7 @@ error:
} }
static bool static bool
ell_eval_native (struct ell *ell, const char *name, struct ell_v *args, ell_eval_native (struct ell *ell, const char *name, const struct ell_v *args,
struct ell_v **result) { struct ell_v **result) {
struct ell_native_fn *fn = ell_native_find (ell, name); struct ell_native_fn *fn = ell_native_find (ell, name);
if (!fn) if (!fn)
@ -844,8 +846,8 @@ ell_eval_native (struct ell *ell, const char *name, struct ell_v *args,
} }
static bool static bool
ell_eval_resolved (struct ell *ell, struct ell_v *body, struct ell_v *args, ell_eval_resolved (struct ell *ell,
struct ell_v **result) { const struct ell_v *body, const struct ell_v *args, struct ell_v **result) {
// Resolving names recursively could be pretty fatal, let's not do that // Resolving names recursively could be pretty fatal, let's not do that
if (body->type == ELL_STRING) if (body->type == ELL_STRING)
return ell_check (ell, (*result = ell_clone (body))); return ell_check (ell, (*result = ell_clone (body)));
@ -855,13 +857,16 @@ ell_eval_resolved (struct ell *ell, struct ell_v *body, struct ell_v *args,
} }
static bool static bool
ell_eval_value (struct ell *ell, struct ell_v *body, struct ell_v **result) { ell_eval_value (struct ell *ell, const struct ell_v *body,
struct ell_v *args = body->next; struct ell_v **result) {
const struct ell_v *args = body->next;
if (body->type == ELL_STRING) { if (body->type == ELL_STRING) {
const char *name = body->string; const char *name = body->string;
if (!strcmp (name, "block")) if (!strcmp (name, "block")) {
return (!args || ell_check (ell, (args = ell_clone_seq (args)))) struct ell_v *cloned = NULL;
&& ell_check (ell, (*result = ell_list (args))); return (!args || ell_check (ell, (cloned = ell_clone_seq (args))))
&& ell_check (ell, (*result = ell_list (cloned)));
}
if ((body = ell_get (ell, name))) if ((body = ell_get (ell, name)))
return ell_eval_resolved (ell, body, args, result); return ell_eval_resolved (ell, body, args, result);
return ell_eval_native (ell, name, args, result); return ell_eval_native (ell, name, args, result);
@ -885,7 +890,7 @@ ell_eval_value (struct ell *ell, struct ell_v *body, struct ell_v **result) {
static bool static bool
ell_eval_statement ell_eval_statement
(struct ell *ell, struct ell_v *statement, struct ell_v **result) { (struct ell *ell, const struct ell_v *statement, struct ell_v **result) {
if (statement->type == ELL_STRING) if (statement->type == ELL_STRING)
return ell_check (ell, (*result = ell_clone (statement))); return ell_check (ell, (*result = ell_clone (statement)));
@ -931,7 +936,7 @@ args_to_scope (struct ell *ell, struct ell_v *args, struct ell_v **scope) {
/// Execute a block and return whatever the last statement returned, eats args /// Execute a block and return whatever the last statement returned, eats args
static bool static bool
ell_eval_block (struct ell *ell, struct ell_v *body, struct ell_v *args, ell_eval_block (struct ell *ell, const struct ell_v *body, struct ell_v *args,
struct ell_v **result) { struct ell_v **result) {
struct ell_v *scope = NULL; struct ell_v *scope = NULL;
if (!args_to_scope (ell, args, &scope)) { if (!args_to_scope (ell, args, &scope)) {
@ -961,13 +966,14 @@ ell_eval_block (struct ell *ell, struct ell_v *body, struct ell_v *args,
(struct ell *ell, struct ell_v *args, struct ell_v **result) (struct ell *ell, struct ell_v *args, struct ell_v **result)
static bool static bool
ell_eval_any (struct ell *ell, struct ell_v *body, struct ell_v *arg, ell_eval_any (struct ell *ell,
struct ell_v **result) { const struct ell_v *body, const struct ell_v *arg, struct ell_v **result) {
if (body->type == ELL_STRING) if (body->type == ELL_STRING)
return ell_check (ell, (*result = ell_clone (body))); return ell_check (ell, (*result = ell_clone (body)));
if (arg && !ell_check (ell, (arg = ell_clone (arg)))) struct ell_v *cloned_arg = NULL;
if (arg && !ell_check (ell, (cloned_arg = ell_clone (arg))))
return false; return false;
return ell_eval_block (ell, body->head, arg, result); return ell_eval_block (ell, body->head, cloned_arg, result);
} }
static struct ell_v * static struct ell_v *