Skip to content

Commit 2a37dae

Browse files
committed
Update Iniquity+ and Knock+ to print vectors and strings correctly
1 parent 8270fa7 commit 2a37dae

4 files changed

Lines changed: 27 additions & 19 deletions

File tree

iniquity-plus/print.c

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -31,15 +31,15 @@ void print_result(val_t x)
3131
case T_EMPTY:
3232
case T_BOX:
3333
case T_CONS:
34-
case T_VECT:
34+
case T_VECT:
3535
printf("'");
3636
print_result_interior(x);
3737
break;
3838
case T_STR:
3939
putchar('"');
4040
print_str(val_unwrap_str(x));
4141
putchar('"');
42-
break;
42+
break;
4343
case T_INVALID:
4444
printf("internal error");
4545
}
@@ -62,7 +62,7 @@ void print_result_interior(val_t x)
6262
break;
6363
case T_VECT:
6464
print_vect(val_unwrap_vect(x));
65-
break;
65+
break;
6666
default:
6767
print_result(x);
6868
}
@@ -71,14 +71,15 @@ void print_result_interior(val_t x)
7171
void print_vect(val_vect_t *v)
7272
{
7373
uint64_t i;
74+
int64_t len = val_unwrap_int(v->len);
7475

7576
if (!v) { printf("#()"); return; }
7677

7778
printf("#(");
78-
for (i = 0; i < v->len; ++i) {
79+
for (i = 0; i < len; ++i) {
7980
print_result_interior(v->elems[i]);
8081

81-
if (i < v->len - 1)
82+
if (i < len - 1)
8283
putchar(' ');
8384
}
8485
printf(")");
@@ -105,9 +106,12 @@ void print_cons(val_cons_t *cons)
105106

106107
void print_str(val_str_t* s)
107108
{
108-
if (!s) return;
109109
uint64_t i;
110-
for (i = 0; i < s->len; ++i)
110+
int64_t len = val_unwrap_int(s->len);
111+
112+
if (!s) return;
113+
114+
for (i = 0; i < len; ++i)
111115
print_str_char(s->codepoints[i]);
112116
}
113117

iniquity-plus/values.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ typedef enum type_t {
1212
T_INT,
1313
T_BOOL,
1414
T_CHAR,
15-
T_EOF,
15+
T_EOF,
1616
T_VOID,
1717
T_EMPTY,
1818
/* pointers */
@@ -31,11 +31,11 @@ typedef struct val_cons_t {
3131
val_t snd;
3232
} val_cons_t;
3333
typedef struct val_vect_t {
34-
uint64_t len;
34+
val_t len;
3535
val_t elems[];
3636
} val_vect_t;
3737
typedef struct val_str_t {
38-
uint64_t len;
38+
val_t len;
3939
val_char_t codepoints[];
4040
} val_str_t;
4141

knock-plus/print.c

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -31,15 +31,15 @@ void print_result(val_t x)
3131
case T_EMPTY:
3232
case T_BOX:
3333
case T_CONS:
34-
case T_VECT:
34+
case T_VECT:
3535
printf("'");
3636
print_result_interior(x);
3737
break;
3838
case T_STR:
3939
putchar('"');
4040
print_str(val_unwrap_str(x));
4141
putchar('"');
42-
break;
42+
break;
4343
case T_INVALID:
4444
printf("internal error");
4545
}
@@ -62,7 +62,7 @@ void print_result_interior(val_t x)
6262
break;
6363
case T_VECT:
6464
print_vect(val_unwrap_vect(x));
65-
break;
65+
break;
6666
default:
6767
print_result(x);
6868
}
@@ -71,14 +71,15 @@ void print_result_interior(val_t x)
7171
void print_vect(val_vect_t *v)
7272
{
7373
uint64_t i;
74+
int64_t len = val_unwrap_int(v->len);
7475

7576
if (!v) { printf("#()"); return; }
7677

7778
printf("#(");
78-
for (i = 0; i < v->len; ++i) {
79+
for (i = 0; i < len; ++i) {
7980
print_result_interior(v->elems[i]);
8081

81-
if (i < v->len - 1)
82+
if (i < len - 1)
8283
putchar(' ');
8384
}
8485
printf(")");
@@ -105,9 +106,12 @@ void print_cons(val_cons_t *cons)
105106

106107
void print_str(val_str_t* s)
107108
{
108-
if (!s) return;
109109
uint64_t i;
110-
for (i = 0; i < s->len; ++i)
110+
int64_t len = val_unwrap_int(s->len);
111+
112+
if (!s) return;
113+
114+
for (i = 0; i < len; ++i)
111115
print_str_char(s->codepoints[i]);
112116
}
113117

knock-plus/values.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,11 +31,11 @@ typedef struct val_cons_t {
3131
val_t snd;
3232
} val_cons_t;
3333
typedef struct val_vect_t {
34-
uint64_t len;
34+
val_t len;
3535
val_t elems[];
3636
} val_vect_t;
3737
typedef struct val_str_t {
38-
uint64_t len;
38+
val_t len;
3939
val_char_t codepoints[];
4040
} val_str_t;
4141

0 commit comments

Comments
 (0)