X-Git-Url: https://jxself.org/git/?a=blobdiff_plain;f=src%2Feval.c;h=f322946410a159bb45490395529367dde5520722;hb=58a5ffdfec139a0c9d399f603b77a764ae8607f7;hp=e563fdfd3acd91eab0048e537b7d7a1aba039b7f;hpb=6c1eef40f411ff4eec7a3f7599a81be7fae07e2a;p=muddle-interpreter.git diff --git a/src/eval.c b/src/eval.c index e563fdf..f322946 100644 --- a/src/eval.c +++ b/src/eval.c @@ -111,25 +111,25 @@ eval_rest () // 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); } @@ -145,7 +145,7 @@ eval () 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; @@ -157,11 +157,11 @@ eval () 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]); @@ -170,7 +170,7 @@ eval () 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);