blob: 1e05c81a65544ff0e0a4ad3f7c0e8724522eaf7c (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
extern malloc = (i64) => *void;
extern realloc = (*void, i64) => *void;
extern free = (*void) => void;
import "!stdlib.src";
let arena = struct {
buf: *void,
offset: i64,
};
let arena_init = (size: i64) => *arena {
let a = cast(*arena, malloc(sizeof(arena)));
(*a).buf = malloc(size);
(*a).offset = 0;
return a;
};
let arena_free = (a: *arena) => void {
free((*a).buf);
free(cast(*void, a));
return;
};
let arena_alloc = (a: *arena, size: i64) => *void {
let old_offset = (*a).offset;
(*a).offset = (*a).offset + size;
return cast(*void, cast(*i8, (*a).buf) + cast(*i8, old_offset));
};
|