typedef struct { CELL header; /* untagged */ CELL capacity; } ARRAY; INLINE ARRAY* untag_array(CELL tagged) { type_check(ARRAY_TYPE,tagged); return (ARRAY*)UNTAG(tagged); } ARRAY* array(CELL capacity, CELL fill); ARRAY* grow_array(ARRAY* array, CELL capacity, CELL fill); #define AREF(array,index) ((CELL)array + sizeof(ARRAY) + index * CELLS) #define ASIZE(pointer) align8(sizeof(ARRAY) + \ ((ARRAY*)pointer)->capacity * CELLS) /* untagged & unchecked */ INLINE CELL array_nth(ARRAY* array, CELL index) { return get(AREF(array,index)); } /* untagged & unchecked */ INLINE void set_array_nth(ARRAY* array, CELL index, CELL value) { put(AREF(array,index),value); } void fixup_array(ARRAY* array); void collect_array(ARRAY* array); ARRAY* copy_array(ARRAY* array);