@@ -9488,11 +9488,29 @@ rd_append_value_strings_from_eval(Arena *arena, EV_StringFlags flags, U32 defaul
94889488 CTRL_Entity *process = ctrl_entity_ancestor_from_kind(thread, CTRL_EntityKind_Process);
94899489 String8 symbol_name = d_symbol_name_from_process_vaddr(arena, process, value_eval.value.u64, 1);
94909490
9491+ // rjf: push pointer value
9492+ B32 did_ptr_value = 0;
9493+ if(!no_addr || value_eval.value.u64 == 0)
9494+ {
9495+ did_ptr_value = 1;
9496+ String8 string = ev_string_from_simple_typed_eval(arena, flags, radix, min_digits, value_eval);
9497+ space_taken += fnt_dim_from_tag_size_string(font, font_size, 0, 0, string).x;
9498+ str8_list_push(arena, out, string);
9499+ }
9500+
94919501 // rjf: special case: push strings for textual string content
9502+ B32 did_arrow = 0;
94929503 B32 did_content = 0;
94939504 B32 did_string = 0;
94949505 if(!did_content && ptee_has_string && !has_array)
94959506 {
9507+ if(did_ptr_value && !did_arrow)
9508+ {
9509+ did_arrow = 1;
9510+ String8 arrow = str8_lit(" -> ");
9511+ space_taken += fnt_dim_from_tag_size_string(font, font_size, 0, 0, arrow).x;
9512+ str8_list_push(arena, out, arrow);
9513+ }
94969514 did_content = 1;
94979515 did_string = 1;
94989516 U64 string_memory_addr = value_eval.value.u64;
@@ -9524,33 +9542,55 @@ rd_append_value_strings_from_eval(Arena *arena, EV_StringFlags flags, U32 defaul
95249542 }
95259543
95269544 // rjf: special case: push strings for symbols
9527- if(!did_content && symbol_name.size != 0 &&
9545+ if(value_eval.value.u64 != 0 &&
9546+ !did_content && symbol_name.size != 0 &&
95289547 flags & EV_StringFlag_ReadOnlyDisplayRules &&
95299548 ((type_kind == E_TypeKind_Ptr && direct_type_kind == E_TypeKind_Void) ||
95309549 (type_kind == E_TypeKind_Ptr && direct_type_kind == E_TypeKind_Function) ||
95319550 (type_kind == E_TypeKind_Function)))
95329551 {
9552+ if(did_ptr_value && !did_arrow)
9553+ {
9554+ did_arrow = 1;
9555+ String8 arrow = str8_lit(" -> ");
9556+ space_taken += fnt_dim_from_tag_size_string(font, font_size, 0, 0, arrow).x;
9557+ str8_list_push(arena, out, arrow);
9558+ }
95339559 did_content = 1;
95349560 str8_list_push(arena, out, symbol_name);
95359561 space_taken += fnt_dim_from_tag_size_string(font, font_size, 0, 0, symbol_name).x;
95369562 }
95379563
95389564 // rjf: special case: need symbol name, don't have one
9539- if(!did_content && symbol_name.size == 0 &&
9565+ if(value_eval.value.u64 != 0 &&
9566+ !did_content && symbol_name.size == 0 &&
95409567 flags & EV_StringFlag_ReadOnlyDisplayRules &&
95419568 ((type_kind == E_TypeKind_Ptr && direct_type_kind == E_TypeKind_Function) ||
95429569 (type_kind == E_TypeKind_Function)) &&
95439570 (flags & EV_StringFlag_ReadOnlyDisplayRules))
95449571 {
9572+ if(did_ptr_value)
9573+ {
9574+ String8 arrow = str8_lit(" -> ");
9575+ space_taken += fnt_dim_from_tag_size_string(font, font_size, 0, 0, arrow).x;
9576+ str8_list_push(arena, out, arrow);
9577+ }
95459578 did_content = 1;
95469579 String8 string = str8_lit("???");
95479580 str8_list_push(arena, out, string);
95489581 space_taken += fnt_dim_from_tag_size_string(font, font_size, 0, 0, string).x;
95499582 }
95509583
95519584 // rjf: descend for all other cases
9552- if(!did_content && ptee_has_content && (flags & EV_StringFlag_ReadOnlyDisplayRules))
9585+ if(value_eval.value.u64 != 0 && !did_content && ptee_has_content && (flags & EV_StringFlag_ReadOnlyDisplayRules))
95539586 {
9587+ if(did_ptr_value && !did_arrow)
9588+ {
9589+ did_arrow = 1;
9590+ String8 arrow = str8_lit(" -> ");
9591+ space_taken += fnt_dim_from_tag_size_string(font, font_size, 0, 0, arrow).x;
9592+ str8_list_push(arena, out, arrow);
9593+ }
95549594 did_content = 1;
95559595 if(depth < 4)
95569596 {
@@ -9565,28 +9605,6 @@ rd_append_value_strings_from_eval(Arena *arena, EV_StringFlags flags, U32 defaul
95659605 space_taken += fnt_dim_from_tag_size_string(font, font_size, 0, 0, ellipses).x;
95669606 }
95679607 }
9568-
9569- // rjf: push pointer value
9570- B32 did_ptr_value = 0;
9571- if((!no_addr || !did_content) && ((flags & EV_StringFlag_ReadOnlyDisplayRules) || !did_string))
9572- {
9573- did_ptr_value = 1;
9574- if(did_content)
9575- {
9576- String8 ptr_prefix = str8_lit(" (");
9577- space_taken += fnt_dim_from_tag_size_string(font, font_size, 0, 0, ptr_prefix).x;
9578- str8_list_push(arena, out, ptr_prefix);
9579- }
9580- String8 string = ev_string_from_simple_typed_eval(arena, flags, radix, min_digits, value_eval);
9581- space_taken += fnt_dim_from_tag_size_string(font, font_size, 0, 0, string).x;
9582- str8_list_push(arena, out, string);
9583- if(did_content)
9584- {
9585- String8 close = str8_lit(")");
9586- space_taken += fnt_dim_from_tag_size_string(font, font_size, 0, 0, close).x;
9587- str8_list_push(arena, out, close);
9588- }
9589- }
95909608 }break;
95919609
95929610 //- rjf: arrays
@@ -14752,12 +14770,17 @@ rd_frame(void)
1475214770 CTRL_Entity *thread = &ctrl_entity_nil;
1475314771 CTRL_Entity *process = &ctrl_entity_nil;
1475414772 U64 vaddr = 0;
14773+ B32 require_disasm_snap = 0;
1475514774 {
1475614775 file_path = rd_mapped_from_file_path(scratch.arena, rd_regs()->file_path);
1475714776 point = rd_regs()->cursor;
1475814777 thread = ctrl_entity_from_handle(d_state->ctrl_entity_store, rd_regs()->thread);
1475914778 process = ctrl_entity_from_handle(d_state->ctrl_entity_store, rd_regs()->process);
1476014779 vaddr = rd_regs()->vaddr;
14780+ if(file_path.size == 0)
14781+ {
14782+ require_disasm_snap = 1;
14783+ }
1476114784 }
1476214785
1476314786 // rjf: given a src code location, if no vaddr is specified,
@@ -14844,16 +14867,19 @@ rd_frame(void)
1484414867 Rng2F32 panel_rect = rd_target_rect_from_panel(root_rect, ws->root_panel, panel);
1484514868 Vec2F32 panel_rect_dim = dim_2f32(panel_rect);
1484614869 F32 panel_area = panel_rect_dim.x*panel_rect_dim.y;
14870+ RD_View *panel_selected_tab = rd_selected_tab_from_panel(panel);
1484714871 for(RD_View *view = panel->first_tab_view; !rd_view_is_nil(view); view = view->order_next)
1484814872 {
1484914873 if(rd_view_is_project_filtered(view)) { continue; }
1485014874 RD_ViewRuleKind view_kind = rd_view_rule_kind_from_string(view->spec->string);
14851- if(view_kind == RD_ViewRuleKind_Disasm && view->query_string_size == 0 && panel_area > best_panel_area)
14875+ B32 view_is_selected = (view == panel_selected_tab);
14876+ if(view_kind == RD_ViewRuleKind_Disasm && view->query_string_size == 0 && panel_area > best_panel_area &&
14877+ (view_is_selected || require_disasm_snap))
1485214878 {
1485314879 panel_w_disasm = panel;
1485414880 view_w_disasm = view;
1485514881 best_panel_area = panel_area;
14856- if(view == rd_selected_tab_from_panel(panel) )
14882+ if(view_is_selected )
1485714883 {
1485814884 break;
1485914885 }
0 commit comments