mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-08-06 22:08:41 +00:00
plug full data member calculation path & padding member visualization back in
This commit is contained in:
+38
-10
@@ -152,8 +152,12 @@ E_LOOKUP_INFO_FUNCTION_DEF(default)
|
|||||||
E_TypeKind direct_type_kind = e_type_kind_from_key(direct_type_key);
|
E_TypeKind direct_type_kind = e_type_kind_from_key(direct_type_key);
|
||||||
if(direct_type_kind == E_TypeKind_Struct ||
|
if(direct_type_kind == E_TypeKind_Struct ||
|
||||||
direct_type_kind == E_TypeKind_Class ||
|
direct_type_kind == E_TypeKind_Class ||
|
||||||
direct_type_kind == E_TypeKind_Union ||
|
direct_type_kind == E_TypeKind_Union)
|
||||||
direct_type_kind == E_TypeKind_Enum)
|
{
|
||||||
|
E_MemberArray data_members = e_type_data_members_from_key__cached(direct_type_key);
|
||||||
|
lookup_info.named_expr_count = data_members.count;
|
||||||
|
}
|
||||||
|
else if(direct_type_kind == E_TypeKind_Enum)
|
||||||
{
|
{
|
||||||
E_Type *direct_type = e_type_from_key__cached(direct_type_key);
|
E_Type *direct_type = e_type_from_key__cached(direct_type_key);
|
||||||
lookup_info.named_expr_count = direct_type->count;
|
lookup_info.named_expr_count = direct_type->count;
|
||||||
@@ -430,7 +434,9 @@ E_LOOKUP_RANGE_FUNCTION_DEF(default)
|
|||||||
|
|
||||||
//- rjf: pull out specific kinds of types
|
//- rjf: pull out specific kinds of types
|
||||||
B32 do_struct_range = 0;
|
B32 do_struct_range = 0;
|
||||||
|
B32 do_enum_range = 0;
|
||||||
B32 do_index_range = 0;
|
B32 do_index_range = 0;
|
||||||
|
E_TypeKey enum_type_key = zero_struct;
|
||||||
E_TypeKey struct_type_key = zero_struct;
|
E_TypeKey struct_type_key = zero_struct;
|
||||||
E_TypeKind struct_type_kind = E_TypeKind_Null;
|
E_TypeKind struct_type_kind = E_TypeKind_Null;
|
||||||
if(e_type_kind_is_pointer_or_ref(lhs_type_kind))
|
if(e_type_kind_is_pointer_or_ref(lhs_type_kind))
|
||||||
@@ -439,13 +445,17 @@ E_LOOKUP_RANGE_FUNCTION_DEF(default)
|
|||||||
if(lhs_type->count == 1 &&
|
if(lhs_type->count == 1 &&
|
||||||
(direct_type_kind == E_TypeKind_Struct ||
|
(direct_type_kind == E_TypeKind_Struct ||
|
||||||
direct_type_kind == E_TypeKind_Union ||
|
direct_type_kind == E_TypeKind_Union ||
|
||||||
direct_type_kind == E_TypeKind_Class ||
|
direct_type_kind == E_TypeKind_Class))
|
||||||
direct_type_kind == E_TypeKind_Enum))
|
|
||||||
{
|
{
|
||||||
struct_type_key = direct_type_key;
|
struct_type_key = direct_type_key;
|
||||||
struct_type_kind = direct_type_kind;
|
struct_type_kind = direct_type_kind;
|
||||||
do_struct_range = 1;
|
do_struct_range = 1;
|
||||||
}
|
}
|
||||||
|
else if(lhs_type->count == 1 && direct_type_kind == E_TypeKind_Enum)
|
||||||
|
{
|
||||||
|
do_enum_range = 1;
|
||||||
|
enum_type_key = direct_type_key;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
do_index_range = 1;
|
do_index_range = 1;
|
||||||
@@ -453,13 +463,17 @@ E_LOOKUP_RANGE_FUNCTION_DEF(default)
|
|||||||
}
|
}
|
||||||
else if(lhs_type_kind == E_TypeKind_Struct ||
|
else if(lhs_type_kind == E_TypeKind_Struct ||
|
||||||
lhs_type_kind == E_TypeKind_Union ||
|
lhs_type_kind == E_TypeKind_Union ||
|
||||||
lhs_type_kind == E_TypeKind_Class ||
|
lhs_type_kind == E_TypeKind_Class)
|
||||||
lhs_type_kind == E_TypeKind_Enum)
|
|
||||||
{
|
{
|
||||||
struct_type_key = lhs_type_key;
|
struct_type_key = lhs_type_key;
|
||||||
struct_type_kind = lhs_type_kind;
|
struct_type_kind = lhs_type_kind;
|
||||||
do_struct_range = 1;
|
do_struct_range = 1;
|
||||||
}
|
}
|
||||||
|
else if(lhs_type_kind == E_TypeKind_Enum)
|
||||||
|
{
|
||||||
|
enum_type_key = lhs_type_key;
|
||||||
|
do_enum_range = 1;
|
||||||
|
}
|
||||||
else if(lhs_type_kind == E_TypeKind_Set)
|
else if(lhs_type_kind == E_TypeKind_Set)
|
||||||
{
|
{
|
||||||
do_index_range = 1;
|
do_index_range = 1;
|
||||||
@@ -472,15 +486,29 @@ E_LOOKUP_RANGE_FUNCTION_DEF(default)
|
|||||||
//- rjf: struct case -> the lookup-range will return a range of members
|
//- rjf: struct case -> the lookup-range will return a range of members
|
||||||
if(do_struct_range)
|
if(do_struct_range)
|
||||||
{
|
{
|
||||||
E_Type *struct_type = e_type_from_key__cached(struct_type_key);
|
E_MemberArray data_members = e_type_data_members_from_key__cached(struct_type_key);
|
||||||
Rng1U64 legal_idx_range = r1u64(0, struct_type->count);
|
Rng1U64 legal_idx_range = r1u64(0, data_members.count);
|
||||||
Rng1U64 read_range = intersect_1u64(legal_idx_range, idx_range);
|
Rng1U64 read_range = intersect_1u64(legal_idx_range, idx_range);
|
||||||
U64 read_range_count = dim_1u64(read_range);
|
U64 read_range_count = dim_1u64(read_range);
|
||||||
for(U64 idx = 0; idx < read_range_count; idx += 1)
|
for(U64 idx = 0; idx < read_range_count; idx += 1)
|
||||||
{
|
{
|
||||||
U64 member_idx = idx + read_range.min;
|
U64 member_idx = idx + read_range.min;
|
||||||
String8 member_name = (struct_type->members ? struct_type->members[member_idx].name :
|
String8 member_name = data_members.v[member_idx].name;
|
||||||
struct_type->enum_vals ? struct_type->enum_vals[member_idx].name : str8_lit(""));
|
exprs[idx] = e_expr_irext_member_access(arena, lhs, &lhs_irtree, member_name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//- rjf: enum case -> the lookup-range will return a range of enum constants
|
||||||
|
else if(do_enum_range)
|
||||||
|
{
|
||||||
|
E_Type *type = e_type_from_key__cached(enum_type_key);
|
||||||
|
Rng1U64 legal_idx_range = r1u64(0, type->count);
|
||||||
|
Rng1U64 read_range = intersect_1u64(legal_idx_range, idx_range);
|
||||||
|
U64 read_range_count = dim_1u64(read_range);
|
||||||
|
for(U64 idx = 0; idx < read_range_count; idx += 1)
|
||||||
|
{
|
||||||
|
U64 member_idx = idx + read_range.min;
|
||||||
|
String8 member_name = type->enum_vals[member_idx].name;
|
||||||
exprs[idx] = e_expr_irext_member_access(arena, lhs, &lhs_irtree, member_name);
|
exprs[idx] = e_expr_irext_member_access(arena, lhs, &lhs_irtree, member_name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9282,6 +9282,17 @@ rd_append_value_strings_from_eval(Arena *arena, EV_StringFlags flags, U32 defaul
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//- rjf: force no_string, if we are looking at padding members
|
||||||
|
if(eval.expr->kind == E_ExprKind_MemberAccess)
|
||||||
|
{
|
||||||
|
E_IRTreeAndType irtree = e_irtree_and_type_from_expr(scratch.arena, eval.expr->first);
|
||||||
|
E_Member member = e_type_member_from_key_name__cached(irtree.type_key, eval.expr->last->string);
|
||||||
|
if(member.kind == E_MemberKind_Padding)
|
||||||
|
{
|
||||||
|
no_string = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//- rjf: type evaluations -> display type string
|
//- rjf: type evaluations -> display type string
|
||||||
if(eval.mode == E_Mode_Null && !e_type_key_match(e_type_key_zero(), eval.type_key))
|
if(eval.mode == E_Mode_Null && !e_type_key_match(e_type_key_zero(), eval.type_key))
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user