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

15
ell.c
View File

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