File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff 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)
7171void 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
106107void 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
Original file line number Diff line number Diff 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 ;
3333typedef struct val_vect_t {
34- uint64_t len ;
34+ val_t len ;
3535 val_t elems [];
3636} val_vect_t ;
3737typedef struct val_str_t {
38- uint64_t len ;
38+ val_t len ;
3939 val_char_t codepoints [];
4040} val_str_t ;
4141
Original file line number Diff line number Diff 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)
7171void 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
106107void 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
Original file line number Diff line number Diff line change @@ -31,11 +31,11 @@ typedef struct val_cons_t {
3131 val_t snd ;
3232} val_cons_t ;
3333typedef struct val_vect_t {
34- uint64_t len ;
34+ val_t len ;
3535 val_t elems [];
3636} val_vect_t ;
3737typedef struct val_str_t {
38- uint64_t len ;
38+ val_t len ;
3939 val_char_t codepoints [];
4040} val_str_t ;
4141
You can’t perform that action at this time.
0 commit comments