mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-08-06 05:48:40 +00:00
dont do padding members for unions, oops
This commit is contained in:
+16
-12
@@ -965,6 +965,7 @@ internal TG_MemberArray
|
|||||||
tg_data_members_from_graph_raddbg_key(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdbg, TG_Key key)
|
tg_data_members_from_graph_raddbg_key(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdbg, TG_Key key)
|
||||||
{
|
{
|
||||||
Temp scratch = scratch_begin(&arena, 1);
|
Temp scratch = scratch_begin(&arena, 1);
|
||||||
|
TG_Kind root_type_kind = tg_kind_from_key(key);
|
||||||
|
|
||||||
//- rjf: walk type tree; gather members list
|
//- rjf: walk type tree; gather members list
|
||||||
TG_MemberList members_list = {0};
|
TG_MemberList members_list = {0};
|
||||||
@@ -1051,21 +1052,24 @@ tg_data_members_from_graph_raddbg_key(Arena *arena, TG_Graph *graph, RADDBG_Pars
|
|||||||
PaddingNode *first_padding = 0;
|
PaddingNode *first_padding = 0;
|
||||||
PaddingNode *last_padding = 0;
|
PaddingNode *last_padding = 0;
|
||||||
U64 padding_count = 0;
|
U64 padding_count = 0;
|
||||||
for(U64 idx = 0; idx < members.count; idx += 1)
|
if(root_type_kind == TG_Kind_Struct || root_type_kind == TG_Kind_Class)
|
||||||
{
|
{
|
||||||
TG_Member *member = &members.v[idx];
|
for(U64 idx = 0; idx < members.count; idx += 1)
|
||||||
if(idx+1 < members.count)
|
|
||||||
{
|
{
|
||||||
U64 member_byte_size = tg_byte_size_from_graph_raddbg_key(graph, rdbg, member->type_key);
|
TG_Member *member = &members.v[idx];
|
||||||
Rng1U64 member_byte_range = r1u64(member->off, member->off + member_byte_size);
|
if(idx+1 < members.count)
|
||||||
if(member[1].off != member_byte_range.max)
|
|
||||||
{
|
{
|
||||||
PaddingNode *n = push_array(scratch.arena, PaddingNode, 1);
|
U64 member_byte_size = tg_byte_size_from_graph_raddbg_key(graph, rdbg, member->type_key);
|
||||||
SLLQueuePush(first_padding, last_padding, n);
|
Rng1U64 member_byte_range = r1u64(member->off, member->off + member_byte_size);
|
||||||
n->off = member_byte_range.max;
|
if(member[1].off != member_byte_range.max)
|
||||||
n->size = member[1].off - member_byte_range.max;
|
{
|
||||||
n->prev_member_idx = idx;
|
PaddingNode *n = push_array(scratch.arena, PaddingNode, 1);
|
||||||
padding_count += 1;
|
SLLQueuePush(first_padding, last_padding, n);
|
||||||
|
n->off = member_byte_range.max;
|
||||||
|
n->size = member[1].off - member_byte_range.max;
|
||||||
|
n->prev_member_idx = idx;
|
||||||
|
padding_count += 1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user