# Type --- ## Object Definitions ```c #define KPL_TYPE_BLOCK_ARRAY_SIZE UINT16_MAX #define KPL_TYPE_BLOCKS_SIZE UINT16_MAX typedef struct { uint16_t block_index, array_index; } kpl_type_ptr; static const kpl_type_ptr kpl_type_ptr_null = { UINT16_MAX, UINT16_MAX }; typedef enum : uint16_t { // ... } kpl_type_template; typedef enum : uint16_t { CONST = 1 << 0 EMPTY = 1 << 1, REF = 1 << 2, GC = 1 << 3 } kpl_type_flags; typedef union { // ... } kpl_type_body; typedef struct { kpl_type_template template; kpl_type_flags flags; _Atomic int32_t ref_count; kpl_type_ptr self, prev, next, parent; kpl_type_body body; } kpl_type; static size_t type_array_block_index; static kpl_type *type_array_blocks[KPL_TYPE_BLOCKS_SIZE]; static kpl_type_ptr type_pool_head; ```