prioritize string/symbol content in single-line pointer visualization; only use address-first when descending. also fix signed/unsigned visualization of character numeric values

This commit is contained in:
Ryan Fleury
2024-10-24 11:25:13 -07:00
parent 13341a458a
commit c3c9539f9b
2 changed files with 30 additions and 33 deletions
@@ -1533,12 +1533,15 @@ ev_string_from_simple_typed_eval(Arena *arena, EV_StringFlags flags, U32 radix,
case E_TypeKind_UChar16:
case E_TypeKind_UChar32:
{
B32 type_is_unsigned = (type_kind <= E_TypeKind_UChar8 && type_kind <= E_TypeKind_UChar32);
String8 char_str = ev_string_from_ascii_value(arena, eval.value.s64);
if(char_str.size != 0)
{
if(flags & EV_StringFlag_ReadOnlyDisplayRules)
{
String8 imm_string = str8_from_s64(arena, eval.value.s64, radix, min_digits, digit_group_separator);
String8 imm_string = (type_is_unsigned
? str8_from_u64(arena, eval.value.u64, radix, min_digits, digit_group_separator)
: str8_from_s64(arena, eval.value.s64, radix, min_digits, digit_group_separator));
result = push_str8f(arena, "'%S' (%S)", char_str, imm_string);
}
else
@@ -1548,7 +1551,9 @@ ev_string_from_simple_typed_eval(Arena *arena, EV_StringFlags flags, U32 radix,
}
else
{
result = str8_from_s64(arena, eval.value.s64, radix, min_digits, digit_group_separator);
result = (type_is_unsigned
? str8_from_u64(arena, eval.value.u64, radix, min_digits, digit_group_separator)
: str8_from_s64(arena, eval.value.s64, radix, min_digits, digit_group_separator));
}
}break;
+23 -31
View File
@@ -9620,29 +9620,11 @@ rd_append_value_strings_from_eval(Arena *arena, EV_StringFlags flags, U32 defaul
CTRL_Entity *process = ctrl_entity_ancestor_from_kind(thread, CTRL_EntityKind_Process);
String8 symbol_name = d_symbol_name_from_process_vaddr(arena, process, value_eval.value.u64, 1);
// rjf: push pointer value
B32 did_ptr_value = 0;
if(!no_addr || value_eval.value.u64 == 0)
{
did_ptr_value = 1;
String8 string = ev_string_from_simple_typed_eval(arena, flags, radix, min_digits, value_eval);
space_taken += fnt_dim_from_tag_size_string(font, font_size, 0, 0, string).x;
str8_list_push(arena, out, string);
}
// rjf: special case: push strings for textual string content
B32 did_arrow = 0;
B32 did_content = 0;
B32 did_string = 0;
if(!did_content && ptee_has_string && !has_array)
{
if(did_ptr_value && !did_arrow)
{
did_arrow = 1;
String8 arrow = str8_lit(" -> ");
space_taken += fnt_dim_from_tag_size_string(font, font_size, 0, 0, arrow).x;
str8_list_push(arena, out, arrow);
}
did_content = 1;
did_string = 1;
U64 string_memory_addr = value_eval.value.u64;
@@ -9681,13 +9663,6 @@ rd_append_value_strings_from_eval(Arena *arena, EV_StringFlags flags, U32 defaul
(type_kind == E_TypeKind_Ptr && direct_type_kind == E_TypeKind_Function) ||
(type_kind == E_TypeKind_Function)))
{
if(did_ptr_value && !did_arrow)
{
did_arrow = 1;
String8 arrow = str8_lit(" -> ");
space_taken += fnt_dim_from_tag_size_string(font, font_size, 0, 0, arrow).x;
str8_list_push(arena, out, arrow);
}
did_content = 1;
str8_list_push(arena, out, symbol_name);
space_taken += fnt_dim_from_tag_size_string(font, font_size, 0, 0, symbol_name).x;
@@ -9701,19 +9676,36 @@ rd_append_value_strings_from_eval(Arena *arena, EV_StringFlags flags, U32 defaul
(type_kind == E_TypeKind_Function)) &&
(flags & EV_StringFlag_ReadOnlyDisplayRules))
{
if(did_ptr_value)
{
String8 arrow = str8_lit(" -> ");
space_taken += fnt_dim_from_tag_size_string(font, font_size, 0, 0, arrow).x;
str8_list_push(arena, out, arrow);
}
did_content = 1;
String8 string = str8_lit("???");
str8_list_push(arena, out, string);
space_taken += fnt_dim_from_tag_size_string(font, font_size, 0, 0, string).x;
}
// rjf: push pointer value
B32 did_ptr_value = 0;
if(!no_addr || value_eval.value.u64 == 0)
{
did_ptr_value = 1;
if(did_content)
{
String8 left_paren = str8_lit(" (");
space_taken += fnt_dim_from_tag_size_string(font, font_size, 0, 0, left_paren).x;
str8_list_push(arena, out, left_paren);
}
String8 string = ev_string_from_simple_typed_eval(arena, flags, radix, min_digits, value_eval);
space_taken += fnt_dim_from_tag_size_string(font, font_size, 0, 0, string).x;
str8_list_push(arena, out, string);
if(did_content)
{
String8 right_paren = str8_lit(")");
space_taken += fnt_dim_from_tag_size_string(font, font_size, 0, 0, right_paren).x;
str8_list_push(arena, out, right_paren);
}
}
// rjf: descend for all other cases
B32 did_arrow = 0;
if(value_eval.value.u64 != 0 && !did_content && ptee_has_content && (flags & EV_StringFlag_ReadOnlyDisplayRules))
{
if(did_ptr_value && !did_arrow)