From afd113adcc19769c59bfdde79ab2e9232053de4c Mon Sep 17 00:00:00 2001 From: Ryan Fleury Date: Tue, 4 Feb 2025 12:16:28 -0800 Subject: [PATCH] rd: derive schema tree parse on startup rather than recomputing every time --- src/eval/eval_ir.c | 1 + src/eval/eval_parse.c | 1 + src/eval/eval_parse.h | 2 +- src/raddbg/raddbg_core.c | 15 ++++++++++++--- src/raddbg/raddbg_core.h | 3 +++ 5 files changed, 18 insertions(+), 4 deletions(-) diff --git a/src/eval/eval_ir.c b/src/eval/eval_ir.c index 5828596f..099ea486 100644 --- a/src/eval/eval_ir.c +++ b/src/eval/eval_ir.c @@ -74,6 +74,7 @@ e_select_ir_ctx(E_IRCtx *ctx) e_ir_state->arena = arena; e_ir_state->arena_eval_start_pos = arena_pos(arena); } + arena_pop_to(e_ir_state->arena, e_ir_state->arena_eval_start_pos); e_ir_state->ctx = ctx; e_ir_state->used_tag_map = push_array(e_ir_state->arena, E_UsedTagMap, 1); e_ir_state->used_tag_map->slots_count = 64; diff --git a/src/eval/eval_parse.c b/src/eval/eval_parse.c index 0b2a2dcd..87f57ade 100644 --- a/src/eval/eval_parse.c +++ b/src/eval/eval_parse.c @@ -632,6 +632,7 @@ e_select_parse_ctx(E_ParseCtx *ctx) e_parse_state->arena = arena; e_parse_state->arena_eval_start_pos = arena_pos(arena); } + arena_pop_to(e_parse_state->arena, e_parse_state->arena_eval_start_pos); e_parse_state->ctx = ctx; e_parse_state->parse_cache_slots_count = 1024; e_parse_state->parse_cache_slots = push_array(e_parse_state->arena, E_ParseCacheSlot, e_parse_state->parse_cache_slots_count); diff --git a/src/eval/eval_parse.h b/src/eval/eval_parse.h index 90b85c49..d91a2c76 100644 --- a/src/eval/eval_parse.h +++ b/src/eval/eval_parse.h @@ -180,7 +180,7 @@ struct E_ParseCtx }; //////////////////////////////// -//~ rjf: Parse State (Stateful thread-local caching mechanisms, not provided by user) +//~ rjf: Parse State (stateful thread-local caching mechanisms, not provided by user) typedef struct E_ParseCacheNode E_ParseCacheNode; struct E_ParseCacheNode diff --git a/src/raddbg/raddbg_core.c b/src/raddbg/raddbg_core.c index c1fe8830..e5774a0a 100644 --- a/src/raddbg/raddbg_core.c +++ b/src/raddbg/raddbg_core.c @@ -1496,16 +1496,15 @@ rd_title_fstrs_from_cfg(Arena *arena, RD_Cfg *cfg, Vec4F32 secondary_color, F32 internal MD_Node * rd_schema_from_name(Arena *arena, String8 name) { - String8 schema_string = {0}; + MD_Node *schema = &md_nil_node; for EachElement(idx, rd_name_schema_info_table) { if(str8_match(name, rd_name_schema_info_table[idx].name, 0)) { - schema_string = rd_name_schema_info_table[idx].schema; + schema = rd_state->schemas[idx]; break; } } - MD_Node *schema = md_tree_from_string(arena, schema_string)->first; return schema; } @@ -11906,6 +11905,16 @@ rd_init(CmdLine *cmdln) rd_state->drag_drop_regs = push_array(rd_state->drag_drop_arena, RD_Regs, 1); rd_state->top_regs = &rd_state->base_regs; + // rjf: set up schemas + { + U64 schemas_count = ArrayCount(rd_name_schema_info_table); + rd_state->schemas = push_array(rd_state->arena, MD_Node *, schemas_count); + for EachIndex(idx, schemas_count) + { + rd_state->schemas[idx] = md_tree_from_string(rd_state->arena, rd_name_schema_info_table[idx].schema)->first; + } + } + // rjf: set up top-level config entity trees { rd_state->root_cfg = rd_cfg_alloc(); diff --git a/src/raddbg/raddbg_core.h b/src/raddbg/raddbg_core.h index b0ac9cba..b179840c 100644 --- a/src/raddbg/raddbg_core.h +++ b/src/raddbg/raddbg_core.h @@ -834,6 +834,9 @@ struct RD_State Arena *project_path_arena; String8 project_path; + // rjf: schema table + MD_Node **schemas; + // rjf: log Log *log; String8 log_path;