From 87fa6b9239429828b6bc7fa069fec0471f48e7fe Mon Sep 17 00:00:00 2001 From: Ryan Fleury Date: Wed, 23 Jul 2025 13:26:23 -0700 Subject: [PATCH] fix <64-bit integer eval stringification path, to not interpret too many bits --- src/eval/eval_core.h | 4 +++- .../eval_visualization_core.c | 24 +++++++++++-------- src/mule/mule_main.cpp | 3 +++ src/raddbg/raddbg_core.c | 17 +++++++++++++ 4 files changed, 37 insertions(+), 11 deletions(-) diff --git a/src/eval/eval_core.h b/src/eval/eval_core.h index 5f64436d..d439979a 100644 --- a/src/eval/eval_core.h +++ b/src/eval/eval_core.h @@ -57,9 +57,11 @@ union E_Value U64 u64; U32 u32; U16 u16; + U8 u8; S64 s64; S32 s32; - S32 s16; + S16 s16; + S8 s8; F64 f64; F32 f32; }; diff --git a/src/eval_visualization/eval_visualization_core.c b/src/eval_visualization/eval_visualization_core.c index b874d4d0..d791877e 100644 --- a/src/eval_visualization/eval_visualization_core.c +++ b/src/eval_visualization/eval_visualization_core.c @@ -1292,6 +1292,8 @@ ev_string_from_simple_typed_eval(Arena *arena, EV_StringParams *params, E_Eval e { digit_group_separator = 0; } + S64 s64 = 0; + U64 u64 = 0; F64 f64 = 0; switch(type_kind) { @@ -1366,20 +1368,22 @@ ev_string_from_simple_typed_eval(Arena *arena, EV_StringParams *params, E_Eval e } }break; - case E_TypeKind_S8: - case E_TypeKind_S16: - case E_TypeKind_S32: - case E_TypeKind_S64: + case E_TypeKind_S8: s64 = (S64)eval.value.s8; goto sint_path; + case E_TypeKind_S16: s64 = (S64)eval.value.s16; goto sint_path; + case E_TypeKind_S32: s64 = (S64)eval.value.s32; goto sint_path; + case E_TypeKind_S64: s64 = (S64)eval.value.s64; goto sint_path; + sint_path:; { - result = str8_from_s64(arena, eval.value.s64, params->radix, params->min_digits, digit_group_separator); + result = str8_from_s64(arena, s64, params->radix, params->min_digits, digit_group_separator); }break; - case E_TypeKind_U8: - case E_TypeKind_U16: - case E_TypeKind_U32: - case E_TypeKind_U64: + case E_TypeKind_U8: u64 = (U64)eval.value.u8; goto uint_path; + case E_TypeKind_U16: u64 = (U64)eval.value.u16; goto uint_path; + case E_TypeKind_U32: u64 = (U64)eval.value.u32; goto uint_path; + case E_TypeKind_U64: u64 = (U64)eval.value.u64; goto uint_path; + uint_path:; { - result = str8_from_u64(arena, eval.value.u64, params->radix, params->min_digits, digit_group_separator); + result = str8_from_u64(arena, u64, params->radix, params->min_digits, digit_group_separator); }break; case E_TypeKind_U128: diff --git a/src/mule/mule_main.cpp b/src/mule/mule_main.cpp index a6f92e21..e17f2fd2 100644 --- a/src/mule/mule_main.cpp +++ b/src/mule/mule_main.cpp @@ -395,6 +395,9 @@ type_coverage_eval_tests(void) Basics basics = {-1, 1, -2, 2, -4, 4, -8, 8, 1.5f, 1.50000000000001}; Basics_Stdint basics_stdint = {-1, 1, -2, 2, -4, 4, -8, 8, 1.5f, 1.50000000000001}; + uint32_t a = (1<<31); + int32_t b = (1<<31); + char string[] = "Hello World!"; char longer_text[] = "Suppose there was some text\n" diff --git a/src/raddbg/raddbg_core.c b/src/raddbg/raddbg_core.c index 6592b6f6..92ffb674 100644 --- a/src/raddbg/raddbg_core.c +++ b/src/raddbg/raddbg_core.c @@ -5072,6 +5072,23 @@ rd_view_ui(Rng2F32 rect) //- rjf: handle interactions // { + // rjf: hover -> debug log + if(DEV_eval_compiler_tooltips) + { + if(ui_hovering(sig)) UI_Tooltip + { + String8 text = e_debug_log_from_expr_string(scratch.arena, cell->eval.string); + String8List lines = str8_split(scratch.arena, text, (U8 *)"\n", 1, StringSplitFlag_KeepEmpties); + for(String8Node *n = lines.first; n != 0; n = n->next) + { + if(n->string.size != 0) + { + ui_label(n->string); + } + } + } + } + // rjf: hover -> rich hover cfgs if(ui_hovering(sig) && cell_info.cfg != &rd_nil_cfg) {