Fix missing argument values

This commit is contained in:
Přemysl Eric Janouch 2017-05-21 08:27:47 +02:00
parent 4d15d9cc6b
commit 567c3d8dc2
Signed by: p
GPG Key ID: B715679E3A361BE6
1 changed files with 8 additions and 7 deletions

9
ell.c
View File

@ -756,12 +756,13 @@ execute_args (struct context *ctx, struct item *args, struct item **res) {
struct item *evaluated = NULL; struct item *evaluated = NULL;
if (!execute_statement (ctx, args, &evaluated)) if (!execute_statement (ctx, args, &evaluated))
return false; return false;
if (evaluated) { // Arguments should not evaporate, default to a nil value
if (!evaluated && !check (ctx, (evaluated = new_list (NULL))))
return false;
item_free_list (evaluated->next); item_free_list (evaluated->next);
evaluated->next = NULL; evaluated->next = NULL;
res = &(*res = evaluated)->next; res = &(*res = evaluated)->next;
} }
}
return true; return true;
} }
@ -806,8 +807,8 @@ execute_statement
if (statement->type == ITEM_STRING) if (statement->type == ITEM_STRING)
return check (ctx, (*result = new_clone (statement))); return check (ctx, (*result = new_clone (statement)));
// XXX: should this ever happen and what are the consequences? // Executing a nil value results in no value. It's not very different from
// Shouldn't we rather clone the empty list? // calling a block that returns no value--it's for our callers to resolve.
struct item *body; struct item *body;
if (!(body = statement->head)) if (!(body = statement->head))
return true; return true;