aboutsummaryrefslogtreecommitdiff
path: root/src/value.c
diff options
context:
space:
mode:
authorkartofen <mladenovnasko0@gmail.com>2024-08-25 15:46:56 +0300
committerkartofen <mladenovnasko0@gmail.com>2024-08-25 15:46:56 +0300
commitc740ece288c3fb6f858a911222fd63caf95c4eea (patch)
tree860b3e15260b9f1cf6abc3c1f26d586c4ffdcd85 /src/value.c
parent54f071ac7d47ef515a3f6a4db9e83f2f9aca3c8c (diff)
lambda work, closures work, everything works
Diffstat (limited to 'src/value.c')
-rw-r--r--src/value.c19
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;