create pre-filtered types for meta evals; all of the same underlying data transforms are on a single meta-eval data bundle, but now each type of meta eval entity is exposed via a tighter type to the ui & eval system

This commit is contained in:
Ryan Fleury
2024-09-30 16:03:55 -07:00
parent fcedcab57c
commit 57d01355a1
8 changed files with 172 additions and 62 deletions
+17 -4
View File
@@ -10891,6 +10891,12 @@ rd_frame(void)
RD_EntityKind_WatchPin,
RD_EntityKind_Target,
};
E_TypeKey evallable_kind_types[] =
{
e_type_key_cons_base(type(CTRL_BreakpointMetaEval)),
e_type_key_cons_base(type(CTRL_PinMetaEval)),
e_type_key_cons_base(type(CTRL_TargetMetaEval)),
};
for EachElement(idx, evallable_kinds)
{
RD_EntityList list = rd_query_cached_entity_list_with_kind(evallable_kinds[idx]);
@@ -10901,7 +10907,7 @@ rd_frame(void)
E_Expr *expr = e_push_expr(scratch.arena, E_ExprKind_LeafOffset, 0);
expr->space = space;
expr->mode = E_Mode_Offset;
expr->type_key = meta_eval_type_key;
expr->type_key = evallable_kind_types[idx];
e_string2expr_map_insert(scratch.arena, ctx->macro_map, push_str8f(scratch.arena, "$%I64u", entity->id), expr);
if(entity->string.size != 0)
{
@@ -10920,6 +10926,13 @@ rd_frame(void)
CTRL_EntityKind_Thread,
CTRL_EntityKind_Module,
};
E_TypeKey evallable_kind_types[] =
{
e_type_key_cons_base(type(CTRL_MachineMetaEval)),
e_type_key_cons_base(type(CTRL_ProcessMetaEval)),
e_type_key_cons_base(type(CTRL_ThreadMetaEval)),
e_type_key_cons_base(type(CTRL_ModuleMetaEval)),
};
for EachElement(idx, evallable_kinds)
{
CTRL_EntityKind kind = evallable_kinds[idx];
@@ -10931,7 +10944,7 @@ rd_frame(void)
E_Expr *expr = e_push_expr(scratch.arena, E_ExprKind_LeafOffset, 0);
expr->space = space;
expr->mode = E_Mode_Offset;
expr->type_key = meta_eval_type_key;
expr->type_key = evallable_kind_types[idx];
e_string2expr_map_insert(scratch.arena, ctx->macro_map, push_str8f(scratch.arena, "$_%I64x_%I64x", entity->handle.machine_id, entity->handle.dmn_handle.u64[0]), expr);
if(entity->string.size != 0)
{
@@ -11034,10 +11047,10 @@ rd_frame(void)
//
EV_AutoViewRuleTable *auto_view_rule_table = push_array(scratch.arena, EV_AutoViewRuleTable, 1);
{
ev_auto_view_rule_table_push_new(scratch.arena, auto_view_rule_table, e_type_key_cons_base(type(CTRL_MetaEvalFrameArray)), str8_lit("slice"));
ev_auto_view_rule_table_push_new(scratch.arena, auto_view_rule_table, e_type_key_cons_base(type(CTRL_MetaEvalFrameArray)), str8_lit("slice"), 1);
for EachElement(idx, rd_collection_name_table)
{
ev_auto_view_rule_table_push_new(scratch.arena, auto_view_rule_table, collection_type_keys[idx], rd_collection_name_table[idx]);
ev_auto_view_rule_table_push_new(scratch.arena, auto_view_rule_table, collection_type_keys[idx], rd_collection_name_table[idx], 1);
}
}
ev_select_auto_view_rule_table(auto_view_rule_table);
+7 -1
View File
@@ -2662,7 +2662,13 @@ rd_watch_view_build(RD_WatchViewState *ewv, RD_WatchViewFlags flags, String8 roo
cell_autocomp_flags = RD_AutoCompListerFlag_ViewRules;
if(cell_pre_edit_string.size == 0)
{
cell_ghost_text = ev_auto_view_rule_from_type_key(row_eval.type_key);
EV_ViewRuleList *auto_view_rules = ev_auto_view_rules_from_type_key(scratch.arena, row_eval.type_key, 0, 1);
String8List strings = {0};
for(EV_ViewRuleNode *n = auto_view_rules->first; n != 0; n = n->next)
{
str8_list_push(scratch.arena, &strings, n->v.root->string);
}
cell_ghost_text = str8_list_join(scratch.arena, &strings, &(StringJoin){.sep = str8_lit(", ")});
}
}break;
case RD_WatchViewColumnKind_CallStackFrameSelection: