return cons;
}
+struct ao_lisp_cons *
+ao_lisp_cons_cdr(struct ao_lisp_cons *cons)
+{
+ ao_poly cdr = cons->cdr;
+ if (cdr == AO_LISP_NIL)
+ return NULL;
+ if (ao_lisp_poly_type(cdr) != AO_LISP_CONS) {
+ (void) ao_lisp_error(AO_LISP_INVALID, "improper list");
+ return NULL;
+ }
+ return ao_lisp_poly_cons(cdr);
+}
+
ao_poly
ao_lisp__cons(ao_poly car, ao_poly cdr)
{
void
ao_lisp_cons_free(struct ao_lisp_cons *cons)
{
+#if DBG_FREE_CONS
+ ao_lisp_cons_check(cons);
+#endif
while (cons) {
ao_poly cdr = cons->cdr;
cons->cdr = ao_lisp_cons_poly(ao_lisp_cons_free_list);