1#ifndef PRISM_INTERNAL_ARENA_H
2#define PRISM_INTERNAL_ARENA_H
56void pm_arena_reserve(
pm_arena_t *arena,
size_t capacity);
62void * pm_arena_alloc_slow(
pm_arena_t *arena,
size_t size);
72pm_arena_alloc(
pm_arena_t *arena,
size_t size,
size_t alignment) {
73 if (arena->current != NULL) {
74 size_t used_aligned = (arena->current->used + alignment - 1) & ~(alignment - 1);
75 size_t needed = used_aligned + size;
77 if (used_aligned >= arena->current->used && needed >= used_aligned && needed <= arena->current->capacity) {
78 arena->current->used = needed;
79 return arena->current->data + used_aligned;
83 return pm_arena_alloc_slow(arena, size);
91pm_arena_zalloc(
pm_arena_t *arena,
size_t size,
size_t alignment) {
92 void *ptr = pm_arena_alloc(arena, size, alignment);
102pm_arena_memdup(
pm_arena_t *arena,
const void *src,
size_t size,
size_t alignment) {
103 void *dst = pm_arena_alloc(arena, size, alignment);
104 memcpy(dst, src, size);
A bump allocator for the prism parser.
#define PM_FLEX_ARRAY_LENGTH
A macro for helper define a flexible array member.
#define PRISM_FORCE_INLINE
Force a function to be inlined at every call site.
#define PRISM_INLINE
Old Visual Studio versions do not support the inline keyword, so we need to define it to be __inline.