From: Keith Packard Date: Fri, 17 Nov 2017 02:41:18 +0000 (-0800) Subject: altos/lisp: Add 'else' sematics to cond X-Git-Tag: 1.8.3~1^2~50 X-Git-Url: https://git.gag.com/?p=fw%2Faltos;a=commitdiff_plain;h=0ced351c8f4449f7086b04e42c822d649f040d1f altos/lisp: Add 'else' sematics to cond Signed-off-by: Keith Packard --- diff --git a/src/lisp/ao_lisp.h b/src/lisp/ao_lisp.h index cd002cc2..9a48a445 100644 --- a/src/lisp/ao_lisp.h +++ b/src/lisp/ao_lisp.h @@ -68,6 +68,7 @@ extern uint8_t ao_lisp_const[AO_LISP_POOL_CONST] __attribute__((aligned(4))); #define _ao_lisp_atom_last _atom(last) #define _ao_lisp_atom_length _atom(length) #define _ao_lisp_atom_cond _atom(cond) +#define _ao_lisp_atom_else _atom(else) #define _ao_lisp_atom_lambda _atom(lambda) #define _ao_lisp_atom_led _atom(led) #define _ao_lisp_atom_delay _atom(delay) diff --git a/src/lisp/ao_lisp_eval.c b/src/lisp/ao_lisp_eval.c index b6cb4fd8..57227e93 100644 --- a/src/lisp/ao_lisp_eval.c +++ b/src/lisp/ao_lisp_eval.c @@ -324,6 +324,8 @@ ao_lisp_eval_cond(void) return 0; } ao_lisp_v = ao_lisp_poly_cons(ao_lisp_v)->car; + if (ao_lisp_v == _ao_lisp_atom_else) + ao_lisp_v = _ao_lisp_bool_true; ao_lisp_stack->state = eval_cond_test; if (!ao_lisp_stack_push()) return 0; @@ -492,6 +494,9 @@ const char *ao_lisp_state_names[] = { "cond", "cond_test", "progn", + "while", + "while_test", + "macro", }; /* diff --git a/src/lisp/ao_lisp_make_const.c b/src/lisp/ao_lisp_make_const.c index 02cfa67e..826c98b9 100644 --- a/src/lisp/ao_lisp_make_const.c +++ b/src/lisp/ao_lisp_make_const.c @@ -304,6 +304,9 @@ main(int argc, char **argv) ao_lisp_atom_set(ao_lisp_atom_poly(a), ao_lisp_atom_poly(a)); + /* 'else' */ + a = ao_lisp_atom_intern("else"); + if (argv[optind]){ in = fopen(argv[optind], "r"); if (!in) {