summaryrefslogtreecommitdiff
path: root/src/lisp/ao_lisp_builtin.c
diff options
context:
space:
mode:
authorKeith Packard <keithp@keithp.com>2017-11-16 13:02:07 -0800
committerKeith Packard <keithp@keithp.com>2017-11-16 13:02:07 -0800
commitbd881a5b85d7cd4fb82127f92f32e089499b50cb (patch)
treebf4f5f985e37544b1ee64a65020b809ee994e227 /src/lisp/ao_lisp_builtin.c
parent50a095fbe828b6ec3159d27930712df6b1b519b4 (diff)
altos/lisp: Add non-cons cdr support
The cdr of a cons can be any value; add support for lexing and printing them. Signed-off-by: Keith Packard <keithp@keithp.com>
Diffstat (limited to 'src/lisp/ao_lisp_builtin.c')
-rw-r--r--src/lisp/ao_lisp_builtin.c14
1 files changed, 5 insertions, 9 deletions
diff --git a/src/lisp/ao_lisp_builtin.c b/src/lisp/ao_lisp_builtin.c
index 902f60e2..5a960873 100644
--- a/src/lisp/ao_lisp_builtin.c
+++ b/src/lisp/ao_lisp_builtin.c
@@ -190,11 +190,9 @@ ao_lisp_cons(struct ao_lisp_cons *cons)
ao_poly car, cdr;
if(!ao_lisp_check_argc(_ao_lisp_atom_cons, cons, 2, 2))
return AO_LISP_NIL;
- if (!ao_lisp_check_argt(_ao_lisp_atom_cons, cons, 1, AO_LISP_CONS, 1))
- return AO_LISP_NIL;
car = ao_lisp_arg(cons, 0);
cdr = ao_lisp_arg(cons, 1);
- return ao_lisp_cons_poly(ao_lisp_cons_cons(car, ao_lisp_poly_cons(cdr)));
+ return ao_lisp__cons(car, cdr);
}
ao_poly
@@ -247,14 +245,12 @@ ao_lisp_set(struct ao_lisp_cons *cons)
ao_poly
ao_lisp_setq(struct ao_lisp_cons *cons)
{
- struct ao_lisp_cons *expand = 0;
if (!ao_lisp_check_argc(_ao_lisp_atom_setq, cons, 2, 2))
return AO_LISP_NIL;
- expand = ao_lisp_cons_cons(_ao_lisp_atom_set,
- ao_lisp_cons_cons(ao_lisp_cons_poly(ao_lisp_cons_cons(_ao_lisp_atom_quote,
- ao_lisp_cons_cons(cons->car, NULL))),
- ao_lisp_poly_cons(cons->cdr)));
- return ao_lisp_cons_poly(expand);
+ return ao_lisp__cons(_ao_lisp_atom_set,
+ ao_lisp__cons(ao_lisp__cons(_ao_lisp_atom_quote,
+ ao_lisp__cons(cons->car, AO_LISP_NIL)),
+ cons->cdr));
}
ao_poly