From 81425e8b909f538b0d585a14f6153edfab3444d3 Mon Sep 17 00:00:00 2001 From: Ryan Fleury Date: Mon, 28 Apr 2025 10:25:37 -0700 Subject: [PATCH] use more stable IDs for ctrl entity evaluations --- src/ctrl/ctrl_core.c | 10 ---------- src/ctrl/ctrl_core.h | 1 - src/raddbg/raddbg_core.c | 16 ++++++++++++++-- src/raddbg/raddbg_eval.c | 25 ++++++++++++++++++++++++- src/raddbg/raddbg_eval.h | 5 +++++ src/raddbg/raddbg_views.c | 2 +- 6 files changed, 44 insertions(+), 15 deletions(-) diff --git a/src/ctrl/ctrl_core.c b/src/ctrl/ctrl_core.c index a8bb074b..1807a1e3 100644 --- a/src/ctrl/ctrl_core.c +++ b/src/ctrl/ctrl_core.c @@ -217,16 +217,6 @@ ctrl_handle_from_string(String8 string) return handle; } -internal E_Eval -ctrl_eval_from_handle(CTRL_Handle handle) -{ - Temp scratch = scratch_begin(0, 0); - String8 string = ctrl_string_from_handle(scratch.arena, handle); - E_Eval eval = e_eval_from_string(string); - scratch_end(scratch); - return eval; -} - //////////////////////////////// //~ rjf: Trap Type Functions diff --git a/src/ctrl/ctrl_core.h b/src/ctrl/ctrl_core.h index 84af61bb..73f6b2c2 100644 --- a/src/ctrl/ctrl_core.h +++ b/src/ctrl/ctrl_core.h @@ -771,7 +771,6 @@ internal void ctrl_handle_list_push(Arena *arena, CTRL_HandleList *list, CTRL_Ha internal CTRL_HandleList ctrl_handle_list_copy(Arena *arena, CTRL_HandleList *src); internal String8 ctrl_string_from_handle(Arena *arena, CTRL_Handle handle); internal CTRL_Handle ctrl_handle_from_string(String8 string); -internal E_Eval ctrl_eval_from_handle(CTRL_Handle handle); //////////////////////////////// //~ rjf: Trap Type Functions diff --git a/src/raddbg/raddbg_core.c b/src/raddbg/raddbg_core.c index 973e5741..a7b2bedb 100644 --- a/src/raddbg/raddbg_core.c +++ b/src/raddbg/raddbg_core.c @@ -3269,7 +3269,7 @@ rd_view_ui(Rng2F32 rect) case RD_EvalSpaceKind_MetaCtrlEntity: { CTRL_Entity *entity = rd_ctrl_entity_from_eval_space(eval.space); - rd_cmd(RD_CmdKind_PushQuery, .expr = ctrl_string_from_handle(scratch.arena, entity->handle)); + rd_cmd(RD_CmdKind_PushQuery, .expr = push_str8f(scratch.arena, "query:control.%S", ctrl_string_from_handle(scratch.arena, entity->handle))); }break; } if(did_cmd) @@ -11995,6 +11995,19 @@ rd_frame(void) e_string2typekey_map_insert(rd_frame_arena(), rd_state->meta_name2type_map, name, type_key); } + //- rjf: add macro for top-level control root + { + String8 name = str8_lit("control"); + E_TypeKey type_key = e_type_key_cons(.name = name, + .kind = E_TypeKind_Set, + .access = E_TYPE_ACCESS_FUNCTION_NAME(control)); + E_Expr *expr = e_push_expr(scratch.arena, E_ExprKind_LeafOffset, 0); + expr->type_key = type_key; + expr->space = e_space_make(RD_EvalSpaceKind_MetaQuery); + e_string2expr_map_insert(scratch.arena, macro_map, name, expr); + e_string2typekey_map_insert(rd_frame_arena(), rd_state->meta_name2type_map, name, type_key); + } + //- rjf: add macros for config "slice" collections (targets, breakpoints, etc.) String8 evallable_cfg_names[] = { @@ -12209,7 +12222,6 @@ rd_frame(void) expr->space = space; expr->mode = E_Mode_Offset; expr->type_key = type_key; - e_string2expr_map_insert(scratch.arena, macro_map, ctrl_string_from_handle(scratch.arena, entity->handle), expr); if(entity->string.size != 0) { e_string2expr_map_insert(scratch.arena, macro_map, entity->string, expr); diff --git a/src/raddbg/raddbg_eval.c b/src/raddbg/raddbg_eval.c index 02e78aa7..848d6880 100644 --- a/src/raddbg/raddbg_eval.c +++ b/src/raddbg/raddbg_eval.c @@ -554,6 +554,27 @@ E_TYPE_ACCESS_FUNCTION_DEF(cfgs) return result; } +//////////////////////////////// +//~ rjf: Control Type Hooks + +E_TYPE_ACCESS_FUNCTION_DEF(control) +{ + E_IRTreeAndType result = {&e_irnode_nil}; + E_Expr *rhs = expr->first->next; + if(rhs->kind == E_ExprKind_LeafIdentifier && + str8_match(str8_prefix(rhs->string, 1), str8_lit("$"), 0)) + { + CTRL_Handle handle = ctrl_handle_from_string(rhs->string); + CTRL_Entity *entity = ctrl_entity_from_handle(d_state->ctrl_entity_store, handle); + E_Space space = rd_eval_space_from_ctrl_entity(entity, RD_EvalSpaceKind_MetaCtrlEntity); + result.root = e_irtree_set_space(arena, space, e_irtree_const_u(arena, 0)); + result.type_key = e_string2typekey_map_lookup(rd_state->meta_name2type_map, ctrl_entity_kind_code_name_table[entity->kind]); + result.mode = E_Mode_Offset; + } + return result; +} + + //////////////////////////////// //~ rjf: Config Collection Type Hooks @@ -1329,8 +1350,10 @@ E_TYPE_EXPAND_RANGE_FUNCTION_DEF(ctrl_entities) U64 read_count = dim_1u64(read_range); for(U64 out_idx = 0; out_idx < read_count; out_idx += 1) { + Temp scratch = scratch_begin(&arena, 1); CTRL_Entity *entity = entities->v[out_idx + read_range.min]; - evals_out[out_idx] = ctrl_eval_from_handle(entity->handle); + evals_out[out_idx] = e_eval_from_stringf("query:control.%S", ctrl_string_from_handle(scratch.arena, entity->handle)); + scratch_end(scratch); } } diff --git a/src/raddbg/raddbg_eval.h b/src/raddbg/raddbg_eval.h index 2edc84c0..fdf8785b 100644 --- a/src/raddbg/raddbg_eval.h +++ b/src/raddbg/raddbg_eval.h @@ -36,6 +36,11 @@ E_TYPE_EXPAND_RANGE_FUNCTION_DEF(schema); E_TYPE_ACCESS_FUNCTION_DEF(cfgs); +//////////////////////////////// +//~ rjf: Control Type Hooks + +E_TYPE_ACCESS_FUNCTION_DEF(control); + //////////////////////////////// //~ rjf: Config Slice Type Hooks diff --git a/src/raddbg/raddbg_views.c b/src/raddbg/raddbg_views.c index 135476df..240dfae1 100644 --- a/src/raddbg/raddbg_views.c +++ b/src/raddbg/raddbg_views.c @@ -1387,7 +1387,7 @@ rd_watch_row_info_from_row(Arena *arena, EV_Row *row) info.cell_style_key = str8_lit("call_stack_frame"); CTRL_Entity *process = ctrl_process_from_entity(info.callstack_thread); CTRL_Entity *module = ctrl_module_from_process_vaddr(process, info.callstack_vaddr); - E_Eval module_eval = ctrl_eval_from_handle(module->handle); + E_Eval module_eval = e_eval_from_stringf("query:control.%S", ctrl_string_from_handle(scratch.arena, module->handle)); RD_Cfg *view = rd_cfg_from_id(rd_regs()->view); RD_Cfg *style = rd_cfg_child_from_string(view, info.cell_style_key); RD_Cfg *w_cfg = style->first;