30 lines
815 B
C
30 lines
815 B
C
typedef struct {
|
|
CELL header;
|
|
/* tagged */
|
|
CELL capacity;
|
|
} F_ARRAY;
|
|
|
|
INLINE F_ARRAY* untag_array(CELL tagged)
|
|
{
|
|
type_check(ARRAY_TYPE,tagged);
|
|
return (F_ARRAY*)UNTAG(tagged);
|
|
}
|
|
|
|
F_ARRAY* allot_array(CELL type, CELL capacity);
|
|
F_ARRAY* array(CELL type, CELL capacity, CELL fill);
|
|
void primitive_array(void);
|
|
void primitive_to_array(void);
|
|
void primitive_tuple(void);
|
|
void primitive_to_tuple(void);
|
|
F_ARRAY* grow_array(F_ARRAY* array, CELL capacity, CELL fill);
|
|
void primitive_grow_array(void);
|
|
F_ARRAY* shrink_array(F_ARRAY* array, CELL capacity);
|
|
|
|
#define AREF(array,index) ((CELL)(array) + sizeof(F_ARRAY) + (index) * CELLS)
|
|
|
|
#define ASIZE(pointer) align8(sizeof(F_ARRAY) + \
|
|
untag_fixnum_fast(((F_ARRAY*)(pointer))->capacity) * CELLS)
|
|
|
|
void fixup_array(F_ARRAY* array);
|
|
void collect_array(F_ARRAY* array);
|