A bunch of allocator stuff

This commit is contained in:
2024-09-10 07:21:27 +02:00
parent d01fca146c
commit 517209c886
3 changed files with 74 additions and 10 deletions

View File

@@ -14,8 +14,12 @@ Parse_State :: struct {
tokens : [..]Token;
current_token_index : int;
allocator : Allocator;
arena : Arena;
node_allocator : Allocator;
node_arena : Arena;
child_allocator : Allocator;
child_arena : Arena;
had_error : bool;
@@ -123,8 +127,9 @@ parse_rules :: #run -> [(cast(int)Token_Kind.TOKEN_ERROR) + 1]Parse_Rule {
init_parse_state :: (parse_state : *Parse_State, tokens : [..]Token, path : string) {
parse_state.tokens = tokens;
parse_state.path = path;
parse_state.allocator = make_arena(*parse_state.arena);
parse_state.result.nodes.allocator = parse_state.allocator;
parse_state.node_allocator = make_arena(*parse_state.node_arena);
parse_state.child_allocator = make_arena(*parse_state.child_arena);
parse_state.result.nodes.allocator = parse_state.node_allocator;
array_reserve(*parse_state.result.nodes, 4096);
parse_state.current_token_index = 0;
}
@@ -275,6 +280,7 @@ make_node :: (parse_state : *Parse_State, kind : AST_Kind) -> *AST_Node {
node : AST_Node;
node.kind = kind;
node.children.allocator = parse_state.child_allocator;
array_add(*parse_state.result.nodes, node);
return *parse_state.result.nodes[parse_state.result.nodes.count - 1];