mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-07-05 01:21:37 -07:00
fix various edge cases in visualizer paths
This commit is contained in:
+21
-7
@@ -8355,7 +8355,7 @@ df_append_value_strings_from_eval(Arena *arena, DF_EvalVizStringFlags flags, U32
|
||||
}
|
||||
|
||||
//- rjf: value/offset evaluations
|
||||
else if(max_size > 0) switch(e_type_kind_from_key(eval.type_key))
|
||||
else if(max_size > 0) switch(e_type_kind_from_key(e_type_unwrap(eval.type_key)))
|
||||
{
|
||||
//- rjf: default - leaf cases
|
||||
default:
|
||||
@@ -8373,8 +8373,8 @@ df_append_value_strings_from_eval(Arena *arena, DF_EvalVizStringFlags flags, U32
|
||||
case E_TypeKind_RRef:
|
||||
{
|
||||
// rjf: unpack type info
|
||||
E_TypeKind type_kind = e_type_kind_from_key(eval.type_key);
|
||||
E_TypeKey direct_type_key = e_type_ptee_from_key(eval.type_key);
|
||||
E_TypeKind type_kind = e_type_kind_from_key(e_type_unwrap(eval.type_key));
|
||||
E_TypeKey direct_type_key = e_type_unwrap(e_type_ptee_from_key(e_type_unwrap(eval.type_key)));
|
||||
E_TypeKind direct_type_kind = e_type_kind_from_key(direct_type_key);
|
||||
|
||||
// rjf: unpack info about pointer destination
|
||||
@@ -8420,7 +8420,9 @@ df_append_value_strings_from_eval(Arena *arena, DF_EvalVizStringFlags flags, U32
|
||||
|
||||
// rjf: special case: push strings for symbols
|
||||
if(!did_content && symbol_name.size != 0 &&
|
||||
(type_kind == E_TypeKind_Function || direct_type_kind == E_TypeKind_Function || direct_type_kind == E_TypeKind_Void) &&
|
||||
((type_kind == E_TypeKind_Ptr && direct_type_kind == E_TypeKind_Void) ||
|
||||
(type_kind == E_TypeKind_Ptr && direct_type_kind == E_TypeKind_Function) ||
|
||||
(type_kind == E_TypeKind_Function)) &&
|
||||
(flags & DF_EvalVizStringFlag_ReadOnlyDisplayRules))
|
||||
{
|
||||
did_content = 1;
|
||||
@@ -8428,6 +8430,18 @@ df_append_value_strings_from_eval(Arena *arena, DF_EvalVizStringFlags flags, U32
|
||||
space_taken += f_dim_from_tag_size_string(font, font_size, 0, 0, symbol_name).x;
|
||||
}
|
||||
|
||||
// rjf: special case: need symbol name, don't have one
|
||||
if(!did_content && symbol_name.size == 0 &&
|
||||
((type_kind == E_TypeKind_Ptr && direct_type_kind == E_TypeKind_Function) ||
|
||||
(type_kind == E_TypeKind_Function)) &&
|
||||
(flags & DF_EvalVizStringFlag_ReadOnlyDisplayRules))
|
||||
{
|
||||
did_content = 1;
|
||||
String8 string = str8_lit("???");
|
||||
str8_list_push(arena, out, string);
|
||||
space_taken += f_dim_from_tag_size_string(font, font_size, 0, 0, string).x;
|
||||
}
|
||||
|
||||
// rjf: descend for all other cases
|
||||
if(!did_content && ptee_has_content && (flags & DF_EvalVizStringFlag_ReadOnlyDisplayRules))
|
||||
{
|
||||
@@ -8448,7 +8462,7 @@ df_append_value_strings_from_eval(Arena *arena, DF_EvalVizStringFlags flags, U32
|
||||
|
||||
// rjf: push pointer value
|
||||
B32 did_ptr_value = 0;
|
||||
if((!no_addr || !did_content) && depth == 0)
|
||||
if(!no_addr || !did_content)
|
||||
{
|
||||
did_ptr_value = 1;
|
||||
if(did_content)
|
||||
@@ -8473,7 +8487,7 @@ df_append_value_strings_from_eval(Arena *arena, DF_EvalVizStringFlags flags, U32
|
||||
case E_TypeKind_Array:
|
||||
{
|
||||
// rjf: unpack type info
|
||||
E_Type *eval_type = e_type_from_key(scratch.arena, eval.type_key);
|
||||
E_Type *eval_type = e_type_from_key(scratch.arena, e_type_unwrap(eval.type_key));
|
||||
E_TypeKey direct_type_key = eval_type->direct_type_key;
|
||||
E_TypeKind direct_type_kind = e_type_kind_from_key(direct_type_key);
|
||||
U64 array_count = eval_type->count;
|
||||
@@ -8588,7 +8602,7 @@ df_append_value_strings_from_eval(Arena *arena, DF_EvalVizStringFlags flags, U32
|
||||
// rjf: content
|
||||
if(depth < 4)
|
||||
{
|
||||
E_MemberArray data_members = e_type_data_members_from_key(scratch.arena, eval.type_key);
|
||||
E_MemberArray data_members = e_type_data_members_from_key(scratch.arena, e_type_unwrap(eval.type_key));
|
||||
E_MemberArray filtered_data_members = df_filtered_data_members_from_members_cfg_table(scratch.arena, data_members, cfg_table);
|
||||
for(U64 member_idx = 0; member_idx < filtered_data_members.count && max_size > space_taken; member_idx += 1)
|
||||
{
|
||||
|
||||
@@ -176,7 +176,7 @@ DF_CORE_VIEW_RULE_EVAL_RESOLUTION_FUNCTION_DEF(array)
|
||||
Temp scratch = scratch_begin(&arena, 1);
|
||||
E_TypeKey type_key = eval.type_key;
|
||||
E_TypeKind type_kind = e_type_kind_from_key(type_key);
|
||||
if(type_kind == E_TypeKind_Ptr || type_kind == E_TypeKind_LRef || type_kind == E_TypeKind_RRef)
|
||||
if(e_type_kind_is_pointer_or_ref(type_kind))
|
||||
{
|
||||
DF_CfgNode *array_node = val->last;
|
||||
if(array_node != &df_g_nil_cfg_node)
|
||||
|
||||
@@ -180,8 +180,11 @@ e_value_eval_from_eval(E_Eval eval)
|
||||
switch(type_kind)
|
||||
{
|
||||
default: break;
|
||||
case E_TypeKind_Char8:
|
||||
case E_TypeKind_S8: {eval.value.s64 = (S64)*((S8 *)&eval.value.u64);}break;
|
||||
case E_TypeKind_Char16:
|
||||
case E_TypeKind_S16: {eval.value.s64 = (S64)*((S16 *)&eval.value.u64);}break;
|
||||
case E_TypeKind_Char32:
|
||||
case E_TypeKind_S32: {eval.value.s64 = (S64)*((S32 *)&eval.value.u64);}break;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user