eliminate all old evaluation bundled helpers, eliminate old fragmented eval caches; move all to unified evaluation cache

This commit is contained in:
Ryan Fleury
2025-04-24 09:07:29 -07:00
parent c341fb6c00
commit 9bb592786a
24 changed files with 1315 additions and 1489 deletions
-44
View File
@@ -1454,47 +1454,3 @@ e_push_parse_from_string(Arena *arena, String8 text)
scratch_end(scratch);
return parse;
}
////////////////////////////////
//~ rjf: Parse Cache Functions
internal void
e_parse_eval_begin(void)
{
if(e_parse_state == 0)
{
Arena *arena = arena_alloc();
e_parse_state = push_array(arena, E_ParseState, 1);
e_parse_state->arena = arena;
e_parse_state->arena_eval_start_pos = arena_pos(e_parse_state->arena);
}
arena_pop_to(e_parse_state->arena, e_parse_state->arena_eval_start_pos);
e_parse_state->cache_slots_count = 4096;
e_parse_state->cache_slots = push_array(e_parse_state->arena, E_ParseCacheSlot, e_parse_state->cache_slots_count);
}
internal E_Parse
e_parse_from_string(String8 string)
{
U64 hash = e_hash_from_string(5381, string);
U64 slot_idx = hash%e_parse_state->cache_slots_count;
E_ParseCacheSlot *slot = &e_parse_state->cache_slots[slot_idx];
E_ParseCacheNode *node = 0;
for(E_ParseCacheNode *n = slot->first; n != 0; n = n->next)
{
if(str8_match(n->string, string, 0))
{
node = n;
break;
}
}
if(node == 0)
{
node = push_array(e_parse_state->arena, E_ParseCacheNode, 1);
SLLQueuePush(slot->first, slot->last, node);
node->string = push_str8_copy(e_parse_state->arena, string);
node->parse = e_push_parse_from_string(e_parse_state->arena, node->string);
}
E_Parse result = node->parse;
return result;
}