eval: sketch out parse/ir cache

This commit is contained in:
Ryan Fleury
2025-02-04 10:29:52 -08:00
parent 657b78c4ef
commit b9756d222a
10 changed files with 214 additions and 87 deletions
+22
View File
@@ -266,6 +266,21 @@ struct E_IRCtx
////////////////////////////////
//~ rjf: IR State
typedef struct E_IRTreeAndTypeCacheNode E_IRTreeAndTypeCacheNode;
struct E_IRTreeAndTypeCacheNode
{
E_IRTreeAndTypeCacheNode *next;
E_Expr *expr;
E_IRTreeAndType irtree_and_type;
};
typedef struct E_IRTreeAndTypeCacheSlot E_IRTreeAndTypeCacheSlot;
struct E_IRTreeAndTypeCacheSlot
{
E_IRTreeAndTypeCacheNode *first;
E_IRTreeAndTypeCacheNode *last;
};
typedef struct E_IRState E_IRState;
struct E_IRState
{
@@ -278,6 +293,8 @@ struct E_IRState
// rjf: caches
E_UsedTagMap *used_tag_map;
E_TypeAutoHookCacheMap *type_auto_hook_cache_map;
U64 irtree_and_type_cache_slots_count;
E_IRTreeAndTypeCacheSlot *irtree_and_type_cache_slots;
};
////////////////////////////////
@@ -386,4 +403,9 @@ internal void e_append_oplist_from_irtree(Arena *arena, E_IRNode *root, E_Space
internal E_OpList e_oplist_from_irtree(Arena *arena, E_IRNode *root);
internal String8 e_bytecode_from_oplist(Arena *arena, E_OpList *oplist);
////////////////////////////////
//~ rjf: IRified Expression Cache
internal E_IRTreeAndType e_irtree_and_type_from_expr__cached(E_Expr *expr);
#endif // EVAL_IR_H