diff options
Diffstat (limited to 'src/scheme/ao_scheme_cons.c')
-rw-r--r-- | src/scheme/ao_scheme_cons.c | 19 |
1 files changed, 12 insertions, 7 deletions
diff --git a/src/scheme/ao_scheme_cons.c b/src/scheme/ao_scheme_cons.c index 912100a9..0b3cbf80 100644 --- a/src/scheme/ao_scheme_cons.c +++ b/src/scheme/ao_scheme_cons.c @@ -181,16 +181,17 @@ ao_scheme_cons_write(ao_poly c) ao_poly cdr; int first = 1; + ao_scheme_print_start(); printf("("); while (cons) { if (!first) printf(" "); - ao_scheme_poly_write(cons->car); - cdr = cons->cdr; - if (cdr == c) { - printf(" ..."); + if (ao_scheme_print_mark_addr(cons)) { + printf("..."); break; } + ao_scheme_poly_write(cons->car); + cdr = cons->cdr; if (ao_scheme_poly_type(cdr) == AO_SCHEME_CONS) { cons = ao_scheme_poly_cons(cdr); first = 0; @@ -201,6 +202,7 @@ ao_scheme_cons_write(ao_poly c) } } printf(")"); + ao_scheme_print_stop(); } void @@ -209,13 +211,15 @@ ao_scheme_cons_display(ao_poly c) struct ao_scheme_cons *cons = ao_scheme_poly_cons(c); ao_poly cdr; + ao_scheme_print_start(); while (cons) { - ao_scheme_poly_display(cons->car); - cdr = cons->cdr; - if (cdr == c) { + if (ao_scheme_print_mark_addr(cons)) { printf("..."); break; } + ao_scheme_poly_display(cons->car); + + cdr = cons->cdr; if (ao_scheme_poly_type(cdr) == AO_SCHEME_CONS) cons = ao_scheme_poly_cons(cdr); else { @@ -223,6 +227,7 @@ ao_scheme_cons_display(ao_poly c) cons = NULL; } } + ao_scheme_print_stop(); } int |