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
+2 -1
View File
@@ -164,7 +164,8 @@ struct TypeSerializeParams
#define member_lit_comp(S, ti, m, ...) {str8_lit_comp(#m), {0}, (ti), OffsetOf(S, m), __VA_ARGS__}
#define struct_members(S) read_only global Member S##__members[] =
#define struct_type(S) read_only global Type S##__type = {TypeKind_Struct, 0, sizeof(S), &type_nil, str8_lit_comp(#S), {0}, ArrayCount(S##__members), S##__members}
#define struct_type(S, ...) read_only global Type S##__type = {TypeKind_Struct, 0, sizeof(S), &type_nil, str8_lit_comp(#S), {0}, ArrayCount(S##__members), S##__members, __VA_ARGS__}
#define named_struct_type(name, S, ...) read_only global Type name##__type = {TypeKind_Struct, 0, sizeof(S), &type_nil, str8_lit_comp(#name), {0}, ArrayCount(name##__members), name##__members, __VA_ARGS__}
#define ptr_type(name, ti, ...) read_only global Type name = {TypeKind_Ptr, 0, sizeof(void *), (ti), __VA_ARGS__}
////////////////////////////////
+96 -12
View File
@@ -15,6 +15,23 @@ typedef U64 CTRL_MachineID;
////////////////////////////////
//~ rjf: Meta Evaluation Types
//- rjf: styled string types
ptr_type(CTRL_CodeString8__str_ptr_type, type(U8), .flags = TypeFlag_IsCode, .count_delimiter_name = str8_lit_comp("size"));
ptr_type(CTRL_PlainString8__str_ptr_type, type(U8), .flags = 0, .count_delimiter_name = str8_lit_comp("size"));
Member CTRL_CodeString8__members[] =
{
member_lit_comp(String8, &CTRL_CodeString8__str_ptr_type, str, .pretty_name = str8_lit_comp("Contents")),
member_lit_comp(String8, type(U64), size, .pretty_name = str8_lit_comp("Size")),
};
Member CTRL_PlainString8__members[] =
{
member_lit_comp(String8, &CTRL_PlainString8__str_ptr_type, str, .pretty_name = str8_lit_comp("Contents")),
member_lit_comp(String8, type(U64), size, .pretty_name = str8_lit_comp("Size")),
};
named_struct_type(CTRL_CodeString8, String8, .name = str8_lit_comp("string"));
named_struct_type(CTRL_PlainString8, String8, .name = str8_lit_comp("string"));
//- rjf: meta evaluation callstack types
typedef struct CTRL_MetaEvalFrame CTRL_MetaEvalFrame;
@@ -29,7 +46,7 @@ struct_members(CTRL_MetaEvalFrame)
member_lit_comp(CTRL_MetaEvalFrame, &CTRL_MetaEvalFrame__vaddr_type, vaddr),
member_lit_comp(CTRL_MetaEvalFrame, type(U64), inline_depth),
};
struct_type(CTRL_MetaEvalFrame);
struct_type(CTRL_MetaEvalFrame, .name = str8_lit_comp("callstack_frame"));
typedef struct CTRL_MetaEvalFrameArray CTRL_MetaEvalFrameArray;
struct CTRL_MetaEvalFrameArray
{
@@ -42,7 +59,7 @@ struct_members(CTRL_MetaEvalFrameArray)
member_lit_comp(CTRL_MetaEvalFrameArray, type(U64), count, .pretty_name = str8_lit_comp("Frame Count")),
{str8_lit_comp("v"), str8_lit_comp("Frame Addresses"), &CTRL_MetaEvalFrameArray__v_ptr_type, OffsetOf(CTRL_MetaEvalFrameArray, v)},
};
struct_type(CTRL_MetaEvalFrameArray);
struct_type(CTRL_MetaEvalFrameArray, .name = str8_lit_comp("callstack_frames"));
//- rjf: meta evaluation instance types
@@ -56,14 +73,14 @@ X(U64, hit_count, "Hit Count")\
X(U64, id, "ID")\
X(Rng1U64, vaddr_range, "Address Range")\
X(U32, color, "Color")\
Y(String8, String8__code_type, label, "Label")\
X(String8, exe, "Executable Path")\
X(String8, dbg, "Debug Info Path")\
X(String8, args, "Arguments")\
X(String8, working_directory, "Working Directory")\
Y(String8, String8__code_type, entry_point, "Custom Entry Point")\
X(String8, location, "Location")\
Y(String8, String8__code_type, condition, "Condition")\
Y(String8, type(CTRL_CodeString8), label, "Label")\
Y(String8, type(CTRL_PlainString8), exe, "Executable Path")\
Y(String8, type(CTRL_PlainString8), dbg, "Debug Info Path")\
Y(String8, type(CTRL_PlainString8), args, "Arguments")\
Y(String8, type(CTRL_PlainString8), working_directory, "Working Directory")\
Y(String8, type(CTRL_CodeString8), entry_point, "Custom Entry Point")\
Y(String8, type(CTRL_PlainString8), location, "Location")\
Y(String8, type(CTRL_CodeString8), condition, "Condition")\
X(CTRL_MetaEvalFrameArray, callstack, "Call Stack")
#define X(T, name, pretty_name) T name;
#define Y(T, ti, name, pretty_name) T name;
@@ -74,13 +91,80 @@ X(CTRL_MetaEvalFrameArray, callstack, "Call Stack")
struct_members(CTRL_MetaEval)
{
#define X(T, name, pretty_name_) member_lit_comp(CTRL_MetaEval, type(T), name, .pretty_name = str8_lit_comp(pretty_name_)),
#define Y(T, ti, name, pretty_name_) member_lit_comp(CTRL_MetaEval, &(ti), name, .pretty_name = str8_lit_comp(pretty_name_)),
#define Y(T, ti, name, pretty_name_) member_lit_comp(CTRL_MetaEval, (ti), name, .pretty_name = str8_lit_comp(pretty_name_)),
CTRL_MetaEval_MemberXList
#undef X
#undef Y
};
struct_type(CTRL_MetaEval);
//- rjf: filters on main meta evaluation bundle
struct_members(CTRL_BreakpointMetaEval)
{
member_lit_comp(CTRL_MetaEval, type(B32), enabled, .pretty_name = str8_lit_comp("Enabled")),
member_lit_comp(CTRL_MetaEval, type(U32), color, .pretty_name = str8_lit_comp("Color")),
member_lit_comp(CTRL_MetaEval, type(U64), hit_count, .pretty_name = str8_lit_comp("Hit Count")),
member_lit_comp(CTRL_MetaEval, type(CTRL_CodeString8), label, .pretty_name = str8_lit_comp("Label")),
member_lit_comp(CTRL_MetaEval, type(CTRL_PlainString8),location, .pretty_name = str8_lit_comp("Location")),
};
struct_members(CTRL_TargetMetaEval)
{
member_lit_comp(CTRL_MetaEval, type(CTRL_CodeString8), label, .pretty_name = str8_lit_comp("Label")),
member_lit_comp(CTRL_MetaEval, type(CTRL_PlainString8),exe, .pretty_name = str8_lit_comp("Executable")),
member_lit_comp(CTRL_MetaEval, type(CTRL_PlainString8),args, .pretty_name = str8_lit_comp("Arguments")),
member_lit_comp(CTRL_MetaEval, type(CTRL_PlainString8),working_directory, .pretty_name = str8_lit_comp("Working Directory")),
member_lit_comp(CTRL_MetaEval, type(CTRL_CodeString8), entry_point, .pretty_name = str8_lit_comp("Custom Entry Point")),
};
struct_members(CTRL_PinMetaEval)
{
member_lit_comp(CTRL_MetaEval, type(CTRL_CodeString8), label, .pretty_name = str8_lit_comp("Expression")),
member_lit_comp(CTRL_MetaEval, type(U32), color, .pretty_name = str8_lit_comp("Color")),
member_lit_comp(CTRL_MetaEval, type(String8), location, .pretty_name = str8_lit_comp("Location")),
};
struct_members(CTRL_MachineMetaEval)
{
member_lit_comp(CTRL_MetaEval, type(B32), frozen, .pretty_name = str8_lit_comp("Frozen")),
member_lit_comp(CTRL_MetaEval, type(U32), color, .pretty_name = str8_lit_comp("Color")),
member_lit_comp(CTRL_MetaEval, type(CTRL_CodeString8), label, .pretty_name = str8_lit_comp("Name")),
};
struct_members(CTRL_ProcessMetaEval)
{
member_lit_comp(CTRL_MetaEval, type(B32), frozen, .pretty_name = str8_lit_comp("Frozen")),
member_lit_comp(CTRL_MetaEval, type(U32), color, .pretty_name = str8_lit_comp("Color")),
member_lit_comp(CTRL_MetaEval, type(CTRL_CodeString8), label, .pretty_name = str8_lit_comp("Name")),
member_lit_comp(CTRL_MetaEval, type(U64), id, .pretty_name = str8_lit_comp("ID")),
};
struct_members(CTRL_ModuleMetaEval)
{
member_lit_comp(CTRL_MetaEval, type(U32), color, .pretty_name = str8_lit_comp("Color")),
member_lit_comp(CTRL_MetaEval, type(CTRL_CodeString8), label, .pretty_name = str8_lit_comp("Executable")),
member_lit_comp(CTRL_MetaEval, type(CTRL_PlainString8),dbg, .pretty_name = str8_lit_comp("Debug Info Path")),
member_lit_comp(CTRL_MetaEval, type(Rng1U64), vaddr_range, .pretty_name = str8_lit_comp("Address Range")),
};
struct_members(CTRL_ThreadMetaEval)
{
member_lit_comp(CTRL_MetaEval, type(B32), frozen, .pretty_name = str8_lit_comp("Frozen")),
member_lit_comp(CTRL_MetaEval, type(U32), color, .pretty_name = str8_lit_comp("Color")),
member_lit_comp(CTRL_MetaEval, type(CTRL_CodeString8), label, .pretty_name = str8_lit_comp("Name")),
member_lit_comp(CTRL_MetaEval, type(U64), id, .pretty_name = str8_lit_comp("ID")),
member_lit_comp(CTRL_MetaEval, type(CTRL_MetaEvalFrameArray), callstack, .pretty_name = str8_lit_comp("Call Stack")),
};
named_struct_type(CTRL_BreakpointMetaEval, CTRL_MetaEval, .name = str8_lit_comp("breakpoint"));
named_struct_type(CTRL_TargetMetaEval, CTRL_MetaEval, .name = str8_lit_comp("target"));
named_struct_type(CTRL_PinMetaEval, CTRL_MetaEval, .name = str8_lit_comp("pin"));
named_struct_type(CTRL_MachineMetaEval, CTRL_MetaEval, .name = str8_lit_comp("machine"));
named_struct_type(CTRL_ProcessMetaEval, CTRL_MetaEval, .name = str8_lit_comp("process"));
named_struct_type(CTRL_ModuleMetaEval, CTRL_MetaEval, .name = str8_lit_comp("module"));
named_struct_type(CTRL_ThreadMetaEval, CTRL_MetaEval, .name = str8_lit_comp("thread"));
//- rjf: meta evaluation array
typedef struct CTRL_MetaEvalArray CTRL_MetaEvalArray;
@@ -89,7 +173,7 @@ struct CTRL_MetaEvalArray
CTRL_MetaEval *v;
U64 count;
};
ptr_type(CTRL_MetaEvalArray__v_ptr_type, type(CTRL_MetaEval), .count_delimiter_name = str8_lit_comp("count"));
ptr_type(CTRL_MetaEvalArray__v_ptr_type, type(CTRL_BreakpointMetaEval), .count_delimiter_name = str8_lit_comp("count"));
struct_members(CTRL_MetaEvalArray)
{
{str8_lit_comp("v"), {0}, &CTRL_MetaEvalArray__v_ptr_type, OffsetOf(CTRL_MetaEvalArray, v)},
+2 -3
View File
@@ -1293,8 +1293,7 @@ d_query_cached_unwind_from_thread(CTRL_Entity *thread)
node->arena = arena_alloc();
node->thread = handle;
}
if(node->reggen != reg_gen ||
node->memgen != mem_gen)
if(!d_state->ctrl_is_running && (node->reggen != reg_gen || node->memgen != mem_gen))
{
CTRL_Unwind new_unwind = ctrl_unwind_from_thread(scratch.arena, d_state->ctrl_entity_store, thread->handle, os_now_microseconds()+100);
if(!(new_unwind.flags & (CTRL_UnwindFlag_Error|CTRL_UnwindFlag_Stale)) && new_unwind.frames.count != 0)
@@ -1576,7 +1575,7 @@ d_tick(Arena *arena, D_TargetArray *targets, D_BreakpointArray *breakpoints, D_P
Temp scratch = scratch_begin(&arena, 1);
D_EventList result = {0};
d_state->frame_index += 1;
d_state->frame_eval_memread_endt_us = os_now_microseconds() + 5000;
d_state->frame_eval_memread_endt_us = os_now_microseconds() + 1000;
//////////////////////////////
//- rjf: sync with ctrl thread
+2 -2
View File
@@ -873,7 +873,7 @@ e_leaf_type_from_name(String8 name)
{
key = e_type_key_basic(E_TypeKind_UChar32);
}
else if(Case("u64") || Case("uint64") || Case("uint64_t") || Case("U64"))
else if(Case("u64") || Case("uint64") || Case("uint64_t") || Case("U64") || Case("size_t"))
{
key = e_type_key_basic(E_TypeKind_U64);
}
@@ -901,7 +901,7 @@ e_leaf_type_from_name(String8 name)
{
key = e_type_key_basic(E_TypeKind_Char32);
}
else if(Case("s64") || Case("b64") || Case("B64") || Case("i64") || Case("int64") || Case("int64_t") || Case("S64"))
else if(Case("s64") || Case("b64") || Case("B64") || Case("i64") || Case("int64") || Case("int64_t") || Case("S64") || Case("ssize_t"))
{
key = e_type_key_basic(E_TypeKind_S64);
}
@@ -393,7 +393,7 @@ ev_view_rule_info_from_string(String8 string)
//~ rjf: Automatic Type -> View Rule Table Building / Selection / Lookups
internal void
ev_auto_view_rule_table_push_new(Arena *arena, EV_AutoViewRuleTable *table, E_TypeKey type_key, String8 view_rule)
ev_auto_view_rule_table_push_new(Arena *arena, EV_AutoViewRuleTable *table, E_TypeKey type_key, String8 view_rule, B32 is_required)
{
if(table->slots_count == 0)
{
@@ -417,6 +417,7 @@ ev_auto_view_rule_table_push_new(Arena *arena, EV_AutoViewRuleTable *table, E_Ty
node = push_array(arena, EV_AutoViewRuleNode, 1);
node->key = type_key;
node->view_rule = push_str8_copy(arena, view_rule);
node->is_required = is_required;
SLLQueuePush(slot->first, slot->last, node);
}
}
@@ -427,10 +428,10 @@ ev_select_auto_view_rule_table(EV_AutoViewRuleTable *table)
ev_auto_view_rule_table = table;
}
internal String8
ev_auto_view_rule_from_type_key(E_TypeKey type_key)
internal EV_ViewRuleList *
ev_auto_view_rules_from_type_key(Arena *arena, E_TypeKey type_key, B32 gather_required, B32 gather_optional)
{
String8 string = {0};
EV_ViewRuleList *result = &ev_nil_view_rule_list;
if(ev_auto_view_rule_table != 0 && ev_auto_view_rule_table->slots_count != 0)
{
U64 hash = e_hash_from_type_key(type_key);
@@ -439,18 +440,17 @@ ev_auto_view_rule_from_type_key(E_TypeKey type_key)
EV_AutoViewRuleNode *node = 0;
for(EV_AutoViewRuleNode *n = slot->first; n != 0; n = n->next)
{
if(e_type_match(n->key, type_key))
if(e_type_match(n->key, type_key) && ((n->is_required && gather_required) || (!n->is_required && gather_optional)))
{
node = n;
break;
if(result == &ev_nil_view_rule_list)
{
result = push_array(arena, EV_ViewRuleList, 1);
}
ev_view_rule_list_push_string(arena, result, n->view_rule);
}
}
if(node != 0)
{
string = node->view_rule;
}
}
return string;
return result;
}
////////////////////////////////
@@ -468,10 +468,13 @@ ev_view_rule_list_push_tree(Arena *arena, EV_ViewRuleList *list, MD_Node *root)
internal void
ev_view_rule_list_push_string(Arena *arena, EV_ViewRuleList *list, String8 string)
{
MD_Node *root = md_tree_from_string(arena, string);
for MD_EachNode(tln, root->first)
if(string.size != 0)
{
ev_view_rule_list_push_tree(arena, list, tln);
MD_Node *root = md_tree_from_string(arena, string);
for MD_EachNode(tln, root->first)
{
ev_view_rule_list_push_tree(arena, list, tln);
}
}
}
@@ -509,6 +512,22 @@ ev_view_rule_list_copy(Arena *arena, EV_ViewRuleList *src)
return dst;
}
internal void
ev_view_rule_list_concat_in_place(EV_ViewRuleList *dst, EV_ViewRuleList **src)
{
if(dst->first && src[0] != &ev_nil_view_rule_list && src[0]->first)
{
dst->last->next = src[0]->first;
dst->last = src[0]->last;
dst->count += src[0]->count;
}
else if(!dst->first)
{
MemoryCopyStruct(dst, *src);
}
*src = &ev_nil_view_rule_list;
}
////////////////////////////////
//~ rjf: View Rule Expression Resolution
@@ -543,8 +562,8 @@ ev_block_tree_from_expr(Arena *arena, EV_View *view, String8 filter, String8 str
EV_ViewRuleList *top_level_view_rules = ev_view_rule_list_copy(arena, view_rules);
{
E_IRTreeAndType irtree = e_irtree_and_type_from_expr(scratch.arena, expr);
String8 auto_view_rule = ev_auto_view_rule_from_type_key(irtree.type_key);
ev_view_rule_list_push_string(arena, top_level_view_rules, auto_view_rule);
EV_ViewRuleList *auto_view_rules = ev_auto_view_rules_from_type_key(arena, irtree.type_key, 1, 1);
ev_view_rule_list_concat_in_place(top_level_view_rules, &auto_view_rules);
}
//- rjf: generate root block
@@ -684,19 +703,12 @@ ev_block_tree_from_expr(Arena *arena, EV_View *view, String8 filter, String8 str
E_Expr *child_expr = child_expand.row_exprs[0];
EV_ViewRuleList *child_view_rules = ev_view_rule_list_from_inheritance(arena, t->view_rules);
String8 child_view_rule_string = ev_view_rule_from_key(view, child_key);
if(child_view_rule_string.size != 0)
{
ev_view_rule_list_push_string(arena, child_view_rules, child_view_rule_string);
}
else
ev_view_rule_list_push_string(arena, child_view_rules, child_view_rule_string);
{
Temp scratch = scratch_begin(&arena, 1);
E_IRTreeAndType child_irtree = e_irtree_and_type_from_expr(scratch.arena, child_expr);
String8 child_auto_view_rule_string = ev_auto_view_rule_from_type_key(child_irtree.type_key);
if(child_auto_view_rule_string.size != 0)
{
ev_view_rule_list_push_string(arena, child_view_rules, child_auto_view_rule_string);
}
EV_ViewRuleList *child_auto_view_rules = ev_auto_view_rules_from_type_key(arena, child_irtree.type_key, 1, child_view_rule_string.size == 0);
ev_view_rule_list_concat_in_place(child_view_rules, &child_auto_view_rules);
scratch_end(scratch);
}
E_Expr *child_expr__resolved = ev_expr_from_expr_view_rules(arena, child_expr, child_view_rules);
@@ -1011,19 +1023,12 @@ ev_windowed_row_list_from_block_range_list(Arena *arena, EV_View *view, String8
E_Expr *row_expr = expand_range_info.row_exprs[idx];
EV_ViewRuleList *row_view_rules = ev_view_rule_list_from_inheritance(arena, n->v.block->view_rules);
String8 row_view_rule_string = ev_view_rule_from_key(view, row_key);
if(row_view_rule_string.size != 0)
{
ev_view_rule_list_push_string(arena, row_view_rules, row_view_rule_string);
}
else
ev_view_rule_list_push_string(arena, row_view_rules, row_view_rule_string);
{
Temp scratch = scratch_begin(&arena, 1);
E_IRTreeAndType row_irtree = e_irtree_and_type_from_expr(scratch.arena, row_expr);
String8 row_auto_view_rule_string = ev_auto_view_rule_from_type_key(row_irtree.type_key);
if(row_auto_view_rule_string.size != 0)
{
ev_view_rule_list_push_string(arena, row_view_rules, row_auto_view_rule_string);
}
EV_ViewRuleList *row_auto_view_rules = ev_auto_view_rules_from_type_key(arena, row_irtree.type_key, 1, row_view_rule_string.size == 0);
ev_view_rule_list_concat_in_place(row_view_rules, &row_auto_view_rules);
scratch_end(scratch);
}
E_Expr *row_expr__resolved = ev_expr_from_expr_view_rules(arena, row_expr, row_view_rules);
@@ -291,6 +291,7 @@ struct EV_AutoViewRuleNode
EV_AutoViewRuleNode *next;
E_TypeKey key;
String8 view_rule;
B32 is_required;
};
typedef struct EV_AutoViewRuleSlot EV_AutoViewRuleSlot;
@@ -392,9 +393,9 @@ internal EV_ViewRuleInfo *ev_view_rule_info_from_string(String8 string);
////////////////////////////////
//~ rjf: Automatic Type -> View Rule Table Building / Selection / Lookups
internal void ev_auto_view_rule_table_push_new(Arena *arena, EV_AutoViewRuleTable *table, E_TypeKey type_key, String8 view_rule);
internal void ev_auto_view_rule_table_push_new(Arena *arena, EV_AutoViewRuleTable *table, E_TypeKey type_key, String8 view_rule, B32 is_required);
internal void ev_select_auto_view_rule_table(EV_AutoViewRuleTable *table);
internal String8 ev_auto_view_rule_from_type_key(E_TypeKey type_key);
internal EV_ViewRuleList *ev_auto_view_rules_from_type_key(Arena *arena, E_TypeKey type_key, B32 gather_required, B32 gather_optional);
////////////////////////////////
//~ rjf: View Rule Instance List Building
@@ -404,6 +405,7 @@ internal void ev_view_rule_list_push_string(Arena *arena, EV_ViewRuleList *list,
internal EV_ViewRuleList *ev_view_rule_list_from_string(Arena *arena, String8 string);
internal EV_ViewRuleList *ev_view_rule_list_from_inheritance(Arena *arena, EV_ViewRuleList *src);
internal EV_ViewRuleList *ev_view_rule_list_copy(Arena *arena, EV_ViewRuleList *src);
internal void ev_view_rule_list_concat_in_place(EV_ViewRuleList *dst, EV_ViewRuleList **src);
////////////////////////////////
//~ rjf: View Rule Expression Resolution
+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: