#ifndef IMB3_GC_H #define IMB3_GC_H #include "value.h" void gc_init(void); void gc_collect(void); struct object; struct object *gc_alloc(size_t value_slot_count, size_t untraced_slot_count); struct object *gc_alloc_compiled_function(size_t value_slot_count, size_t untraced_slot_count); struct object *gc_alloc_hashtable_eq(size_t value_slot_count, size_t untraced_slot_count); struct value gc_read_value_slot(const struct object *, size_t); uintptr_t gc_read_untraced_slot(const struct object *, size_t); uint8_t gc_read_untraced_byte(const struct object *, size_t); void gc_write_value_slot(struct object *, size_t, struct value); void gc_write_untraced_slot(struct object *, size_t, uintptr_t); void gc_write_untraced_byte(struct object *, size_t, uint8_t); void gc_root_push(struct value *); void gc_root_pop(void); void gc_debug(void); #endif // IMB3_GC_H