// store result of previous call
pool_object *prev_res = as_pool (&ret);
list_object *tail = as_list (&cf->locals[1]);
- *POOL_OBJECT (tail->head) = (pool_object)
+ *POOL_OBJECT (tail->val.head) = (pool_object)
{
- .type = prev_res->type,.rest = tail->head + 1,.val = prev_res->val};
+ .type = prev_res->type,.rest = tail->val.head + 1,.val = prev_res->val};
// advance input and output
assert (cf->args.len == 1);
list_object *args = as_list (&cf->args.body[0]);
- assert (args->head);
- args->head = POOL_OBJECT (args->head)->rest;
- if (!args->head)
+ assert (args->val.head);
+ args->val.head = POOL_OBJECT (args->val.head)->rest;
+ if (!args->val.head)
{
- POOL_OBJECT (tail->head)->rest = 0;
+ POOL_OBJECT (tail->val.head)->rest = 0;
RETURN (cf->locals[0]);
}
- tail->head++;
+ tail->val.head++;
// eval next element
END_LOCALS ();
- CALL_THEN (eval, new_tuple ((object *) POOL_OBJECT (args->head), 1),
+ CALL_THEN (eval, new_tuple ((object *) POOL_OBJECT (args->val.head), 1),
eval_rest);
}
case EVALTYPE_LIST:
// Handle `head` now; then iterate on `.rest`.
- if (!cf->args.body[0].list.head)
+ if (!cf->args.body[0].list.val.head)
RETURN (cf->args.body[0]);
// locals: { list_object list, list_object tail }
cst += 2;
END_LOCALS ();
CALL_THEN (eval,
new_tuple ((object *)
- POOL_OBJECT (cf->args.body[0].list.head), 1),
+ POOL_OBJECT (cf->args.body[0].list.val.head), 1),
eval_rest);
case EVALTYPE_FORM:
// `<>` is a special case.
- if (!cf->args.body[0].list.head)
+ if (!cf->args.body[0].list.val.head)
{
cf->args.body[0].type = EVALTYPE_FALSE;
RETURN (cf->args.body[0]);
END_LOCALS ();
CALL_THEN (eval,
new_tuple ((object *)
- POOL_OBJECT (cf->args.body[0].list.head), 1),
+ POOL_OBJECT (cf->args.body[0].list.val.head), 1),
call);
/*
case EVALTYPE_VECTOR: TAILCALL(eval_vector);