summaryrefslogtreecommitdiff
path: root/src/gc.h
blob: d7ce8b07b10b41c205077e2eb8ab9e484d8d2950 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#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);

#endif // IMB3_GC_H