diff options
| author | Keith Packard <keithp@keithp.com> | 2017-11-16 13:02:07 -0800 | 
|---|---|---|
| committer | Keith Packard <keithp@keithp.com> | 2017-11-16 13:02:07 -0800 | 
| commit | bd881a5b85d7cd4fb82127f92f32e089499b50cb (patch) | |
| tree | bf4f5f985e37544b1ee64a65020b809ee994e227 /src/lisp/ao_lisp_builtin.c | |
| parent | 50a095fbe828b6ec3159d27930712df6b1b519b4 (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.c | 14 | 
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  | 
