diff options
Diffstat (limited to 'src/value.c')
-rw-r--r-- | src/value.c | 19 |
1 files changed, 15 insertions, 4 deletions
diff --git a/src/value.c b/src/value.c index 3c06fa3..d7df858 100644 --- a/src/value.c +++ b/src/value.c @@ -136,10 +136,21 @@ static int cons_print(char *buf, size_t buf_sz, struct cons *cons) int offset = 0; buf[offset++] = '('; offset += value_string(cons->left, buf_sz-offset, buf+offset); - buf[offset++] = ' '; - buf[offset++] = '.'; - buf[offset++] = ' '; - offset += value_string(cons->right, buf_sz-offset, buf+offset); + + value_t right = cons->right; + while(right->type == VALUE_CONS) { + buf[offset++] = ' '; + offset += value_string(right->value.cons.left, + buf_sz-offset, buf+offset); + right = right->value.cons.right; + } + + if(right->type != VALUE_NIL) { + buf[offset++] = ' '; + buf[offset++] = '.'; + buf[offset++] = ' '; + offset += value_string(right, buf_sz-offset, buf+offset); + } buf[offset++] = ')'; return offset; |