From ff589d2e55970481198c98005cf29876885e6fbe Mon Sep 17 00:00:00 2001 From: Ryan Fleury Date: Sun, 13 Oct 2024 16:39:16 -0700 Subject: [PATCH] digits view rule --- .../eval_visualization_core.c | 17 ++++++++--------- .../eval_visualization_core.h | 2 +- src/raddbg/raddbg_core.c | 12 ++++++++++-- 3 files changed, 19 insertions(+), 12 deletions(-) diff --git a/src/eval_visualization/eval_visualization_core.c b/src/eval_visualization/eval_visualization_core.c index 7a58cbf2..2909afe3 100644 --- a/src/eval_visualization/eval_visualization_core.c +++ b/src/eval_visualization/eval_visualization_core.c @@ -1449,7 +1449,7 @@ ev_string_from_hresult_code(U32 code) } internal String8 -ev_string_from_simple_typed_eval(Arena *arena, EV_StringFlags flags, U32 radix, E_Eval eval) +ev_string_from_simple_typed_eval(Arena *arena, EV_StringFlags flags, U32 radix, U32 min_digits, E_Eval eval) { String8 result = {0}; E_TypeKey type_key = e_type_unwrap(eval.type_key); @@ -1466,7 +1466,7 @@ ev_string_from_simple_typed_eval(Arena *arena, EV_StringFlags flags, U32 radix, case E_TypeKind_Handle: { - result = str8_from_s64(arena, eval.value.s64, radix, 0, digit_group_separator); + result = str8_from_s64(arena, eval.value.s64, radix, min_digits, digit_group_separator); }break; case E_TypeKind_HResult: @@ -1478,7 +1478,7 @@ ev_string_from_simple_typed_eval(Arena *arena, EV_StringFlags flags, U32 radix, U32 is_error = !!(hresult_value & (1ull<<31)); U32 error_code = (hresult_value); U32 facility = (hresult_value & 0x7ff0000) >> 16; - String8 value_string = str8_from_s64(scratch.arena, eval.value.u64, radix, 0, digit_group_separator); + String8 value_string = str8_from_s64(scratch.arena, eval.value.u64, radix, min_digits, digit_group_separator); String8 facility_string = ev_string_from_hresult_facility_code(facility); String8 error_string = ev_string_from_hresult_code(error_code); result = push_str8f(arena, "%S%s%s%S%s%s%S%s", @@ -1494,7 +1494,7 @@ ev_string_from_simple_typed_eval(Arena *arena, EV_StringFlags flags, U32 radix, } else { - result = str8_from_s64(arena, eval.value.u64, radix, 0, digit_group_separator); + result = str8_from_s64(arena, eval.value.u64, radix, min_digits, digit_group_separator); } }break; @@ -1510,7 +1510,7 @@ ev_string_from_simple_typed_eval(Arena *arena, EV_StringFlags flags, U32 radix, { if(flags & EV_StringFlag_ReadOnlyDisplayRules) { - String8 imm_string = str8_from_s64(arena, eval.value.s64, radix, 0, digit_group_separator); + String8 imm_string = str8_from_s64(arena, eval.value.s64, radix, min_digits, digit_group_separator); result = push_str8f(arena, "'%S' (%S)", char_str, imm_string); } else @@ -1520,7 +1520,7 @@ ev_string_from_simple_typed_eval(Arena *arena, EV_StringFlags flags, U32 radix, } else { - result = str8_from_s64(arena, eval.value.s64, radix, 0, digit_group_separator); + result = str8_from_s64(arena, eval.value.s64, radix, min_digits, digit_group_separator); } }break; @@ -1529,7 +1529,7 @@ ev_string_from_simple_typed_eval(Arena *arena, EV_StringFlags flags, U32 radix, case E_TypeKind_S32: case E_TypeKind_S64: { - result = str8_from_s64(arena, eval.value.s64, radix, 0, digit_group_separator); + result = str8_from_s64(arena, eval.value.s64, radix, min_digits, digit_group_separator); }break; case E_TypeKind_U8: @@ -1537,13 +1537,12 @@ ev_string_from_simple_typed_eval(Arena *arena, EV_StringFlags flags, U32 radix, case E_TypeKind_U32: case E_TypeKind_U64: { - result = str8_from_u64(arena, eval.value.u64, radix, 0, digit_group_separator); + result = str8_from_u64(arena, eval.value.u64, radix, min_digits, digit_group_separator); }break; case E_TypeKind_U128: { Temp scratch = scratch_begin(&arena, 1); - U64 min_digits = (radix == 16) ? type_byte_size*2 : 0; String8 upper64 = str8_from_u64(scratch.arena, eval.value.u128.u64[0], radix, min_digits, digit_group_separator); String8 lower64 = str8_from_u64(scratch.arena, eval.value.u128.u64[1], radix, min_digits, digit_group_separator); result = push_str8f(arena, "%S:%S", upper64, lower64); diff --git a/src/eval_visualization/eval_visualization_core.h b/src/eval_visualization/eval_visualization_core.h index 75a38090..b54b8849 100644 --- a/src/eval_visualization/eval_visualization_core.h +++ b/src/eval_visualization/eval_visualization_core.h @@ -443,7 +443,7 @@ internal B32 ev_row_is_editable(EV_Row *row); internal String8 ev_string_from_ascii_value(Arena *arena, U8 val); internal String8 ev_string_from_hresult_facility_code(U32 code); internal String8 ev_string_from_hresult_code(U32 code); -internal String8 ev_string_from_simple_typed_eval(Arena *arena, EV_StringFlags flags, U32 radix, E_Eval eval); +internal String8 ev_string_from_simple_typed_eval(Arena *arena, EV_StringFlags flags, U32 radix, U32 min_digits, E_Eval eval); internal String8 ev_escaped_from_raw_string(Arena *arena, String8 raw); #endif // EVAL_VISUALIZATION_CORE_H diff --git a/src/raddbg/raddbg_core.c b/src/raddbg/raddbg_core.c index 0b93dde3..4aec30ca 100644 --- a/src/raddbg/raddbg_core.c +++ b/src/raddbg/raddbg_core.c @@ -9189,6 +9189,7 @@ rd_append_value_strings_from_eval(Arena *arena, EV_StringFlags flags, U32 defaul //- rjf: unpack view rules U32 radix = default_radix; + U32 min_digits = 0; B32 no_addr = 0; B32 has_array = 0; for(EV_ViewRuleNode *n = view_rules->first; n != 0; n = n->next) @@ -9200,6 +9201,13 @@ rd_append_value_strings_from_eval(Arena *arena, EV_StringFlags flags, U32 defaul else if(str8_match(n->v.root->string, str8_lit("oct"), 0)) {radix = 8; } else if(str8_match(n->v.root->string, str8_lit("no_addr"), 0)) {no_addr = 1;} else if(str8_match(n->v.root->string, str8_lit("array"), 0)) {has_array = 1;} + else if(str8_match(n->v.root->string, str8_lit("digits"), 0)) + { + String8 expr = md_string_from_children(scratch.arena, n->v.root); + E_Eval eval = e_eval_from_string(scratch.arena, expr); + E_Eval value_eval = e_value_eval_from_eval(eval); + min_digits = (U32)value_eval.value.u64; + } } if(eval.space.kind == RD_EvalSpaceKind_MetaEntity || eval.space.kind == RD_EvalSpaceKind_MetaCtrlEntity) @@ -9244,7 +9252,7 @@ rd_append_value_strings_from_eval(Arena *arena, EV_StringFlags flags, U32 defaul default: { E_Eval value_eval = e_value_eval_from_eval(eval); - String8 string = ev_string_from_simple_typed_eval(arena, flags, radix, value_eval); + 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); }break; @@ -9359,7 +9367,7 @@ rd_append_value_strings_from_eval(Arena *arena, EV_StringFlags flags, U32 defaul space_taken += fnt_dim_from_tag_size_string(font, font_size, 0, 0, ptr_prefix).x; str8_list_push(arena, out, ptr_prefix); } - String8 string = ev_string_from_simple_typed_eval(arena, flags, radix, value_eval); + 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)