more progress on new expanded watch path; mostly feature convergent for procedures & callstack

This commit is contained in:
Ryan Fleury
2024-08-16 15:28:16 -07:00
parent 2d1adaf932
commit 04b38eb405
5 changed files with 136 additions and 50 deletions
+19 -7
View File
@@ -1354,7 +1354,7 @@ df_search_tags_from_entity(Arena *arena, DF_Entity *entity)
DF_Entity *module = df_module_from_process_vaddr(process, rip_vaddr); DF_Entity *module = df_module_from_process_vaddr(process, rip_vaddr);
U64 rip_voff = df_voff_from_vaddr(module, rip_vaddr); U64 rip_voff = df_voff_from_vaddr(module, rip_vaddr);
DI_Key dbgi_key = df_dbgi_key_from_module(module); DI_Key dbgi_key = df_dbgi_key_from_module(module);
String8 procedure_name = df_symbol_name_from_dbgi_key_voff(scratch.arena, &dbgi_key, rip_voff); String8 procedure_name = df_symbol_name_from_dbgi_key_voff(scratch.arena, &dbgi_key, rip_voff, 0);
if(procedure_name.size != 0) if(procedure_name.size != 0)
{ {
str8_list_push(scratch.arena, &strings, procedure_name); str8_list_push(scratch.arena, &strings, procedure_name);
@@ -2957,7 +2957,7 @@ df_vaddr_range_from_voff_range(DF_Entity *module, Rng1U64 voff_rng)
//- rjf: symbol lookups //- rjf: symbol lookups
internal String8 internal String8
df_symbol_name_from_dbgi_key_voff(Arena *arena, DI_Key *dbgi_key, U64 voff) df_symbol_name_from_dbgi_key_voff(Arena *arena, DI_Key *dbgi_key, U64 voff, B32 decorated)
{ {
String8 result = {0}; String8 result = {0};
{ {
@@ -2970,9 +2970,21 @@ df_symbol_name_from_dbgi_key_voff(Arena *arena, DI_Key *dbgi_key, U64 voff)
RDI_Scope *scope = rdi_element_from_name_idx(rdi, Scopes, scope_idx); RDI_Scope *scope = rdi_element_from_name_idx(rdi, Scopes, scope_idx);
U64 proc_idx = scope->proc_idx; U64 proc_idx = scope->proc_idx;
RDI_Procedure *procedure = rdi_element_from_name_idx(rdi, Procedures, proc_idx); RDI_Procedure *procedure = rdi_element_from_name_idx(rdi, Procedures, proc_idx);
U64 name_size = 0; E_TypeKey type = e_type_key_ext(E_TypeKind_Function, procedure->type_idx, e_parse_ctx_module_idx_from_rdi(rdi));
U8 *name_ptr = rdi_string_from_idx(rdi, procedure->name_string_idx, &name_size); String8 name = {0};
result = push_str8_copy(arena, str8(name_ptr, name_size)); name.str = rdi_string_from_idx(rdi, procedure->name_string_idx, &name.size);
if(decorated && procedure->type_idx != 0)
{
String8List list = {0};
e_type_lhs_string_from_key(scratch.arena, type, &list, 0, 0);
str8_list_push(scratch.arena, &list, name);
e_type_rhs_string_from_key(scratch.arena, type, &list, 0);
result = str8_list_join(arena, &list, 0);
}
else
{
result = push_str8_copy(arena, name);
}
} }
if(result.size == 0) if(result.size == 0)
{ {
@@ -2989,14 +3001,14 @@ df_symbol_name_from_dbgi_key_voff(Arena *arena, DI_Key *dbgi_key, U64 voff)
} }
internal String8 internal String8
df_symbol_name_from_process_vaddr(Arena *arena, DF_Entity *process, U64 vaddr) df_symbol_name_from_process_vaddr(Arena *arena, DF_Entity *process, U64 vaddr, B32 decorated)
{ {
String8 result = {0}; String8 result = {0};
{ {
DF_Entity *module = df_module_from_process_vaddr(process, vaddr); DF_Entity *module = df_module_from_process_vaddr(process, vaddr);
DI_Key dbgi_key = df_dbgi_key_from_module(module); DI_Key dbgi_key = df_dbgi_key_from_module(module);
U64 voff = df_voff_from_vaddr(module, vaddr); U64 voff = df_voff_from_vaddr(module, vaddr);
result = df_symbol_name_from_dbgi_key_voff(arena, &dbgi_key, voff); result = df_symbol_name_from_dbgi_key_voff(arena, &dbgi_key, voff, decorated);
} }
return result; return result;
} }
+2 -2
View File
@@ -1521,8 +1521,8 @@ internal Rng1U64 df_vaddr_range_from_voff_range(DF_Entity *module, Rng1U64 voff_
//~ rjf: Debug Info Lookups //~ rjf: Debug Info Lookups
//- rjf: voff|vaddr -> symbol lookups //- rjf: voff|vaddr -> symbol lookups
internal String8 df_symbol_name_from_dbgi_key_voff(Arena *arena, DI_Key *dbgi_key, U64 voff); internal String8 df_symbol_name_from_dbgi_key_voff(Arena *arena, DI_Key *dbgi_key, U64 voff, B32 decorated);
internal String8 df_symbol_name_from_process_vaddr(Arena *arena, DF_Entity *process, U64 vaddr); internal String8 df_symbol_name_from_process_vaddr(Arena *arena, DF_Entity *process, U64 vaddr, B32 decorated);
//- rjf: symbol -> voff lookups //- rjf: symbol -> voff lookups
internal U64 df_voff_from_dbgi_key_symbol_name(DI_Key *dbgi_key, String8 symbol_name); internal U64 df_voff_from_dbgi_key_symbol_name(DI_Key *dbgi_key, String8 symbol_name);
+9 -3
View File
@@ -8396,7 +8396,7 @@ df_single_line_eval_value_strings_from_eval(Arena *arena, DF_EvalVizStringFlags
(E_TypeKind_Char8 <= direct_type_kind && direct_type_kind <= E_TypeKind_UChar32)); (E_TypeKind_Char8 <= direct_type_kind && direct_type_kind <= E_TypeKind_UChar32));
DF_Entity *thread = df_entity_from_handle(df_interact_regs()->thread); DF_Entity *thread = df_entity_from_handle(df_interact_regs()->thread);
DF_Entity *process = df_entity_ancestor_from_kind(thread, DF_EntityKind_Process); DF_Entity *process = df_entity_ancestor_from_kind(thread, DF_EntityKind_Process);
String8 symbol_name = df_symbol_name_from_process_vaddr(arena, process, value_eval.value.u64); String8 symbol_name = df_symbol_name_from_process_vaddr(arena, process, value_eval.value.u64, 1);
// rjf: display ptr value // rjf: display ptr value
B32 did_ptr_value = 0; B32 did_ptr_value = 0;
@@ -10717,7 +10717,7 @@ df_entity_desc_button(DF_Window *ws, DF_Entity *entity, FuzzyMatchRangeList *nam
DF_Entity *module = df_module_from_process_vaddr(process, rip_vaddr); DF_Entity *module = df_module_from_process_vaddr(process, rip_vaddr);
U64 rip_voff = df_voff_from_vaddr(module, rip_vaddr); U64 rip_voff = df_voff_from_vaddr(module, rip_vaddr);
DI_Key dbgi_key = df_dbgi_key_from_module(module); DI_Key dbgi_key = df_dbgi_key_from_module(module);
String8 procedure_name = df_symbol_name_from_dbgi_key_voff(scratch.arena, &dbgi_key, rip_voff); String8 procedure_name = df_symbol_name_from_dbgi_key_voff(scratch.arena, &dbgi_key, rip_voff, 0);
if(procedure_name.size != 0) if(procedure_name.size != 0)
{ {
FuzzyMatchRangeList fuzzy_matches = {0}; FuzzyMatchRangeList fuzzy_matches = {0};
@@ -12753,11 +12753,17 @@ df_fancy_string_list_from_code_string(Arena *arena, F32 alpha, B32 indirection_s
}break; }break;
case TXT_TokenKind_Identifier: case TXT_TokenKind_Identifier:
{ {
E_TypeKey type = e_leaf_type_from_name(token_string);
Vec4F32 color = base_color;
if(!e_type_key_match(e_type_key_zero(), type))
{
color = df_rgba_from_theme_color(DF_ThemeColor_CodeType);
}
D_FancyString fancy_string = D_FancyString fancy_string =
{ {
ui_top_font(), ui_top_font(),
token_string, token_string,
base_color, color,
ui_top_font_size() * (1.f - !!indirection_size_change*(indirection_counter/10.f)), ui_top_font_size() * (1.f - !!indirection_size_change*(indirection_counter/10.f)),
}; };
d_fancy_string_list_push(arena, &fancy_strings, &fancy_string); d_fancy_string_list_push(arena, &fancy_strings, &fancy_string);
+103 -37
View File
@@ -1224,16 +1224,54 @@ df_tbl_from_watch_view_point(DF_EvalVizBlockList *blocks, DF_WatchViewPoint pt)
//- rjf: table coordinates -> strings //- rjf: table coordinates -> strings
internal String8 internal String8
df_string_from_eval_viz_row_column_kind(Arena *arena, DF_EvalView *ev, DF_EvalVizRow *row, DF_WatchViewColumnKind col_kind, B32 editable) df_string_from_eval_viz_row_column(Arena *arena, DF_EvalView *ev, DF_EvalVizRow *row, DF_WatchViewColumn *col, B32 editable)
{ {
String8 result = {0}; String8 result = {0};
switch(col_kind) switch(col->kind)
{ {
default:{}break; default:{}break;
case DF_WatchViewColumnKind_Expr: {result = editable ? row->edit_expr : row->display_expr;}break; case DF_WatchViewColumnKind_Expr:
case DF_WatchViewColumnKind_Value: {result = editable ? row->edit_value : row->display_value;}break; {
case DF_WatchViewColumnKind_Type: {result = !e_type_key_match(row->eval.type_key, e_type_key_zero()) ? e_type_string_from_key(arena, row->eval.type_key) : str8_zero();}break; result = editable ? row->edit_expr : row->display_expr;
case DF_WatchViewColumnKind_ViewRule:{result = df_eval_view_rule_from_key(ev, row->key);}break; if(row->inherited_type_key_chain.first != 0)
{
Temp scratch = scratch_begin(&arena, 1);
String8List inheritance_chain_type_names = {0};
for(E_TypeKeyNode *n = row->inherited_type_key_chain.first; n != 0; n = n->next)
{
String8 inherited_type_name = e_type_string_from_key(scratch.arena, n->v);
inherited_type_name = str8_skip_chop_whitespace(inherited_type_name);
str8_list_push(scratch.arena, &inheritance_chain_type_names, inherited_type_name);
}
if(inheritance_chain_type_names.node_count != 0)
{
StringJoin join = {0};
join.sep = str8_lit("::");
String8 inheritance_type = str8_list_join(scratch.arena, &inheritance_chain_type_names, &join);
result = push_str8f(scratch.arena, "%S::%S", inheritance_type, result);
}
scratch_end(scratch);
}
}break;
case DF_WatchViewColumnKind_Value:
{
result = editable ? row->edit_value : row->display_value;
}break;
case DF_WatchViewColumnKind_Type:
{
result = !e_type_key_match(row->eval.type_key, e_type_key_zero()) ? e_type_string_from_key(arena, row->eval.type_key) : str8_zero();
result = str8_skip_chop_whitespace(result);
}break;
case DF_WatchViewColumnKind_ViewRule:
{
result = df_eval_view_rule_from_key(ev, row->key);
}break;
case DF_WatchViewColumnKind_Module:
{
DF_Entity *process = df_entity_from_handle(df_interact_regs()->process);
DF_Entity *module = df_module_from_process_vaddr(process, row->eval.value.u64);
result = df_display_string_from_entity(arena, module);
}break;
} }
return result; return result;
} }
@@ -1998,7 +2036,8 @@ df_watch_view_build(DF_Window *ws, DF_Panel *panel, DF_View *view, DF_WatchViewS
{ {
for(S64 x = selection_tbl.min.x; x <= selection_tbl.max.x; x += 1) for(S64 x = selection_tbl.min.x; x <= selection_tbl.max.x; x += 1)
{ {
String8 string = df_string_from_eval_viz_row_column_kind(scratch.arena, eval_view, row, (DF_WatchViewColumnKind)x, 1); DF_WatchViewColumn *col = df_watch_view_column_from_x(ewv, x);
String8 string = df_string_from_eval_viz_row_column(scratch.arena, eval_view, row, col, 1);
string.size = Min(string.size, sizeof(ewv->dummy_text_edit_state.input_buffer)); string.size = Min(string.size, sizeof(ewv->dummy_text_edit_state.input_buffer));
DF_WatchViewPoint pt = {x, row->parent_key, row->key}; DF_WatchViewPoint pt = {x, row->parent_key, row->key};
U64 hash = df_hash_from_expand_key(pt.key); U64 hash = df_hash_from_expand_key(pt.key);
@@ -2246,7 +2285,8 @@ df_watch_view_build(DF_Window *ws, DF_Panel *panel, DF_View *view, DF_WatchViewS
{ {
for(S64 x = selection_tbl.min.x; x <= selection_tbl.max.x; x += 1) for(S64 x = selection_tbl.min.x; x <= selection_tbl.max.x; x += 1)
{ {
String8 cell_string = df_string_from_eval_viz_row_column_kind(scratch.arena, eval_view, row, (DF_WatchViewColumnKind)x, 0); DF_WatchViewColumn *col = df_watch_view_column_from_x(ewv, x);
String8 cell_string = df_string_from_eval_viz_row_column(scratch.arena, eval_view, row, col, 0);
cell_string = str8_skip_chop_whitespace(cell_string); cell_string = str8_skip_chop_whitespace(cell_string);
U64 comma_pos = str8_find_needle(cell_string, 0, str8_lit(","), 0); U64 comma_pos = str8_find_needle(cell_string, 0, str8_lit(","), 0);
if(selection_tbl.min.x != selection_tbl.max.x || selection_tbl.min.y != selection_tbl.max.y) if(selection_tbl.min.x != selection_tbl.max.x || selection_tbl.min.y != selection_tbl.max.y)
@@ -2311,7 +2351,7 @@ df_watch_view_build(DF_Window *ws, DF_Panel *panel, DF_View *view, DF_WatchViewS
new_cursor_parent_key = df_parent_expand_key_from_entity(fallback_watch); new_cursor_parent_key = df_parent_expand_key_from_entity(fallback_watch);
} }
} }
DF_WatchViewPoint new_cursor_pt = {DF_WatchViewColumnKind_Expr, new_cursor_parent_key, new_cursor_key}; DF_WatchViewPoint new_cursor_pt = {0, new_cursor_parent_key, new_cursor_key};
df_entity_mark_for_deletion(watch); df_entity_mark_for_deletion(watch);
ewv->cursor = ewv->mark = ewv->next_cursor = ewv->next_mark = new_cursor_pt; ewv->cursor = ewv->mark = ewv->next_cursor = ewv->next_mark = new_cursor_pt;
} }
@@ -2537,6 +2577,7 @@ df_watch_view_build(DF_Window *ws, DF_Panel *panel, DF_View *view, DF_WatchViewS
case DF_WatchViewColumnKind_Value: {name = str8_lit("Value");}break; case DF_WatchViewColumnKind_Value: {name = str8_lit("Value");}break;
case DF_WatchViewColumnKind_Type: {name = str8_lit("Type");}break; case DF_WatchViewColumnKind_Type: {name = str8_lit("Type");}break;
case DF_WatchViewColumnKind_ViewRule:{name = str8_lit("View Rule");}break; case DF_WatchViewColumnKind_ViewRule:{name = str8_lit("View Rule");}break;
case DF_WatchViewColumnKind_Module: {name = str8_lit("Module");}break;
} }
switch(col->kind) switch(col->kind)
{ {
@@ -2685,7 +2726,7 @@ df_watch_view_build(DF_Window *ws, DF_Panel *panel, DF_View *view, DF_WatchViewS
//- rjf: do canvas row interactions //- rjf: do canvas row interactions
{ {
DF_WatchViewPoint pt = {DF_WatchViewColumnKind_Expr, row->parent_key, row->key}; DF_WatchViewPoint pt = {0, row->parent_key, row->key};
UI_Signal sig = ui_signal_from_box(row_box); UI_Signal sig = ui_signal_from_box(row_box);
// rjf: press -> focus // rjf: press -> focus
@@ -2770,16 +2811,17 @@ df_watch_view_build(DF_Window *ws, DF_Panel *panel, DF_View *view, DF_WatchViewS
DF_WatchViewPoint cell_pt = {x, row->parent_key, row->key}; DF_WatchViewPoint cell_pt = {x, row->parent_key, row->key};
DF_WatchViewTextEditState *cell_edit_state = df_watch_view_text_edit_state_from_pt(ewv, cell_pt); DF_WatchViewTextEditState *cell_edit_state = df_watch_view_text_edit_state_from_pt(ewv, cell_pt);
B32 cell_selected = (row_selected && selection_tbl.min.x <= cell_pt.x && cell_pt.x <= selection_tbl.max.x); B32 cell_selected = (row_selected && selection_tbl.min.x <= cell_pt.x && cell_pt.x <= selection_tbl.max.x);
String8 cell_pre_edit_string = df_string_from_eval_viz_row_column(scratch.arena, eval_view, row, col, 0);
//- rjf: unpack column-kind-specific info //- rjf: unpack column-kind-specific info
B32 cell_can_edit = 0; B32 cell_can_edit = 0;
FuzzyMatchRangeList cell_matches = {0}; FuzzyMatchRangeList cell_matches = {0};
String8 cell_pre_edit_string = {0};
String8 cell_error_string = {0}; String8 cell_error_string = {0};
String8 cell_error_tooltip_string = {0}; String8 cell_error_tooltip_string = {0};
DF_AutoCompListerFlags cell_autocomp_flags = 0; DF_AutoCompListerFlags cell_autocomp_flags = 0;
DF_GfxViewRuleRowUIFunctionType *cell_ui_hook = 0; DF_GfxViewRuleRowUIFunctionType *cell_ui_hook = 0;
Vec4F32 cell_base_color = ui_top_palette()->text; Vec4F32 cell_base_color = ui_top_palette()->text;
DF_IconKind cell_icon = DF_IconKind_Null;
switch(col->kind) switch(col->kind)
{ {
default:{}break; default:{}break;
@@ -2790,21 +2832,6 @@ df_watch_view_build(DF_Window *ws, DF_Panel *panel, DF_View *view, DF_WatchViewS
{ {
cell_matches = fuzzy_match_find(scratch.arena, filter, row->display_expr); cell_matches = fuzzy_match_find(scratch.arena, filter, row->display_expr);
} }
cell_pre_edit_string = row->display_expr;
if(row_is_inherited)
{
String8List inheritance_chain_type_names = {0};
for(E_TypeKeyNode *n = row->inherited_type_key_chain.first; n != 0; n = n->next)
{
String8 inherited_type_name = e_type_string_from_key(scratch.arena, n->v);
inherited_type_name = str8_skip_chop_whitespace(inherited_type_name);
str8_list_push(scratch.arena, &inheritance_chain_type_names, inherited_type_name);
}
StringJoin join = {0};
join.sep = str8_lit("::");
String8 inheritance_type = str8_list_join(scratch.arena, &inheritance_chain_type_names, &join);
cell_pre_edit_string = push_str8f(scratch.arena, "%S::%S", inheritance_type, cell_pre_edit_string);
}
cell_autocomp_flags = DF_AutoCompListerFlag_Locals; cell_autocomp_flags = DF_AutoCompListerFlag_Locals;
}break; }break;
case DF_WatchViewColumnKind_Value: case DF_WatchViewColumnKind_Value:
@@ -2828,20 +2855,29 @@ df_watch_view_build(DF_Window *ws, DF_Panel *panel, DF_View *view, DF_WatchViewS
{ {
cell_ui_hook = row->value_ui_rule_spec->info.row_ui; cell_ui_hook = row->value_ui_rule_spec->info.row_ui;
} }
cell_pre_edit_string = row->display_value; if(row->eval.space >= E_Space_FIXED_COUNT)
{
cell_base_color = df_rgba_from_theme_color(DF_ThemeColor_CodeSymbol);
}
}break; }break;
case DF_WatchViewColumnKind_Type: case DF_WatchViewColumnKind_Type:
{ {
cell_can_edit = 0; cell_can_edit = 0;
E_TypeKey key = row->eval.type_key; E_TypeKey key = row->eval.type_key;
cell_pre_edit_string = str8_skip_chop_whitespace(e_type_string_from_key(scratch.arena, key));
cell_base_color = df_rgba_from_theme_color(DF_ThemeColor_CodeType); cell_base_color = df_rgba_from_theme_color(DF_ThemeColor_CodeType);
}break; }break;
case DF_WatchViewColumnKind_ViewRule: case DF_WatchViewColumnKind_ViewRule:
{ {
cell_can_edit = 1; cell_can_edit = 1;
cell_autocomp_flags = DF_AutoCompListerFlag_ViewRules; cell_autocomp_flags = DF_AutoCompListerFlag_ViewRules;
cell_pre_edit_string = df_eval_view_rule_from_key(eval_view, row->key); }break;
case DF_WatchViewColumnKind_FrameSelection:
{
if(semantic_idx == df_interact_regs()->unwind_count - df_interact_regs()->inline_depth)
{
cell_icon = DF_IconKind_RightArrow;
cell_base_color = df_rgba_from_entity(df_entity_from_handle(df_interact_regs()->thread));
}
}break; }break;
} }
@@ -2890,6 +2926,17 @@ df_watch_view_build(DF_Window *ws, DF_Panel *panel, DF_View *view, DF_WatchViewS
sig = ui_signal_from_box(box); sig = ui_signal_from_box(box);
} }
// rjf: cell has icon? build icon
else if(cell_icon != DF_IconKind_Null)
{
UI_Box *box = ui_build_box_from_stringf(UI_BoxFlag_Clickable, "###cell_%I64x", row_hash);
UI_Parent(box) DF_Font(ws, DF_FontSlot_Icons) UI_WidthFill UI_TextAlignment(UI_TextAlign_Center)
{
ui_label(df_g_icon_kind_text_table[cell_icon]);
}
sig = ui_signal_from_box(box);
}
// rjf: build cell line edit // rjf: build cell line edit
else else
{ {
@@ -2898,7 +2945,7 @@ df_watch_view_build(DF_Window *ws, DF_Panel *panel, DF_View *view, DF_WatchViewS
DF_LineEditFlag_NoBackground| DF_LineEditFlag_NoBackground|
DF_LineEditFlag_DisableEdit*(!cell_can_edit)| DF_LineEditFlag_DisableEdit*(!cell_can_edit)|
DF_LineEditFlag_Expander*!!(x == 0 && row->flags & DF_EvalVizRowFlag_CanExpand)| DF_LineEditFlag_Expander*!!(x == 0 && row->flags & DF_EvalVizRowFlag_CanExpand)|
DF_LineEditFlag_ExpanderPlaceholder*(x == 0 && row->depth==0)| DF_LineEditFlag_ExpanderPlaceholder*(x == 0 && row->depth==0 && col->kind == DF_WatchViewColumnKind_Expr)|
DF_LineEditFlag_ExpanderSpace*(x == 0 && row->depth!=0)), DF_LineEditFlag_ExpanderSpace*(x == 0 && row->depth!=0)),
x == 0 ? row->depth : 0, x == 0 ? row->depth : 0,
&cell_matches, &cell_matches,
@@ -2941,6 +2988,25 @@ df_watch_view_build(DF_Window *ws, DF_Panel *panel, DF_View *view, DF_WatchViewS
df_push_cmd__root(&p, df_cmd_spec_from_core_cmd_kind(DF_CoreCmdKind_Edit)); df_push_cmd__root(&p, df_cmd_spec_from_core_cmd_kind(DF_CoreCmdKind_Edit));
} }
// rjf: double-click, not editable -> go-to-location
if(ui_double_clicked(sig) && !cell_can_edit)
{
U64 vaddr = row->eval.value.u64;
DF_Entity *module = df_module_from_process_vaddr(process, vaddr);
DI_Key dbgi_key = df_dbgi_key_from_module(module);
U64 voff = df_voff_from_vaddr(module, vaddr);
DF_LineList lines = df_lines_from_dbgi_key_voff(scratch.arena, &dbgi_key, voff);
DF_CmdParams p = df_cmd_params_from_view(ws, panel, view);
p.entity = df_handle_from_entity(process);
p.vaddr = vaddr;
if(lines.first != 0)
{
p.file_path = lines.first->v.file_path;
p.text_point = lines.first->v.pt;
}
df_push_cmd__root(&p, df_cmd_spec_from_core_cmd_kind(DF_CoreCmdKind_FindCodeLocation));
}
// rjf: hovering with error tooltip -> show tooltip // rjf: hovering with error tooltip -> show tooltip
if(ui_hovering(sig) && cell_error_tooltip_string.size != 0) UI_Tooltip if(ui_hovering(sig) && cell_error_tooltip_string.size != 0) UI_Tooltip
{ {
@@ -6261,8 +6327,9 @@ DF_VIEW_SETUP_FUNCTION_DEF(CallStack)
{ {
DF_WatchViewState *wv = df_view_user_state(view, DF_WatchViewState); DF_WatchViewState *wv = df_view_user_state(view, DF_WatchViewState);
df_watch_view_init(wv, view, DF_WatchViewFillKind_CallStack); df_watch_view_init(wv, view, DF_WatchViewFillKind_CallStack);
df_watch_view_column_alloc(wv, DF_WatchViewColumnKind_Value, 0.5f); df_watch_view_column_alloc(wv, DF_WatchViewColumnKind_FrameSelection, 0.05f);
df_watch_view_column_alloc(wv, DF_WatchViewColumnKind_Type, 0.5f); df_watch_view_column_alloc(wv, DF_WatchViewColumnKind_Value, 0.7f);
df_watch_view_column_alloc(wv, DF_WatchViewColumnKind_Module, 0.25f);
} }
DF_VIEW_STRING_FROM_STATE_FUNCTION_DEF(CallStack) {return str8_zero();} DF_VIEW_STRING_FROM_STATE_FUNCTION_DEF(CallStack) {return str8_zero();}
DF_VIEW_CMD_FUNCTION_DEF(CallStack){} DF_VIEW_CMD_FUNCTION_DEF(CallStack){}
@@ -7656,10 +7723,9 @@ DF_VIEW_SETUP_FUNCTION_DEF(Procedures)
{ {
DF_WatchViewState *wv = df_view_user_state(view, DF_WatchViewState); DF_WatchViewState *wv = df_view_user_state(view, DF_WatchViewState);
df_watch_view_init(wv, view, DF_WatchViewFillKind_Procedures); df_watch_view_init(wv, view, DF_WatchViewFillKind_Procedures);
df_watch_view_column_alloc(wv, DF_WatchViewColumnKind_Expr, 0.25f); df_watch_view_column_alloc(wv, DF_WatchViewColumnKind_Expr, 0.2f);
df_watch_view_column_alloc(wv, DF_WatchViewColumnKind_Value, 0.3f); df_watch_view_column_alloc(wv, DF_WatchViewColumnKind_Value, 0.6f);
df_watch_view_column_alloc(wv, DF_WatchViewColumnKind_Type, 0.15f); df_watch_view_column_alloc(wv, DF_WatchViewColumnKind_ViewRule, 0.2f);
df_watch_view_column_alloc(wv, DF_WatchViewColumnKind_ViewRule, 0.30f);
} }
DF_VIEW_STRING_FROM_STATE_FUNCTION_DEF(Procedures) { return str8_zero(); } DF_VIEW_STRING_FROM_STATE_FUNCTION_DEF(Procedures) { return str8_zero(); }
DF_VIEW_CMD_FUNCTION_DEF(Procedures) {} DF_VIEW_CMD_FUNCTION_DEF(Procedures) {}
@@ -8132,7 +8198,7 @@ DF_VIEW_UI_FUNCTION_DEF(Memory)
DF_Entity *module = df_module_from_process_vaddr(process, f_rip); DF_Entity *module = df_module_from_process_vaddr(process, f_rip);
DI_Key dbgi_key = df_dbgi_key_from_module(module); DI_Key dbgi_key = df_dbgi_key_from_module(module);
U64 rip_voff = df_voff_from_vaddr(module, f_rip); U64 rip_voff = df_voff_from_vaddr(module, f_rip);
String8 symbol_name = df_symbol_name_from_dbgi_key_voff(scratch.arena, &dbgi_key, rip_voff); String8 symbol_name = df_symbol_name_from_dbgi_key_voff(scratch.arena, &dbgi_key, rip_voff, 1);
Annotation *annotation = push_array(scratch.arena, Annotation, 1); Annotation *annotation = push_array(scratch.arena, Annotation, 1);
annotation->name_string = symbol_name.size != 0 ? symbol_name : str8_lit("[external code]"); annotation->name_string = symbol_name.size != 0 ? symbol_name : str8_lit("[external code]");
annotation->kind_string = str8_lit("Call Stack Frame"); annotation->kind_string = str8_lit("Call Stack Frame");
+3 -1
View File
@@ -276,6 +276,8 @@ typedef enum DF_WatchViewColumnKind
DF_WatchViewColumnKind_Value, DF_WatchViewColumnKind_Value,
DF_WatchViewColumnKind_Type, DF_WatchViewColumnKind_Type,
DF_WatchViewColumnKind_ViewRule, DF_WatchViewColumnKind_ViewRule,
DF_WatchViewColumnKind_Module,
DF_WatchViewColumnKind_FrameSelection,
DF_WatchViewColumnKind_COUNT DF_WatchViewColumnKind_COUNT
} }
DF_WatchViewColumnKind; DF_WatchViewColumnKind;
@@ -546,7 +548,7 @@ internal DF_WatchViewPoint df_watch_view_point_from_tbl(DF_EvalVizBlockList *blo
internal Vec2S64 df_tbl_from_watch_view_point(DF_EvalVizBlockList *blocks, DF_WatchViewPoint pt); internal Vec2S64 df_tbl_from_watch_view_point(DF_EvalVizBlockList *blocks, DF_WatchViewPoint pt);
//- rjf: table coordinates -> strings //- rjf: table coordinates -> strings
internal String8 df_string_from_eval_viz_row_column_kind(Arena *arena, DF_EvalView *ev, DF_EvalVizRow *row, DF_WatchViewColumnKind col_kind, B32 editable); internal String8 df_string_from_eval_viz_row_column(Arena *arena, DF_EvalView *ev, DF_EvalVizRow *row, DF_WatchViewColumn *col, B32 editable);
//- rjf: table coordinates -> text edit state //- rjf: table coordinates -> text edit state
internal DF_WatchViewTextEditState *df_watch_view_text_edit_state_from_pt(DF_WatchViewState *wv, DF_WatchViewPoint pt); internal DF_WatchViewTextEditState *df_watch_view_text_edit_state_from_pt(DF_WatchViewState *wv, DF_WatchViewPoint pt);