more macros
This commit is contained in:
26
ast.c
26
ast.c
@@ -9,6 +9,32 @@
|
||||
|
||||
#define N 1024
|
||||
|
||||
void astNodeListEnsureCapacity(AstNodeList* list, uint32_t additional)
|
||||
{
|
||||
const uint32_t new_len = list->len + additional;
|
||||
if (new_len <= list->cap) {
|
||||
return;
|
||||
}
|
||||
|
||||
const uint32_t new_cap = new_len > list->cap * 2 ? new_len : list->cap * 2;
|
||||
list->tags = realloc(list->tags, new_cap * sizeof(AstNodeTag));
|
||||
list->main_tokens = realloc(list->main_tokens, new_cap * sizeof(AstTokenIndex));
|
||||
list->datas = realloc(list->datas, new_cap * sizeof(AstData));
|
||||
if (!list->tags || !list->main_tokens || !list->datas)
|
||||
exit(1);
|
||||
list->cap = new_cap;
|
||||
}
|
||||
|
||||
void astNodeListAppend(AstNodeList* list, AstNodeTag tag,
|
||||
AstTokenIndex main_token, AstData data)
|
||||
{
|
||||
astNodeListEnsureCapacity(list, 1);
|
||||
list->tags[list->len] = tag;
|
||||
list->main_tokens[list->len] = main_token;
|
||||
list->datas[list->len] = data;
|
||||
list->len++;
|
||||
}
|
||||
|
||||
Ast astParse(const char* source, const uint32_t len)
|
||||
{
|
||||
uint32_t estimated_token_count = len / 8;
|
||||
|
||||
Reference in New Issue
Block a user