… | |
… | |
61 | { |
61 | { |
62 | union |
62 | union |
63 | { |
63 | { |
64 | struct |
64 | struct |
65 | { |
65 | { |
66 | uint8_t *svalue; |
66 | char *svalue; |
67 | uint32_t length; |
67 | uint32_t length; |
68 | } string; |
68 | } string; |
69 | |
69 | |
70 | struct { |
70 | struct { |
71 | pointer *vvalue; |
71 | pointer *vvalue; |
… | |
… | |
109 | struct cell xEOF_OBJ; /* special cell representing end-of-file object */ |
109 | struct cell xEOF_OBJ; /* special cell representing end-of-file object */ |
110 | struct cell xsink; /* when mem. alloc. fails */ |
110 | struct cell xsink; /* when mem. alloc. fails */ |
111 | |
111 | |
112 | /* arrays for segments */ |
112 | /* arrays for segments */ |
113 | #ifndef CELL_SEGSIZE |
113 | #ifndef CELL_SEGSIZE |
114 | # define CELL_SEGSIZE 128 /* # of cells in one segment */ |
114 | # define CELL_SEGSIZE 24 * 1024 /* # of cells in first segment */ |
115 | #endif |
115 | #endif |
116 | #ifndef CELL_NSEGMENT |
116 | #ifndef CELL_NSEGMENT_LOG |
|
|
117 | # define CELL_NSEGMENT_LOG 4 |
|
|
118 | #endif |
117 | # define CELL_NSEGMENT 20 /* # of segments for cells */ |
119 | #define CELL_NSEGMENT (1 << CELL_NSEGMENT_LOG) /* # of segments for cells */ |
118 | #endif |
|
|
119 | char *alloc_seg[CELL_NSEGMENT]; |
120 | char *alloc_seg[CELL_NSEGMENT]; |
120 | struct cell *cell_seg[CELL_NSEGMENT]; |
121 | struct cell *cell_seg[CELL_NSEGMENT]; |
121 | int cell_segsize[CELL_NSEGMENT]; |
122 | int cell_segsize[CELL_NSEGMENT]; |
122 | int last_cell_seg; |
123 | int last_cell_seg; |
123 | |
124 | |
… | |
… | |
191 | #undef OP_DEF |
192 | #undef OP_DEF |
192 | OP_MAXDEFINED |
193 | OP_MAXDEFINED |
193 | }; |
194 | }; |
194 | |
195 | |
195 | typedef struct num num; |
196 | typedef struct num num; |
196 | |
|
|
197 | #define cons(a,b) xcons(SCHEME_A_ a,b,0) |
|
|
198 | #define immutable_cons(a,b) xcons(SCHEME_A_ a,b,1) |
|
|
199 | |
197 | |
200 | INTERFACE int is_string (pointer p); |
198 | INTERFACE int is_string (pointer p); |
201 | INTERFACE char *string_value (pointer p); |
199 | INTERFACE char *string_value (pointer p); |
202 | INTERFACE int is_number (pointer p); |
200 | INTERFACE int is_number (pointer p); |
203 | INTERFACE num nvalue (pointer p); |
201 | INTERFACE num nvalue (pointer p); |