summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorKeith Packard <keithp@keithp.com>2017-11-16 18:41:18 -0800
committerKeith Packard <keithp@keithp.com>2017-11-16 18:41:18 -0800
commit0ced351c8f4449f7086b04e42c822d649f040d1f (patch)
tree24b2c47e7655c2a212b7bab1e29b33dd63f416cf /src
parentb3b4731fcb89cb404433f37a7704a503567c43bd (diff)
altos/lisp: Add 'else' sematics to cond
Signed-off-by: Keith Packard <keithp@keithp.com>
Diffstat (limited to 'src')
-rw-r--r--src/lisp/ao_lisp.h1
-rw-r--r--src/lisp/ao_lisp_eval.c5
-rw-r--r--src/lisp/ao_lisp_make_const.c3
3 files changed, 9 insertions, 0 deletions
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) {