mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-06-13 07:32:23 -07:00
auto view rules
This commit is contained in:
+17
-8
@@ -91,6 +91,8 @@ Y(String8, type(CTRL_CodeString8), function_location, "Function Location")\
|
||||
Y(String8, type(CTRL_CodeString8), address_location, "Address Location")\
|
||||
Y(String8, type(CTRL_PathString8), source_path, "Source Path")\
|
||||
Y(String8, type(CTRL_PathString8), destination_path, "Destination Path")\
|
||||
Y(String8, type(CTRL_CodeString8), type, "Type")\
|
||||
Y(String8, type(CTRL_CodeString8), view_rule, "View Rule")\
|
||||
Y(String8, type(CTRL_CodeString8), condition, "Condition")\
|
||||
X(CTRL_MetaEvalFrameArray, callstack, "Call Stack")
|
||||
#define X(T, name, pretty_name) T name;
|
||||
@@ -146,6 +148,12 @@ struct_members(CTRL_FilePathMapMetaEval)
|
||||
member_lit_comp(CTRL_MetaEval, type(CTRL_PathString8), destination_path, .pretty_name = str8_lit_comp("Destination Path")),
|
||||
};
|
||||
|
||||
struct_members(CTRL_AutoViewRuleMetaEval)
|
||||
{
|
||||
member_lit_comp(CTRL_MetaEval, type(CTRL_CodeString8), type, .pretty_name = str8_lit_comp("Type")),
|
||||
member_lit_comp(CTRL_MetaEval, type(CTRL_CodeString8), view_rule, .pretty_name = str8_lit_comp("View Rule")),
|
||||
};
|
||||
|
||||
struct_members(CTRL_MachineMetaEval)
|
||||
{
|
||||
member_lit_comp(CTRL_MetaEval, type(B32), frozen, .pretty_name = str8_lit_comp("Frozen")),
|
||||
@@ -179,14 +187,15 @@ struct_members(CTRL_ThreadMetaEval)
|
||||
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_FilePathMapMetaEval,CTRL_MetaEval, .name = str8_lit_comp("file_path_map"));
|
||||
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"));
|
||||
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_FilePathMapMetaEval, CTRL_MetaEval, .name = str8_lit_comp("file_path_map"));
|
||||
named_struct_type(CTRL_AutoViewRuleMetaEval,CTRL_MetaEval, .name = str8_lit_comp("auto_view_rule"));
|
||||
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
|
||||
|
||||
|
||||
@@ -672,13 +672,14 @@ str8_lit_comp("5"),
|
||||
str8_lit_comp("c"),
|
||||
};
|
||||
|
||||
String8 rd_collection_name_table[17] =
|
||||
String8 rd_collection_name_table[18] =
|
||||
{
|
||||
str8_lit_comp("watches"),
|
||||
str8_lit_comp("targets"),
|
||||
str8_lit_comp("breakpoints"),
|
||||
str8_lit_comp("watch_pins"),
|
||||
str8_lit_comp("file_path_maps"),
|
||||
str8_lit_comp("auto_view_rules"),
|
||||
str8_lit_comp("machines"),
|
||||
str8_lit_comp("processes"),
|
||||
str8_lit_comp("threads"),
|
||||
@@ -693,13 +694,14 @@ str8_lit_comp("types"),
|
||||
str8_lit_comp("procedures"),
|
||||
};
|
||||
|
||||
RD_EntityKind rd_collection_entity_kind_table[17] =
|
||||
RD_EntityKind rd_collection_entity_kind_table[18] =
|
||||
{
|
||||
RD_EntityKind_Watch,
|
||||
RD_EntityKind_Target,
|
||||
RD_EntityKind_Breakpoint,
|
||||
RD_EntityKind_WatchPin,
|
||||
RD_EntityKind_FilePathMap,
|
||||
RD_EntityKind_AutoViewRule,
|
||||
RD_EntityKind_Nil,
|
||||
RD_EntityKind_Nil,
|
||||
RD_EntityKind_Nil,
|
||||
@@ -714,13 +716,14 @@ RD_EntityKind_Nil,
|
||||
RD_EntityKind_Nil,
|
||||
};
|
||||
|
||||
CTRL_EntityKind rd_collection_ctrl_entity_kind_table[17] =
|
||||
CTRL_EntityKind rd_collection_ctrl_entity_kind_table[18] =
|
||||
{
|
||||
CTRL_EntityKind_Null,
|
||||
CTRL_EntityKind_Null,
|
||||
CTRL_EntityKind_Null,
|
||||
CTRL_EntityKind_Null,
|
||||
CTRL_EntityKind_Null,
|
||||
CTRL_EntityKind_Null,
|
||||
CTRL_EntityKind_Machine,
|
||||
CTRL_EntityKind_Process,
|
||||
CTRL_EntityKind_Thread,
|
||||
@@ -735,13 +738,14 @@ CTRL_EntityKind_Null,
|
||||
CTRL_EntityKind_Null,
|
||||
};
|
||||
|
||||
EV_ViewRuleExprExpandInfoHookFunctionType * rd_collection_expr_expand_info_hook_function_table[17] =
|
||||
EV_ViewRuleExprExpandInfoHookFunctionType * rd_collection_expr_expand_info_hook_function_table[18] =
|
||||
{
|
||||
EV_VIEW_RULE_EXPR_EXPAND_INFO_FUNCTION_NAME(watches),
|
||||
EV_VIEW_RULE_EXPR_EXPAND_INFO_FUNCTION_NAME(targets),
|
||||
EV_VIEW_RULE_EXPR_EXPAND_INFO_FUNCTION_NAME(breakpoints),
|
||||
EV_VIEW_RULE_EXPR_EXPAND_INFO_FUNCTION_NAME(watch_pins),
|
||||
EV_VIEW_RULE_EXPR_EXPAND_INFO_FUNCTION_NAME(file_path_maps),
|
||||
EV_VIEW_RULE_EXPR_EXPAND_INFO_FUNCTION_NAME(auto_view_rules),
|
||||
EV_VIEW_RULE_EXPR_EXPAND_INFO_FUNCTION_NAME(machines),
|
||||
EV_VIEW_RULE_EXPR_EXPAND_INFO_FUNCTION_NAME(processes),
|
||||
EV_VIEW_RULE_EXPR_EXPAND_INFO_FUNCTION_NAME(threads),
|
||||
@@ -756,13 +760,14 @@ EV_VIEW_RULE_EXPR_EXPAND_INFO_FUNCTION_NAME(types),
|
||||
EV_VIEW_RULE_EXPR_EXPAND_INFO_FUNCTION_NAME(procedures),
|
||||
};
|
||||
|
||||
EV_ViewRuleExprExpandRangeInfoHookFunctionType * rd_collection_expr_expand_range_info_hook_function_table[17] =
|
||||
EV_ViewRuleExprExpandRangeInfoHookFunctionType * rd_collection_expr_expand_range_info_hook_function_table[18] =
|
||||
{
|
||||
EV_VIEW_RULE_EXPR_EXPAND_RANGE_INFO_FUNCTION_NAME(watches),
|
||||
EV_VIEW_RULE_EXPR_EXPAND_RANGE_INFO_FUNCTION_NAME(targets),
|
||||
EV_VIEW_RULE_EXPR_EXPAND_RANGE_INFO_FUNCTION_NAME(breakpoints),
|
||||
EV_VIEW_RULE_EXPR_EXPAND_RANGE_INFO_FUNCTION_NAME(watch_pins),
|
||||
EV_VIEW_RULE_EXPR_EXPAND_RANGE_INFO_FUNCTION_NAME(file_path_maps),
|
||||
EV_VIEW_RULE_EXPR_EXPAND_RANGE_INFO_FUNCTION_NAME(auto_view_rules),
|
||||
EV_VIEW_RULE_EXPR_EXPAND_RANGE_INFO_FUNCTION_NAME(machines),
|
||||
EV_VIEW_RULE_EXPR_EXPAND_RANGE_INFO_FUNCTION_NAME(processes),
|
||||
EV_VIEW_RULE_EXPR_EXPAND_RANGE_INFO_FUNCTION_NAME(threads),
|
||||
@@ -777,13 +782,14 @@ EV_VIEW_RULE_EXPR_EXPAND_RANGE_INFO_FUNCTION_NAME(types),
|
||||
EV_VIEW_RULE_EXPR_EXPAND_RANGE_INFO_FUNCTION_NAME(procedures),
|
||||
};
|
||||
|
||||
EV_ViewRuleExprExpandIDFromNumHookFunctionType * rd_collection_expr_expand_id_from_num_hook_function_table[17] =
|
||||
EV_ViewRuleExprExpandIDFromNumHookFunctionType * rd_collection_expr_expand_id_from_num_hook_function_table[18] =
|
||||
{
|
||||
EV_VIEW_RULE_EXPR_EXPAND_ID_FROM_NUM_FUNCTION_NAME(watches),
|
||||
EV_VIEW_RULE_EXPR_EXPAND_ID_FROM_NUM_FUNCTION_NAME(targets),
|
||||
EV_VIEW_RULE_EXPR_EXPAND_ID_FROM_NUM_FUNCTION_NAME(breakpoints),
|
||||
EV_VIEW_RULE_EXPR_EXPAND_ID_FROM_NUM_FUNCTION_NAME(watch_pins),
|
||||
EV_VIEW_RULE_EXPR_EXPAND_ID_FROM_NUM_FUNCTION_NAME(file_path_maps),
|
||||
EV_VIEW_RULE_EXPR_EXPAND_ID_FROM_NUM_FUNCTION_NAME(auto_view_rules),
|
||||
EV_VIEW_RULE_EXPR_EXPAND_ID_FROM_NUM_FUNCTION_NAME(machines),
|
||||
EV_VIEW_RULE_EXPR_EXPAND_ID_FROM_NUM_FUNCTION_NAME(processes),
|
||||
EV_VIEW_RULE_EXPR_EXPAND_ID_FROM_NUM_FUNCTION_NAME(threads),
|
||||
@@ -798,13 +804,14 @@ EV_VIEW_RULE_EXPR_EXPAND_ID_FROM_NUM_FUNCTION_NAME(types),
|
||||
EV_VIEW_RULE_EXPR_EXPAND_ID_FROM_NUM_FUNCTION_NAME(procedures),
|
||||
};
|
||||
|
||||
EV_ViewRuleExprExpandIDFromNumHookFunctionType * rd_collection_expr_expand_num_from_id_hook_function_table[17] =
|
||||
EV_ViewRuleExprExpandIDFromNumHookFunctionType * rd_collection_expr_expand_num_from_id_hook_function_table[18] =
|
||||
{
|
||||
EV_VIEW_RULE_EXPR_EXPAND_NUM_FROM_ID_FUNCTION_NAME(watches),
|
||||
EV_VIEW_RULE_EXPR_EXPAND_NUM_FROM_ID_FUNCTION_NAME(targets),
|
||||
EV_VIEW_RULE_EXPR_EXPAND_NUM_FROM_ID_FUNCTION_NAME(breakpoints),
|
||||
EV_VIEW_RULE_EXPR_EXPAND_NUM_FROM_ID_FUNCTION_NAME(watch_pins),
|
||||
EV_VIEW_RULE_EXPR_EXPAND_NUM_FROM_ID_FUNCTION_NAME(file_path_maps),
|
||||
EV_VIEW_RULE_EXPR_EXPAND_NUM_FROM_ID_FUNCTION_NAME(auto_view_rules),
|
||||
EV_VIEW_RULE_EXPR_EXPAND_NUM_FROM_ID_FUNCTION_NAME(machines),
|
||||
EV_VIEW_RULE_EXPR_EXPAND_NUM_FROM_ID_FUNCTION_NAME(processes),
|
||||
EV_VIEW_RULE_EXPR_EXPAND_NUM_FROM_ID_FUNCTION_NAME(threads),
|
||||
|
||||
@@ -653,6 +653,7 @@ EV_VIEW_RULE_EXPR_EXPAND_INFO_FUNCTION_DEF(targets);
|
||||
EV_VIEW_RULE_EXPR_EXPAND_INFO_FUNCTION_DEF(breakpoints);
|
||||
EV_VIEW_RULE_EXPR_EXPAND_INFO_FUNCTION_DEF(watch_pins);
|
||||
EV_VIEW_RULE_EXPR_EXPAND_INFO_FUNCTION_DEF(file_path_maps);
|
||||
EV_VIEW_RULE_EXPR_EXPAND_INFO_FUNCTION_DEF(auto_view_rules);
|
||||
EV_VIEW_RULE_EXPR_EXPAND_INFO_FUNCTION_DEF(machines);
|
||||
EV_VIEW_RULE_EXPR_EXPAND_INFO_FUNCTION_DEF(processes);
|
||||
EV_VIEW_RULE_EXPR_EXPAND_INFO_FUNCTION_DEF(threads);
|
||||
@@ -670,6 +671,7 @@ EV_VIEW_RULE_EXPR_EXPAND_RANGE_INFO_FUNCTION_DEF(targets);
|
||||
EV_VIEW_RULE_EXPR_EXPAND_RANGE_INFO_FUNCTION_DEF(breakpoints);
|
||||
EV_VIEW_RULE_EXPR_EXPAND_RANGE_INFO_FUNCTION_DEF(watch_pins);
|
||||
EV_VIEW_RULE_EXPR_EXPAND_RANGE_INFO_FUNCTION_DEF(file_path_maps);
|
||||
EV_VIEW_RULE_EXPR_EXPAND_RANGE_INFO_FUNCTION_DEF(auto_view_rules);
|
||||
EV_VIEW_RULE_EXPR_EXPAND_RANGE_INFO_FUNCTION_DEF(machines);
|
||||
EV_VIEW_RULE_EXPR_EXPAND_RANGE_INFO_FUNCTION_DEF(processes);
|
||||
EV_VIEW_RULE_EXPR_EXPAND_RANGE_INFO_FUNCTION_DEF(threads);
|
||||
@@ -687,6 +689,7 @@ EV_VIEW_RULE_EXPR_EXPAND_ID_FROM_NUM_FUNCTION_DEF(targets);
|
||||
EV_VIEW_RULE_EXPR_EXPAND_ID_FROM_NUM_FUNCTION_DEF(breakpoints);
|
||||
EV_VIEW_RULE_EXPR_EXPAND_ID_FROM_NUM_FUNCTION_DEF(watch_pins);
|
||||
EV_VIEW_RULE_EXPR_EXPAND_ID_FROM_NUM_FUNCTION_DEF(file_path_maps);
|
||||
EV_VIEW_RULE_EXPR_EXPAND_ID_FROM_NUM_FUNCTION_DEF(auto_view_rules);
|
||||
EV_VIEW_RULE_EXPR_EXPAND_ID_FROM_NUM_FUNCTION_DEF(machines);
|
||||
EV_VIEW_RULE_EXPR_EXPAND_ID_FROM_NUM_FUNCTION_DEF(processes);
|
||||
EV_VIEW_RULE_EXPR_EXPAND_ID_FROM_NUM_FUNCTION_DEF(threads);
|
||||
@@ -702,6 +705,7 @@ EV_VIEW_RULE_EXPR_EXPAND_NUM_FROM_ID_FUNCTION_DEF(targets);
|
||||
EV_VIEW_RULE_EXPR_EXPAND_NUM_FROM_ID_FUNCTION_DEF(breakpoints);
|
||||
EV_VIEW_RULE_EXPR_EXPAND_NUM_FROM_ID_FUNCTION_DEF(watch_pins);
|
||||
EV_VIEW_RULE_EXPR_EXPAND_NUM_FROM_ID_FUNCTION_DEF(file_path_maps);
|
||||
EV_VIEW_RULE_EXPR_EXPAND_NUM_FROM_ID_FUNCTION_DEF(auto_view_rules);
|
||||
EV_VIEW_RULE_EXPR_EXPAND_NUM_FROM_ID_FUNCTION_DEF(machines);
|
||||
EV_VIEW_RULE_EXPR_EXPAND_NUM_FROM_ID_FUNCTION_DEF(processes);
|
||||
EV_VIEW_RULE_EXPR_EXPAND_NUM_FROM_ID_FUNCTION_DEF(threads);
|
||||
@@ -767,13 +771,13 @@ extern RD_StringBindingPair rd_default_binding_table[110];
|
||||
extern String8 rd_binding_version_remap_old_name_table[7];
|
||||
extern String8 rd_binding_version_remap_new_name_table[7];
|
||||
extern String8 rd_icon_kind_text_table[69];
|
||||
extern String8 rd_collection_name_table[17];
|
||||
extern RD_EntityKind rd_collection_entity_kind_table[17];
|
||||
extern CTRL_EntityKind rd_collection_ctrl_entity_kind_table[17];
|
||||
extern EV_ViewRuleExprExpandInfoHookFunctionType * rd_collection_expr_expand_info_hook_function_table[17];
|
||||
extern EV_ViewRuleExprExpandRangeInfoHookFunctionType * rd_collection_expr_expand_range_info_hook_function_table[17];
|
||||
extern EV_ViewRuleExprExpandIDFromNumHookFunctionType * rd_collection_expr_expand_id_from_num_hook_function_table[17];
|
||||
extern EV_ViewRuleExprExpandIDFromNumHookFunctionType * rd_collection_expr_expand_num_from_id_hook_function_table[17];
|
||||
extern String8 rd_collection_name_table[18];
|
||||
extern RD_EntityKind rd_collection_entity_kind_table[18];
|
||||
extern CTRL_EntityKind rd_collection_ctrl_entity_kind_table[18];
|
||||
extern EV_ViewRuleExprExpandInfoHookFunctionType * rd_collection_expr_expand_info_hook_function_table[18];
|
||||
extern EV_ViewRuleExprExpandRangeInfoHookFunctionType * rd_collection_expr_expand_range_info_hook_function_table[18];
|
||||
extern EV_ViewRuleExprExpandIDFromNumHookFunctionType * rd_collection_expr_expand_id_from_num_hook_function_table[18];
|
||||
extern EV_ViewRuleExprExpandIDFromNumHookFunctionType * rd_collection_expr_expand_num_from_id_hook_function_table[18];
|
||||
extern RD_ViewRuleInfo rd_view_rule_kind_info_table[34];
|
||||
extern RD_IconKind rd_entity_kind_icon_kind_table[30];
|
||||
extern String8 rd_theme_preset_display_string_table[9];
|
||||
|
||||
@@ -829,6 +829,7 @@ RD_CollectionTable:
|
||||
{breakpoints Breakpoint Null x}
|
||||
{watch_pins WatchPin Null x}
|
||||
{file_path_maps FilePathMap Null x}
|
||||
{auto_view_rules AutoViewRule Null x}
|
||||
|
||||
//- rjf: control entity groups
|
||||
{machines Nil Machine x}
|
||||
|
||||
+112
-43
@@ -1910,12 +1910,12 @@ rd_title_fstrs_from_entity(Arena *arena, RD_Entity *entity, Vec4F32 secondary_co
|
||||
Vec4F32 dst_color = color;
|
||||
if(src_string.size == 0)
|
||||
{
|
||||
src_string = str8_lit("no path");
|
||||
src_string = str8_lit("(source path)");
|
||||
src_color = secondary_color;
|
||||
}
|
||||
if(dst_string.size == 0)
|
||||
{
|
||||
dst_string = str8_lit("no path");
|
||||
dst_string = str8_lit("(destination path)");
|
||||
dst_color = secondary_color;
|
||||
}
|
||||
dr_fancy_string_list_push_new(arena, &result, rd_font_from_slot(RD_FontSlot_Main), size, src_color, src_string);
|
||||
@@ -1924,6 +1924,40 @@ rd_title_fstrs_from_entity(Arena *arena, RD_Entity *entity, Vec4F32 secondary_co
|
||||
dr_fancy_string_list_push_new(arena, &result, rd_font_from_slot(RD_FontSlot_Code), size, v4f32(0, 0, 0, 0), str8_lit(" "));
|
||||
dr_fancy_string_list_push_new(arena, &result, rd_font_from_slot(RD_FontSlot_Main), size, dst_color, dst_string);
|
||||
}
|
||||
if(entity->kind == RD_EntityKind_AutoViewRule)
|
||||
{
|
||||
String8 src_string = src->string;
|
||||
Vec4F32 src_color = color;
|
||||
String8 dst_string = dst->string;
|
||||
Vec4F32 dst_color = color;
|
||||
DR_FancyStringList src_fstrs = {0};
|
||||
DR_FancyStringList dst_fstrs = {0};
|
||||
if(src_string.size == 0)
|
||||
{
|
||||
src_string = str8_lit("(type)");
|
||||
src_color = secondary_color;
|
||||
dr_fancy_string_list_push_new(arena, &src_fstrs, rd_font_from_slot(RD_FontSlot_Main), size, color_extrafied, src_string);
|
||||
}
|
||||
else RD_Font(RD_FontSlot_Code)
|
||||
{
|
||||
src_fstrs = rd_fancy_string_list_from_code_string(arena, 1.f, 0, src_color, src_string);
|
||||
}
|
||||
if(dst_string.size == 0)
|
||||
{
|
||||
dst_string = str8_lit("(view rule)");
|
||||
dst_color = secondary_color;
|
||||
dr_fancy_string_list_push_new(arena, &dst_fstrs, rd_font_from_slot(RD_FontSlot_Main), size, color_extrafied, dst_string);
|
||||
}
|
||||
else RD_Font(RD_FontSlot_Code)
|
||||
{
|
||||
dst_fstrs = rd_fancy_string_list_from_code_string(arena, 1.f, 0, dst_color, dst_string);
|
||||
}
|
||||
dr_fancy_string_list_concat_in_place(&result, &src_fstrs);
|
||||
dr_fancy_string_list_push_new(arena, &result, rd_font_from_slot(RD_FontSlot_Code), size, v4f32(0, 0, 0, 0), str8_lit(" "));
|
||||
dr_fancy_string_list_push_new(arena, &result, rd_font_from_slot(RD_FontSlot_Icons), size, secondary_color, rd_icon_kind_text_table[RD_IconKind_RightArrow]);
|
||||
dr_fancy_string_list_push_new(arena, &result, rd_font_from_slot(RD_FontSlot_Code), size, v4f32(0, 0, 0, 0), str8_lit(" "));
|
||||
dr_fancy_string_list_concat_in_place(&result, &dst_fstrs);
|
||||
}
|
||||
if((entity->kind == RD_EntityKind_Target || entity->kind == RD_EntityKind_Breakpoint) && entity->disabled)
|
||||
{
|
||||
dr_fancy_string_list_push_new(arena, &result, rd_font_from_slot(RD_FontSlot_Code), size, v4f32(0, 0, 0, 0), str8_lit(" "));
|
||||
@@ -2184,9 +2218,21 @@ rd_ctrl_meta_eval_from_entity(Arena *arena, RD_Entity *entity)
|
||||
meval->source_location = src_loc_string;
|
||||
meval->address_location = vaddr_loc_string;
|
||||
meval->function_location = function_loc_string;
|
||||
meval->source_path = src->string;
|
||||
meval->destination_path = dst->string;
|
||||
meval->condition = cnd_string;
|
||||
switch(entity->kind)
|
||||
{
|
||||
default:{}break;
|
||||
case RD_EntityKind_FilePathMap:
|
||||
{
|
||||
meval->source_path = src->string;
|
||||
meval->destination_path = dst->string;
|
||||
}break;
|
||||
case RD_EntityKind_AutoViewRule:
|
||||
{
|
||||
meval->type = src->string;
|
||||
meval->view_rule = dst->string;
|
||||
}break;
|
||||
}
|
||||
ProfEnd();
|
||||
return meval;
|
||||
}
|
||||
@@ -2441,6 +2487,8 @@ rd_eval_space_write(void *u, E_Space space, void *in, Rng1U64 range)
|
||||
StringMemberCase(entry_point) {result = 1; rd_entity_equip_name(rd_entity_child_from_kind_or_alloc(entity, RD_EntityKind_EntryPoint), str8_cstring_capped(in, (U8 *)in + 4096));}
|
||||
StringMemberCase(source_path) {result = 1; rd_entity_equip_name(rd_entity_child_from_kind_or_alloc(entity, RD_EntityKind_Source), str8_cstring_capped(in, (U8 *)in + 4096));}
|
||||
StringMemberCase(destination_path) {result = 1; rd_entity_equip_name(rd_entity_child_from_kind_or_alloc(entity, RD_EntityKind_Dest), str8_cstring_capped(in, (U8 *)in + 4096));}
|
||||
StringMemberCase(type) {result = 1; rd_entity_equip_name(rd_entity_child_from_kind_or_alloc(entity, RD_EntityKind_Source), str8_cstring_capped(in, (U8 *)in + 4096));}
|
||||
StringMemberCase(view_rule) {result = 1; rd_entity_equip_name(rd_entity_child_from_kind_or_alloc(entity, RD_EntityKind_Dest), str8_cstring_capped(in, (U8 *)in + 4096));}
|
||||
StringMemberCase(condition) {result = 1; rd_entity_equip_name(rd_entity_child_from_kind_or_alloc(entity, RD_EntityKind_Condition), str8_cstring_capped(in, (U8 *)in + 4096));}
|
||||
StringMemberCase(source_location)
|
||||
{
|
||||
@@ -4098,14 +4146,14 @@ rd_window_frame(RD_Window *ws)
|
||||
// rjf: filter controls
|
||||
if(view->spec->flags & RD_ViewRuleInfoFlag_CanFilter)
|
||||
{
|
||||
if(ui_clicked(rd_cmd_spec_button(rd_cmd_kind_info_table[RD_CmdKind_Filter].display_name)))
|
||||
if(ui_clicked(rd_cmd_spec_button(rd_cmd_kind_info_table[RD_CmdKind_Filter].string)))
|
||||
{
|
||||
rd_cmd(RD_CmdKind_Filter, .view = rd_handle_from_view(view));
|
||||
rd_cmd(RD_CmdKind_Filter, .panel = rd_handle_from_panel(panel), .view = rd_handle_from_view(view));
|
||||
ui_ctx_menu_close();
|
||||
}
|
||||
if(ui_clicked(rd_cmd_spec_button(rd_cmd_kind_info_table[RD_CmdKind_ClearFilter].display_name)))
|
||||
if(ui_clicked(rd_cmd_spec_button(rd_cmd_kind_info_table[RD_CmdKind_ClearFilter].string)))
|
||||
{
|
||||
rd_cmd(RD_CmdKind_ClearFilter, .view = rd_handle_from_view(view));
|
||||
rd_cmd(RD_CmdKind_ClearFilter, .panel = rd_handle_from_panel(panel), .view = rd_handle_from_view(view));
|
||||
ui_ctx_menu_close();
|
||||
}
|
||||
}
|
||||
@@ -4199,45 +4247,12 @@ rd_window_frame(RD_Window *ws)
|
||||
}
|
||||
|
||||
// rjf: copy name
|
||||
if(ctrl_entity->kind == CTRL_EntityKind_Thread &&
|
||||
ui_clicked(rd_icon_buttonf(RD_IconKind_Clipboard, 0, "Copy Name")))
|
||||
if(ui_clicked(rd_icon_buttonf(RD_IconKind_Clipboard, 0, "Copy Name")))
|
||||
{
|
||||
os_set_clipboard_text(ctrl_entity->string);
|
||||
ui_ctx_menu_close();
|
||||
}
|
||||
|
||||
// rjf: selection
|
||||
if(ctrl_entity->kind == CTRL_EntityKind_Thread)
|
||||
{
|
||||
B32 is_selected = ctrl_handle_match(rd_base_regs()->thread, ctrl_entity->handle);
|
||||
if(is_selected)
|
||||
{
|
||||
rd_icon_buttonf(RD_IconKind_Thread, 0, "[Selected]###select_entity");
|
||||
}
|
||||
else if(ui_clicked(rd_icon_buttonf(RD_IconKind_Thread, 0, "Select###select_entity")))
|
||||
{
|
||||
rd_cmd(RD_CmdKind_SelectThread, .thread = ctrl_entity->handle);
|
||||
ui_ctx_menu_close();
|
||||
}
|
||||
}
|
||||
|
||||
// rjf: freezing
|
||||
if(ctrl_entity->kind == CTRL_EntityKind_Thread ||
|
||||
ctrl_entity->kind == CTRL_EntityKind_Process ||
|
||||
ctrl_entity->kind == CTRL_EntityKind_Machine)
|
||||
{
|
||||
B32 is_frozen = ctrl_entity_tree_is_frozen(ctrl_entity);
|
||||
ui_set_next_palette(rd_palette_from_code(is_frozen ? RD_PaletteCode_NegativePopButton : RD_PaletteCode_PositivePopButton));
|
||||
if(is_frozen && ui_clicked(rd_icon_buttonf(RD_IconKind_Locked, 0, "Thaw###freeze_thaw")))
|
||||
{
|
||||
rd_cmd(RD_CmdKind_ThawThread, .ctrl_entity = ctrl_entity->handle);
|
||||
}
|
||||
if(!is_frozen && ui_clicked(rd_icon_buttonf(RD_IconKind_Unlocked, 0, "Freeze###freeze_thaw")))
|
||||
{
|
||||
rd_cmd(RD_CmdKind_FreezeThread, .ctrl_entity = ctrl_entity->handle);
|
||||
}
|
||||
}
|
||||
|
||||
// rjf: copy ID
|
||||
if((ctrl_entity->kind == CTRL_EntityKind_Thread ||
|
||||
ctrl_entity->kind == CTRL_EntityKind_Process) &&
|
||||
@@ -4308,9 +4323,41 @@ rd_window_frame(RD_Window *ws)
|
||||
}
|
||||
}
|
||||
|
||||
RD_Palette(RD_PaletteCode_Floating) ui_divider(ui_em(1.f, 1.f));
|
||||
// rjf: selection
|
||||
if(ctrl_entity->kind == CTRL_EntityKind_Thread)
|
||||
{
|
||||
B32 is_selected = ctrl_handle_match(rd_base_regs()->thread, ctrl_entity->handle);
|
||||
if(is_selected)
|
||||
{
|
||||
rd_icon_buttonf(RD_IconKind_Thread, 0, "[Selected]###select_entity");
|
||||
}
|
||||
else if(ui_clicked(rd_icon_buttonf(RD_IconKind_Thread, 0, "Select###select_entity")))
|
||||
{
|
||||
rd_cmd(RD_CmdKind_SelectThread, .thread = ctrl_entity->handle);
|
||||
ui_ctx_menu_close();
|
||||
}
|
||||
}
|
||||
|
||||
// rjf: freezing
|
||||
if(ctrl_entity->kind == CTRL_EntityKind_Thread ||
|
||||
ctrl_entity->kind == CTRL_EntityKind_Process ||
|
||||
ctrl_entity->kind == CTRL_EntityKind_Machine)
|
||||
{
|
||||
B32 is_frozen = ctrl_entity_tree_is_frozen(ctrl_entity);
|
||||
ui_set_next_palette(rd_palette_from_code(is_frozen ? RD_PaletteCode_NegativePopButton : RD_PaletteCode_PositivePopButton));
|
||||
if(is_frozen && ui_clicked(rd_icon_buttonf(RD_IconKind_Locked, 0, "Thaw###freeze_thaw")))
|
||||
{
|
||||
rd_cmd(RD_CmdKind_ThawThread, .ctrl_entity = ctrl_entity->handle);
|
||||
}
|
||||
if(!is_frozen && ui_clicked(rd_icon_buttonf(RD_IconKind_Unlocked, 0, "Freeze###freeze_thaw")))
|
||||
{
|
||||
rd_cmd(RD_CmdKind_FreezeThread, .ctrl_entity = ctrl_entity->handle);
|
||||
}
|
||||
}
|
||||
|
||||
// rjf: callstack
|
||||
#if 0
|
||||
RD_Palette(RD_PaletteCode_Floating) ui_divider(ui_em(1.f, 1.f));
|
||||
if(ctrl_entity->kind == CTRL_EntityKind_Thread) UI_TextPadding(ui_top_font_size()*1.5f)
|
||||
{
|
||||
DI_Scope *di_scope = di_scope_open();
|
||||
@@ -4375,6 +4422,7 @@ rd_window_frame(RD_Window *ws)
|
||||
}
|
||||
di_scope_close(di_scope);
|
||||
}
|
||||
#endif
|
||||
|
||||
// rjf: color editor
|
||||
#if 0
|
||||
@@ -5387,6 +5435,7 @@ rd_window_frame(RD_Window *ws)
|
||||
rd_cmd_kind_info_table[RD_CmdKind_Breakpoints].string,
|
||||
rd_cmd_kind_info_table[RD_CmdKind_WatchPins].string,
|
||||
rd_cmd_kind_info_table[RD_CmdKind_FilePathMap].string,
|
||||
rd_cmd_kind_info_table[RD_CmdKind_AutoViewRules].string,
|
||||
rd_cmd_kind_info_table[RD_CmdKind_Settings].string,
|
||||
rd_cmd_kind_info_table[RD_CmdKind_ExceptionFilters].string,
|
||||
rd_cmd_kind_info_table[RD_CmdKind_GettingStarted].string,
|
||||
@@ -5410,6 +5459,7 @@ rd_window_frame(RD_Window *ws)
|
||||
'b',
|
||||
'h',
|
||||
'p',
|
||||
'v',
|
||||
'e',
|
||||
'g',
|
||||
0,
|
||||
@@ -8552,6 +8602,10 @@ EV_VIEW_RULE_EXPR_EXPAND_INFO_FUNCTION_DEF(file_path_maps) { return rd_ev
|
||||
EV_VIEW_RULE_EXPR_EXPAND_RANGE_INFO_FUNCTION_DEF(file_path_maps) { return rd_ev_view_rule_expr_expand_range_info__meta_entities(arena, view, filter, expr, params, idx_range, user_data, RD_EntityKind_FilePathMap, 1); }
|
||||
EV_VIEW_RULE_EXPR_EXPAND_ID_FROM_NUM_FUNCTION_DEF(file_path_maps) { return rd_ev_view_rule_expr_id_from_num__meta_entities(num, user_data, RD_EntityKind_FilePathMap, 1); }
|
||||
EV_VIEW_RULE_EXPR_EXPAND_NUM_FROM_ID_FUNCTION_DEF(file_path_maps) { return rd_ev_view_rule_expr_num_from_id__meta_entities(id, user_data, RD_EntityKind_FilePathMap, 1); }
|
||||
EV_VIEW_RULE_EXPR_EXPAND_INFO_FUNCTION_DEF(auto_view_rules) { return rd_ev_view_rule_expr_expand_info__meta_entities(arena, view, filter, expr, params, RD_EntityKind_AutoViewRule); }
|
||||
EV_VIEW_RULE_EXPR_EXPAND_RANGE_INFO_FUNCTION_DEF(auto_view_rules) { return rd_ev_view_rule_expr_expand_range_info__meta_entities(arena, view, filter, expr, params, idx_range, user_data, RD_EntityKind_AutoViewRule, 1); }
|
||||
EV_VIEW_RULE_EXPR_EXPAND_ID_FROM_NUM_FUNCTION_DEF(auto_view_rules){ return rd_ev_view_rule_expr_id_from_num__meta_entities(num, user_data, RD_EntityKind_AutoViewRule, 1); }
|
||||
EV_VIEW_RULE_EXPR_EXPAND_NUM_FROM_ID_FUNCTION_DEF(auto_view_rules){ return rd_ev_view_rule_expr_num_from_id__meta_entities(id, user_data, RD_EntityKind_AutoViewRule, 1); }
|
||||
|
||||
//- rjf: control entity groups
|
||||
|
||||
@@ -11756,6 +11810,7 @@ rd_frame(void)
|
||||
RD_EntityKind_WatchPin,
|
||||
RD_EntityKind_Target,
|
||||
RD_EntityKind_FilePathMap,
|
||||
RD_EntityKind_AutoViewRule,
|
||||
};
|
||||
E_TypeKey evallable_kind_types[] =
|
||||
{
|
||||
@@ -11763,6 +11818,7 @@ rd_frame(void)
|
||||
e_type_key_cons_base(type(CTRL_PinMetaEval)),
|
||||
e_type_key_cons_base(type(CTRL_TargetMetaEval)),
|
||||
e_type_key_cons_base(type(CTRL_FilePathMapMetaEval)),
|
||||
e_type_key_cons_base(type(CTRL_AutoViewRuleMetaEval)),
|
||||
};
|
||||
for EachElement(idx, evallable_kinds)
|
||||
{
|
||||
@@ -11921,6 +11977,19 @@ rd_frame(void)
|
||||
{
|
||||
ev_auto_view_rule_table_push_new(scratch.arena, auto_view_rule_table, collection_type_keys[idx], rd_collection_name_table[idx], 1);
|
||||
}
|
||||
RD_EntityList auto_view_rules = rd_query_cached_entity_list_with_kind(RD_EntityKind_AutoViewRule);
|
||||
for(RD_EntityNode *n = auto_view_rules.first; n != 0; n = n->next)
|
||||
{
|
||||
RD_Entity *rule = n->entity;
|
||||
RD_Entity *src = rd_entity_child_from_kind(rule, RD_EntityKind_Source);
|
||||
RD_Entity *dst = rd_entity_child_from_kind(rule, RD_EntityKind_Dest);
|
||||
String8 type_string = src->string;
|
||||
String8 view_rule_string = dst->string;
|
||||
E_TokenArray tokens = e_token_array_from_text(scratch.arena, type_string);
|
||||
E_Parse type_parse = e_parse_type_from_text_tokens(scratch.arena, type_string, &tokens);
|
||||
E_TypeKey type_key = e_type_from_expr(type_parse.expr);
|
||||
ev_auto_view_rule_table_push_new(scratch.arena, auto_view_rule_table, type_key, view_rule_string, 0);
|
||||
}
|
||||
}
|
||||
ev_select_auto_view_rule_table(auto_view_rule_table);
|
||||
|
||||
|
||||
@@ -17,8 +17,6 @@
|
||||
// [ ] empty user file causing failure to launch
|
||||
// [ ] decay arrays to pointers in pointer/value comparison
|
||||
// [ ] debugger readme pass
|
||||
// [x] global evaluation across DLL boundaries
|
||||
// [x] mohit-reported callstack-frame-selection bug (with inlines)
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: post-0.9.12 TODO notes
|
||||
@@ -36,7 +34,6 @@
|
||||
// [ ] rich hover coverage; bitmap <-> geo <-> memory <-> disassembly <-> text; etc.
|
||||
// [ ] save view column pcts; generalize to being a first-class thing in
|
||||
// RD_View, e.g. by just having a string -> f32 store
|
||||
// [ ] auto-scroll output window
|
||||
// [ ] visualize all breakpoints everywhere - source view should show up in
|
||||
// disasm, disasm should show up in source view, function should show up in
|
||||
// both, etc.
|
||||
@@ -200,7 +197,6 @@
|
||||
// [ ] @feature processor/data breakpoints
|
||||
// [ ] @feature automatically snap to search matches when searching source files
|
||||
// [ ] automatically start search query with selected text
|
||||
// [ ] @feature entity views: filtering & reordering
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Cold, Clean-up Tasks That Probably Only Ryan Notices
|
||||
@@ -221,8 +217,6 @@
|
||||
// [ ] @feature types -> auto view rules (don't statefully fill view rules
|
||||
// given types, just query if no other view rule is present, & autofill
|
||||
// when editing)
|
||||
// [ ] @feature eval system -> somehow evaluate breakpoint hit counts? "meta"
|
||||
// variables?
|
||||
//
|
||||
// [ ] @feature disasm view improvement features
|
||||
// [ ] visualize jump destinations in disasm
|
||||
@@ -523,6 +517,11 @@
|
||||
// overrides, e.g. C:/devel/ -> D:/devel/, but also C:/devel/foo ->
|
||||
// C:/devel/bar, etc.
|
||||
// [x] fix memory view
|
||||
// [x] global evaluation across DLL boundaries
|
||||
// [x] mohit-reported callstack-frame-selection bug (with inlines)
|
||||
// [x] @feature entity views: filtering & reordering
|
||||
// [x] @feature eval system -> somehow evaluate breakpoint hit counts? "meta"
|
||||
// variables?
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Build Options
|
||||
|
||||
@@ -1261,13 +1261,14 @@ rd_watch_view_build(RD_WatchViewState *ewv, RD_WatchViewFlags flags, String8 roo
|
||||
}
|
||||
RD_WatchViewRowCtrl row_ctrls_[] =
|
||||
{
|
||||
{RD_EntityKind_Target, CTRL_EntityKind_Null, RD_CmdKind_LaunchAndRun },
|
||||
{RD_EntityKind_Target, CTRL_EntityKind_Null, RD_CmdKind_LaunchAndInit },
|
||||
{RD_EntityKind_Target, CTRL_EntityKind_Null, RD_CmdKind_SelectEntity },
|
||||
{RD_EntityKind_Target, CTRL_EntityKind_Null, RD_CmdKind_RemoveEntity },
|
||||
{RD_EntityKind_Breakpoint, CTRL_EntityKind_Null, RD_CmdKind_EnableEntity },
|
||||
{RD_EntityKind_Breakpoint, CTRL_EntityKind_Null, RD_CmdKind_RemoveEntity },
|
||||
{RD_EntityKind_FilePathMap,CTRL_EntityKind_Null, RD_CmdKind_RemoveEntity },
|
||||
{RD_EntityKind_Target, CTRL_EntityKind_Null, RD_CmdKind_LaunchAndRun },
|
||||
{RD_EntityKind_Target, CTRL_EntityKind_Null, RD_CmdKind_LaunchAndInit },
|
||||
{RD_EntityKind_Target, CTRL_EntityKind_Null, RD_CmdKind_SelectEntity },
|
||||
{RD_EntityKind_Target, CTRL_EntityKind_Null, RD_CmdKind_RemoveEntity },
|
||||
{RD_EntityKind_Breakpoint, CTRL_EntityKind_Null, RD_CmdKind_EnableEntity },
|
||||
{RD_EntityKind_Breakpoint, CTRL_EntityKind_Null, RD_CmdKind_RemoveEntity },
|
||||
{RD_EntityKind_FilePathMap, CTRL_EntityKind_Null, RD_CmdKind_RemoveEntity },
|
||||
{RD_EntityKind_AutoViewRule,CTRL_EntityKind_Null, RD_CmdKind_RemoveEntity },
|
||||
{RD_EntityKind_Nil, CTRL_EntityKind_Machine, RD_CmdKind_FreezeEntity },
|
||||
{RD_EntityKind_Nil, CTRL_EntityKind_Process, RD_CmdKind_Kill },
|
||||
{RD_EntityKind_Nil, CTRL_EntityKind_Process, RD_CmdKind_FreezeEntity },
|
||||
@@ -2577,6 +2578,15 @@ rd_watch_view_build(RD_WatchViewState *ewv, RD_WatchViewFlags flags, String8 roo
|
||||
rd_entity_alloc(rd_entity_root(), RD_EntityKind_FilePathMap);
|
||||
}
|
||||
}
|
||||
if(rd_entity_is_nil(entity) && collection_entity_kind == RD_EntityKind_AutoViewRule)
|
||||
UI_Palette(palette)
|
||||
{
|
||||
ui_set_next_focus_hot(row_selected ? UI_FocusKind_On : UI_FocusKind_Off);
|
||||
if(ui_clicked(rd_icon_buttonf(RD_IconKind_Binoculars, 0, "Add Auto View Rule")))
|
||||
{
|
||||
rd_entity_alloc(rd_entity_root(), RD_EntityKind_AutoViewRule);
|
||||
}
|
||||
}
|
||||
|
||||
//- rjf: build entity box
|
||||
if(!rd_entity_is_nil(entity) || ctrl_entity != &ctrl_entity_nil)
|
||||
@@ -2630,6 +2640,7 @@ rd_watch_view_build(RD_WatchViewState *ewv, RD_WatchViewFlags flags, String8 roo
|
||||
switch(ctrl_entity->kind)
|
||||
{
|
||||
default:{}break;
|
||||
case CTRL_EntityKind_Machine:{slot = RD_RegSlot_Machine; rd_regs()->machine = ctrl_entity->handle;}break;
|
||||
case CTRL_EntityKind_Thread: {slot = RD_RegSlot_Thread; rd_regs()->thread = ctrl_entity->handle;}break;
|
||||
case CTRL_EntityKind_Process:{slot = RD_RegSlot_Process; rd_regs()->process = ctrl_entity->handle;}break;
|
||||
case CTRL_EntityKind_Module: {slot = RD_RegSlot_Module; rd_regs()->module = ctrl_entity->handle;}break;
|
||||
@@ -5151,7 +5162,20 @@ RD_VIEW_RULE_UI_FUNCTION_DEF(file_path_map)
|
||||
////////////////////////////////
|
||||
//~ rjf: auto_view_rules @view_hook_impl
|
||||
|
||||
RD_VIEW_RULE_UI_FUNCTION_DEF(auto_view_rules){}
|
||||
RD_VIEW_RULE_UI_FUNCTION_DEF(auto_view_rules)
|
||||
{
|
||||
ProfBeginFunction();
|
||||
RD_WatchViewState *wv = rd_view_state(RD_WatchViewState);
|
||||
if(!wv->initialized)
|
||||
{
|
||||
rd_watch_view_init(wv);
|
||||
rd_watch_view_column_alloc(wv, RD_WatchViewColumnKind_Expr, 0.25f);
|
||||
rd_watch_view_column_alloc(wv, RD_WatchViewColumnKind_Value, 0.75f, .dequote_string = 1, .is_non_code = 0);
|
||||
}
|
||||
rd_watch_view_build(wv, RD_WatchViewFlag_NoHeader|RD_WatchViewFlag_PrettyNameMembers|RD_WatchViewFlag_PrettyEntityRows|RD_WatchViewFlag_DisableCacheLines,
|
||||
str8_lit("auto_view_rules"), str8_lit("only: type view_rule str"), 1, 10, rect);
|
||||
ProfEnd();
|
||||
}
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: breakpoints @view_hook_impl
|
||||
|
||||
Reference in New Issue
Block a user