parse cache, ir-tree cache

This commit is contained in:
Ryan Fleury
2025-04-23 16:00:23 -07:00
parent c9a05bc76f
commit ba29350939
11 changed files with 307 additions and 171 deletions
+28 -5
View File
@@ -10,6 +10,7 @@
typedef struct E_Parse E_Parse;
struct E_Parse
{
E_TokenArray tokens;
E_Token *last_token;
E_Expr *expr;
E_Expr *last_expr;
@@ -19,17 +20,33 @@ struct E_Parse
////////////////////////////////
//~ rjf: Parse Evaluation State
typedef struct E_ParseCacheNode E_ParseCacheNode;
struct E_ParseCacheNode
{
E_ParseCacheNode *next;
String8 string;
E_Parse parse;
};
typedef struct E_ParseCacheSlot E_ParseCacheSlot;
struct E_ParseCacheSlot
{
E_ParseCacheNode *first;
E_ParseCacheNode *last;
};
typedef struct E_ParseState E_ParseState;
struct E_ParseState
{
Arena *arena;
U64 arena_eval_start_pos;
U64 cache_slots_count;
E_ParseCacheSlot *cache_slots;
};
////////////////////////////////
//~ rjf: Globals
thread_static E_ParseState *e_parse_state = 0;
////////////////////////////////
@@ -64,9 +81,15 @@ internal String8 e_string_from_expr(Arena *arena, E_Expr *expr, String8 parent_e
//~ rjf: Parsing Functions
internal E_TypeKey e_leaf_type_from_name(String8 name);
internal E_Parse e_parse_type_from_text_tokens(Arena *arena, String8 text, E_TokenArray tokens);
internal E_Parse e_parse_expr_from_text_tokens__prec(Arena *arena, String8 text, E_TokenArray tokens, S64 max_precedence, U64 max_chain_count);
internal E_Parse e_parse_expr_from_text_tokens(Arena *arena, String8 text, E_TokenArray tokens);
internal E_Parse e_parse_expr_from_text(Arena *arena, String8 text);
internal E_TypeKey e_type_key_from_expr(E_Expr *expr);
internal E_Parse e_push_type_parse_from_text_tokens(Arena *arena, String8 text, E_TokenArray tokens);
internal E_Parse e_push_parse_from_string_tokens__prec(Arena *arena, String8 text, E_TokenArray tokens, S64 max_precedence, U64 max_chain_count);
internal E_Parse e_push_parse_from_string(Arena *arena, String8 text);
////////////////////////////////
//~ rjf: Parse Cache Functions
internal void e_parse_eval_begin(void);
internal E_Parse e_parse_from_string(String8 string);
#endif // EVAL_PARSE_H