comet-gc 0.1.3

Garbage collection library for implementing VMs in Rust
Documentation
#include "c_api.h"
#include <stdio.h>
typedef struct Node
{
    HeapObjectHeader *hdr;
    struct Node *next;
    int val;
} Node;

void node_trace(Visitor *vis, const uint8_t *ptr)
{
    printf("trace Node %p with val %i\n", ptr, ((Node *)ptr)->val);
    comet_trace(vis, (HeapObjectHeader *)((Node *)ptr)->next);
}

void node_finalize(uint8_t *ptr)
{
    Node *node = (Node *)ptr;
    printf("Finalize node at %p with val %i\n", node, node->val);
}
void foo(Heap *heap)
{
    GCInfoIndex index = comet_add_gc_info((GCInfo){node_finalize, node_trace, 0});
    Node *node = comet_heap_allocate_or_fail(heap, sizeof(Node), index);
    node->next = NULL;
    node->val = 0;
    comet_heap_collect(heap);
    printf("%p\n", &node);
    node = NULL;
}
int main()
{
    comet_init();
    Config c = comet_default_config();
    c.verbose = true;
    Heap *heap = comet_heap_create(c);
    comet_heap_add_core_constraints(heap);
    foo(heap);
    comet_heap_collect(heap);
    comet_heap_free(heap);
}