libpulsar
A modular compiler for the pulsar programming language
Loading...
Searching...
No Matches
arena.h
Go to the documentation of this file.
1
8#pragma once
9
10#include "def.h"
12#ifndef PS_INITIAL_ARENA_MMAP
13 #define PS_INITIAL_ARENA_MMAP 0x2000000ULL
14#endif
15
17#ifndef _PS_PUBLIC_SRC
23#endif
24
26
29void ps_arena_open(enum ps_arena_domain domain);
30
34void ps_arena_close(enum ps_arena_domain domain);
35
42 const char* file, const char* func, usize line);
43
44#if defined(PS_DEBUG) && defined(PS_DEBUG_ARENA)
45 #define arena_alloc(arena, n) \
46 ps_arena_allocate_debug(arena, n, __FILE__, __func__, __LINE__)
47 #define astalloc(n) arena_alloc(PS_ARENA_AST, n)
48 #define iralloc(n) arena_alloc(IR_Arena, n)
49#else
50 #define arena_alloc(arena, n) ps_arena_allocate(arena, n)
51 #define astalloc(n) arena_alloc(PS_ARENA_AST, n)
52 #define iralloc(n) arena_alloc(PS_ARENA_IR, n)
53#endif
54
62
63#define ast_strndup(str, len) arena_strndup(PS_ARENA_AST, str, len)
64
65#define arena_sprintf(arena, fmt, ...) \
66 ({ \
67 char* str = NULL; \
68 int length = snprintf(NULL, 0, fmt, __VA_ARGS__); \
69 if (length >= 0) { \
70 str = arena_alloc(arena, length + 1); \
71 if (str) { \
72 snprintf(str, length + 1, fmt, __VA_ARGS__); \
73 } \
74 } \
75 str; \
76 })
77#define ast_sprintf(fmt, ...) arena_sprintf(PS_ARENA_AST, fmt, __VA_ARGS__)
char * arena_strndup(enum ps_arena_domain arena, STR str, usize length)
Duplicates the specified string and produces a null-terminated arena-allocated copy.
void ps_arena_open(enum ps_arena_domain domain)
Initializes the given arena for allocation.
Definition arena.c:24
ps_arena_domain
Definition arena.h:25
@ PS_ARENA_IR
Definition arena.h:25
@ PS_ARENA_AST
Definition arena.h:25
@ __PS_ARENA_COUNT
Definition arena.h:25
void * ps_arena_allocate_debug(enum ps_arena_domain domain, usize n, const char *file, const char *func, usize line)
void * ps_arena_allocate(enum ps_arena_domain domain, usize n)
Allocates a new object in the given arena.
void ps_arena_close(enum ps_arena_domain domain)
Destroys any allocated objects in the given arena.
Definition arena.c:45
Base definitions.
#define STR
Definition def.h:40
#define usize
Definition def.h:50
static void usize length
Definition lexer.h:71
usize page_size
Definition arena.h:19