feat: optimize runtime (2x+ faster)
This commit is contained in:
@@ -13,6 +13,7 @@ fzl_symtable_t *fzl_mksymt()
|
||||
if (!tbl)
|
||||
return NULL;
|
||||
|
||||
tbl->free_slot = 0;
|
||||
tbl->remainder = 2;
|
||||
tbl->size = 0;
|
||||
tbl->symbols = malloc(tbl->remainder * sizeof(fzl_sym_t));
|
||||
@@ -38,8 +39,13 @@ fzl_symtable_res_t fzl_symt_put(fzl_symtable_t *symt, fzl_node_t *node,
|
||||
symt->symbols = realloc(symt->symbols, symt->remainder * sizeof(fzl_sym_t));
|
||||
}
|
||||
|
||||
symt->symbols[symt->size++] = (fzl_sym_t){
|
||||
.name = name, .node = node, .type = type, .ip = ip, .classname = NULL};
|
||||
symt->symbols[symt->size++] = (fzl_sym_t){.name = name,
|
||||
.node = node,
|
||||
.type = type,
|
||||
.ip = ip,
|
||||
.classname = NULL,
|
||||
.slot_set = false,
|
||||
.slot = 0};
|
||||
return FZL_SYMTABLE_RESULT_OK;
|
||||
}
|
||||
|
||||
@@ -64,6 +70,28 @@ fzl_symtable_res_t fzl_symt_setobjclass(fzl_symtable_t *symt, char *name,
|
||||
return FZL_SYMTABLE_RESULT_ERR;
|
||||
}
|
||||
|
||||
int fzl_symt_setslot(fzl_symtable_t *symt, char *name)
|
||||
{
|
||||
if (!symt)
|
||||
return -1;
|
||||
|
||||
for (size_t i = 0; i < symt->size; i++)
|
||||
{
|
||||
if (strcmp(symt->symbols[i].name, name) == 0)
|
||||
{
|
||||
if (symt->symbols[i].slot_set)
|
||||
return symt->symbols[i].slot;
|
||||
|
||||
symt->symbols[i].slot = symt->free_slot++;
|
||||
symt->symbols[i].slot_set = true;
|
||||
|
||||
return symt->symbols[i].slot;
|
||||
}
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
bool fzl_symt_get(fzl_symtable_t *symt, char *name, fzl_sym_t *res)
|
||||
{
|
||||
if (!symt)
|
||||
|
||||
Reference in New Issue
Block a user