raddbg -> raddbgi

This commit is contained in:
Ryan Fleury
2024-02-12 14:56:10 -08:00
parent 4b68967fbe
commit aa2a0948ba
55 changed files with 2620 additions and 2945 deletions
+151 -151
View File
@@ -54,85 +54,85 @@ tg_key_list_copy(Arena *arena, TG_KeyList *src)
//~ rjf: RADDBG <-> TG Enum Conversions
internal TG_Kind
tg_kind_from_raddbg_type_kind(RADDBG_TypeKind kind)
tg_kind_from_raddbgi_type_kind(RADDBGI_TypeKind kind)
{
TG_Kind result = TG_Kind_Null;
switch(kind)
{
default:{}break;
case RADDBG_TypeKind_Void: {result = TG_Kind_Void;}break;
case RADDBG_TypeKind_Handle: {result = TG_Kind_Handle;}break;
case RADDBG_TypeKind_Char8: {result = TG_Kind_Char8;}break;
case RADDBG_TypeKind_Char16: {result = TG_Kind_Char16;}break;
case RADDBG_TypeKind_Char32: {result = TG_Kind_Char32;}break;
case RADDBG_TypeKind_UChar8: {result = TG_Kind_UChar8;}break;
case RADDBG_TypeKind_UChar16: {result = TG_Kind_UChar16;}break;
case RADDBG_TypeKind_UChar32: {result = TG_Kind_UChar32;}break;
case RADDBG_TypeKind_U8: {result = TG_Kind_U8;}break;
case RADDBG_TypeKind_U16: {result = TG_Kind_U16;}break;
case RADDBG_TypeKind_U32: {result = TG_Kind_U32;}break;
case RADDBG_TypeKind_U64: {result = TG_Kind_U64;}break;
case RADDBG_TypeKind_U128: {result = TG_Kind_U128;}break;
case RADDBG_TypeKind_U256: {result = TG_Kind_U256;}break;
case RADDBG_TypeKind_U512: {result = TG_Kind_U512;}break;
case RADDBG_TypeKind_S8: {result = TG_Kind_S8;}break;
case RADDBG_TypeKind_S16: {result = TG_Kind_S16;}break;
case RADDBG_TypeKind_S32: {result = TG_Kind_S32;}break;
case RADDBG_TypeKind_S64: {result = TG_Kind_S64;}break;
case RADDBG_TypeKind_S128: {result = TG_Kind_S128;}break;
case RADDBG_TypeKind_S256: {result = TG_Kind_S256;}break;
case RADDBG_TypeKind_S512: {result = TG_Kind_S512;}break;
case RADDBG_TypeKind_Bool: {result = TG_Kind_Bool;}break;
case RADDBG_TypeKind_F16: {result = TG_Kind_F16;}break;
case RADDBG_TypeKind_F32: {result = TG_Kind_F32;}break;
case RADDBG_TypeKind_F32PP: {result = TG_Kind_F32PP;}break;
case RADDBG_TypeKind_F48: {result = TG_Kind_F48;}break;
case RADDBG_TypeKind_F64: {result = TG_Kind_F64;}break;
case RADDBG_TypeKind_F80: {result = TG_Kind_F80;}break;
case RADDBG_TypeKind_F128: {result = TG_Kind_F128;}break;
case RADDBG_TypeKind_ComplexF32: {result = TG_Kind_ComplexF32;}break;
case RADDBG_TypeKind_ComplexF64: {result = TG_Kind_ComplexF64;}break;
case RADDBG_TypeKind_ComplexF80: {result = TG_Kind_ComplexF80;}break;
case RADDBG_TypeKind_ComplexF128: {result = TG_Kind_ComplexF128;}break;
case RADDBG_TypeKind_Modifier: {result = TG_Kind_Modifier;}break;
case RADDBG_TypeKind_Ptr: {result = TG_Kind_Ptr;}break;
case RADDBG_TypeKind_LRef: {result = TG_Kind_LRef;}break;
case RADDBG_TypeKind_RRef: {result = TG_Kind_RRef;}break;
case RADDBG_TypeKind_Array: {result = TG_Kind_Array;}break;
case RADDBG_TypeKind_Function: {result = TG_Kind_Function;}break;
case RADDBG_TypeKind_Method: {result = TG_Kind_Method;}break;
case RADDBG_TypeKind_MemberPtr: {result = TG_Kind_MemberPtr;}break;
case RADDBG_TypeKind_Struct: {result = TG_Kind_Struct;}break;
case RADDBG_TypeKind_Class: {result = TG_Kind_Class;}break;
case RADDBG_TypeKind_Union: {result = TG_Kind_Union;}break;
case RADDBG_TypeKind_Enum: {result = TG_Kind_Enum;}break;
case RADDBG_TypeKind_Alias: {result = TG_Kind_Alias;}break;
case RADDBG_TypeKind_IncompleteStruct: {result = TG_Kind_IncompleteStruct;}break;
case RADDBG_TypeKind_IncompleteUnion: {result = TG_Kind_IncompleteUnion;}break;
case RADDBG_TypeKind_IncompleteClass: {result = TG_Kind_IncompleteClass;}break;
case RADDBG_TypeKind_IncompleteEnum: {result = TG_Kind_IncompleteEnum;}break;
case RADDBG_TypeKind_Bitfield: {result = TG_Kind_Bitfield;}break;
case RADDBG_TypeKind_Variadic: {result = TG_Kind_Variadic;}break;
case RADDBGI_TypeKind_Void: {result = TG_Kind_Void;}break;
case RADDBGI_TypeKind_Handle: {result = TG_Kind_Handle;}break;
case RADDBGI_TypeKind_Char8: {result = TG_Kind_Char8;}break;
case RADDBGI_TypeKind_Char16: {result = TG_Kind_Char16;}break;
case RADDBGI_TypeKind_Char32: {result = TG_Kind_Char32;}break;
case RADDBGI_TypeKind_UChar8: {result = TG_Kind_UChar8;}break;
case RADDBGI_TypeKind_UChar16: {result = TG_Kind_UChar16;}break;
case RADDBGI_TypeKind_UChar32: {result = TG_Kind_UChar32;}break;
case RADDBGI_TypeKind_U8: {result = TG_Kind_U8;}break;
case RADDBGI_TypeKind_U16: {result = TG_Kind_U16;}break;
case RADDBGI_TypeKind_U32: {result = TG_Kind_U32;}break;
case RADDBGI_TypeKind_U64: {result = TG_Kind_U64;}break;
case RADDBGI_TypeKind_U128: {result = TG_Kind_U128;}break;
case RADDBGI_TypeKind_U256: {result = TG_Kind_U256;}break;
case RADDBGI_TypeKind_U512: {result = TG_Kind_U512;}break;
case RADDBGI_TypeKind_S8: {result = TG_Kind_S8;}break;
case RADDBGI_TypeKind_S16: {result = TG_Kind_S16;}break;
case RADDBGI_TypeKind_S32: {result = TG_Kind_S32;}break;
case RADDBGI_TypeKind_S64: {result = TG_Kind_S64;}break;
case RADDBGI_TypeKind_S128: {result = TG_Kind_S128;}break;
case RADDBGI_TypeKind_S256: {result = TG_Kind_S256;}break;
case RADDBGI_TypeKind_S512: {result = TG_Kind_S512;}break;
case RADDBGI_TypeKind_Bool: {result = TG_Kind_Bool;}break;
case RADDBGI_TypeKind_F16: {result = TG_Kind_F16;}break;
case RADDBGI_TypeKind_F32: {result = TG_Kind_F32;}break;
case RADDBGI_TypeKind_F32PP: {result = TG_Kind_F32PP;}break;
case RADDBGI_TypeKind_F48: {result = TG_Kind_F48;}break;
case RADDBGI_TypeKind_F64: {result = TG_Kind_F64;}break;
case RADDBGI_TypeKind_F80: {result = TG_Kind_F80;}break;
case RADDBGI_TypeKind_F128: {result = TG_Kind_F128;}break;
case RADDBGI_TypeKind_ComplexF32: {result = TG_Kind_ComplexF32;}break;
case RADDBGI_TypeKind_ComplexF64: {result = TG_Kind_ComplexF64;}break;
case RADDBGI_TypeKind_ComplexF80: {result = TG_Kind_ComplexF80;}break;
case RADDBGI_TypeKind_ComplexF128: {result = TG_Kind_ComplexF128;}break;
case RADDBGI_TypeKind_Modifier: {result = TG_Kind_Modifier;}break;
case RADDBGI_TypeKind_Ptr: {result = TG_Kind_Ptr;}break;
case RADDBGI_TypeKind_LRef: {result = TG_Kind_LRef;}break;
case RADDBGI_TypeKind_RRef: {result = TG_Kind_RRef;}break;
case RADDBGI_TypeKind_Array: {result = TG_Kind_Array;}break;
case RADDBGI_TypeKind_Function: {result = TG_Kind_Function;}break;
case RADDBGI_TypeKind_Method: {result = TG_Kind_Method;}break;
case RADDBGI_TypeKind_MemberPtr: {result = TG_Kind_MemberPtr;}break;
case RADDBGI_TypeKind_Struct: {result = TG_Kind_Struct;}break;
case RADDBGI_TypeKind_Class: {result = TG_Kind_Class;}break;
case RADDBGI_TypeKind_Union: {result = TG_Kind_Union;}break;
case RADDBGI_TypeKind_Enum: {result = TG_Kind_Enum;}break;
case RADDBGI_TypeKind_Alias: {result = TG_Kind_Alias;}break;
case RADDBGI_TypeKind_IncompleteStruct: {result = TG_Kind_IncompleteStruct;}break;
case RADDBGI_TypeKind_IncompleteUnion: {result = TG_Kind_IncompleteUnion;}break;
case RADDBGI_TypeKind_IncompleteClass: {result = TG_Kind_IncompleteClass;}break;
case RADDBGI_TypeKind_IncompleteEnum: {result = TG_Kind_IncompleteEnum;}break;
case RADDBGI_TypeKind_Bitfield: {result = TG_Kind_Bitfield;}break;
case RADDBGI_TypeKind_Variadic: {result = TG_Kind_Variadic;}break;
}
return result;
}
internal TG_MemberKind
tg_member_kind_from_raddbg_member_kind(RADDBG_MemberKind kind)
tg_member_kind_from_raddbgi_member_kind(RADDBGI_MemberKind kind)
{
TG_MemberKind result = TG_MemberKind_Null;
switch(kind)
{
default:{}break;
case RADDBG_MemberKind_DataField: {result = TG_MemberKind_DataField;}break;
case RADDBG_MemberKind_StaticData: {result = TG_MemberKind_StaticData;}break;
case RADDBG_MemberKind_Method: {result = TG_MemberKind_Method;}break;
case RADDBG_MemberKind_StaticMethod: {result = TG_MemberKind_StaticMethod;}break;
case RADDBG_MemberKind_VirtualMethod: {result = TG_MemberKind_VirtualMethod;}break;
case RADDBG_MemberKind_VTablePtr: {result = TG_MemberKind_VTablePtr;}break;
case RADDBG_MemberKind_Base: {result = TG_MemberKind_Base;}break;
case RADDBG_MemberKind_VirtualBase: {result = TG_MemberKind_VirtualBase;}break;
case RADDBG_MemberKind_NestedType: {result = TG_MemberKind_NestedType;}break;
case RADDBGI_MemberKind_DataField: {result = TG_MemberKind_DataField;}break;
case RADDBGI_MemberKind_StaticData: {result = TG_MemberKind_StaticData;}break;
case RADDBGI_MemberKind_Method: {result = TG_MemberKind_Method;}break;
case RADDBGI_MemberKind_StaticMethod: {result = TG_MemberKind_StaticMethod;}break;
case RADDBGI_MemberKind_VirtualMethod: {result = TG_MemberKind_VirtualMethod;}break;
case RADDBGI_MemberKind_VTablePtr: {result = TG_MemberKind_VTablePtr;}break;
case RADDBGI_MemberKind_Base: {result = TG_MemberKind_Base;}break;
case RADDBGI_MemberKind_VirtualBase: {result = TG_MemberKind_VirtualBase;}break;
case RADDBGI_MemberKind_NestedType: {result = TG_MemberKind_NestedType;}break;
}
return result;
}
@@ -274,7 +274,7 @@ tg_cons_type_make(TG_Graph *graph, TG_Kind kind, TG_Key direct_type_key, U64 u64
//~ rjf: Graph Introspection API
internal TG_Type *
tg_type_from_graph_raddbg_key(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdbg, TG_Key key)
tg_type_from_graph_raddbgi_key(Arena *arena, TG_Graph *graph, RADDBGI_Parsed *rdbg, TG_Key key)
{
TG_Type *type = &tg_type_nil;
U64 reg_byte_count = 0;
@@ -319,7 +319,7 @@ tg_type_from_graph_raddbg_key(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdbg
}break;
case TG_Kind_Array:
{
U64 ptee_size = tg_byte_size_from_graph_raddbg_key(graph, rdbg, cons_type->direct_type_key);
U64 ptee_size = tg_byte_size_from_graph_raddbgi_key(graph, rdbg, cons_type->direct_type_key);
type->byte_size = ptee_size * type->count;
}break;
}
@@ -333,18 +333,18 @@ tg_type_from_graph_raddbg_key(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdbg
U64 type_node_idx = key.u64[0];
if(0 <= type_node_idx && type_node_idx < rdbg->type_nodes_count)
{
RADDBG_TypeNode *rdbg_type = &rdbg->type_nodes[type_node_idx];
TG_Kind kind = tg_kind_from_raddbg_type_kind(rdbg_type->kind);
RADDBGI_TypeNode *rdbg_type = &rdbg->type_nodes[type_node_idx];
TG_Kind kind = tg_kind_from_raddbgi_type_kind(rdbg_type->kind);
//- rjf: record types => unpack name * members & produce
if(RADDBG_TypeKind_FirstRecord <= rdbg_type->kind && rdbg_type->kind <= RADDBG_TypeKind_LastRecord)
if(RADDBGI_TypeKind_FirstRecord <= rdbg_type->kind && rdbg_type->kind <= RADDBGI_TypeKind_LastRecord)
{
// rjf: unpack name
String8 name = {0};
name.str = raddbg_string_from_idx(rdbg, rdbg_type->user_defined.name_string_idx, &name.size);
name.str = raddbgi_string_from_idx(rdbg, rdbg_type->user_defined.name_string_idx, &name.size);
// rjf: unpack UDT info
RADDBG_UDT *udt = raddbg_element_from_idx(rdbg, udts, rdbg_type->user_defined.udt_idx);
RADDBGI_UDT *udt = raddbgi_element_from_idx(rdbg, udts, rdbg_type->user_defined.udt_idx);
// rjf: unpack members
TG_Member *members = 0;
@@ -358,17 +358,17 @@ tg_type_from_graph_raddbg_key(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdbg
member_idx < udt->member_first+udt->member_count;
member_idx += 1)
{
RADDBG_Member *src = &rdbg->members[member_idx];
RADDBGI_Member *src = &rdbg->members[member_idx];
TG_Kind member_type_kind = TG_Kind_Null;
if(src->type_idx < rdbg->type_nodes_count)
{
RADDBG_TypeNode *member_type = &rdbg->type_nodes[src->type_idx];
member_type_kind = tg_kind_from_raddbg_type_kind(member_type->kind);
RADDBGI_TypeNode *member_type = &rdbg->type_nodes[src->type_idx];
member_type_kind = tg_kind_from_raddbgi_type_kind(member_type->kind);
}
TG_Member *dst = &members[member_idx-udt->member_first];
dst->kind = tg_member_kind_from_raddbg_member_kind(src->kind);
dst->kind = tg_member_kind_from_raddbgi_member_kind(src->kind);
dst->type_key = tg_key_ext(member_type_kind, (U64)src->type_idx);
dst->name.str = raddbg_string_from_idx(rdbg, src->name_string_idx, &dst->name.size);
dst->name.str = raddbgi_string_from_idx(rdbg, src->name_string_idx, &dst->name.size);
dst->off = (U64)src->off;
}
}
@@ -384,18 +384,18 @@ tg_type_from_graph_raddbg_key(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdbg
}
//- rjf: enum types => unpack name * values & produce
else if(rdbg_type->kind == RADDBG_TypeKind_Enum)
else if(rdbg_type->kind == RADDBGI_TypeKind_Enum)
{
// rjf: unpack name
String8 name = {0};
name.str = raddbg_string_from_idx(rdbg, rdbg_type->user_defined.name_string_idx, &name.size);
name.str = raddbgi_string_from_idx(rdbg, rdbg_type->user_defined.name_string_idx, &name.size);
// rjf: unpack direct type
TG_Key direct_type_key = zero_struct;
if(rdbg_type->user_defined.direct_type_idx < type_node_idx)
{
RADDBG_TypeNode *direct_type_node = &rdbg->type_nodes[rdbg_type->user_defined.direct_type_idx];
TG_Kind direct_type_kind = tg_kind_from_raddbg_type_kind(direct_type_node->kind);
RADDBGI_TypeNode *direct_type_node = &rdbg->type_nodes[rdbg_type->user_defined.direct_type_idx];
TG_Kind direct_type_kind = tg_kind_from_raddbgi_type_kind(direct_type_node->kind);
direct_type_key = tg_key_ext(direct_type_kind, (U64)rdbg_type->user_defined.direct_type_idx);
}
@@ -406,7 +406,7 @@ tg_type_from_graph_raddbg_key(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdbg
U32 udt_idx = rdbg_type->user_defined.udt_idx;
if(0 <= udt_idx && udt_idx < rdbg->udts_count)
{
RADDBG_UDT *udt = &rdbg->udts[udt_idx];
RADDBGI_UDT *udt = &rdbg->udts[udt_idx];
enum_vals_count = udt->member_count;
enum_vals = push_array(arena, TG_EnumVal, enum_vals_count);
if(0 <= udt->member_first && udt->member_first+udt->member_count < rdbg->enum_members_count)
@@ -415,9 +415,9 @@ tg_type_from_graph_raddbg_key(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdbg
member_idx < udt->member_first+udt->member_count;
member_idx += 1)
{
RADDBG_EnumMember *src = &rdbg->enum_members[member_idx];
RADDBGI_EnumMember *src = &rdbg->enum_members[member_idx];
TG_EnumVal *dst = &enum_vals[member_idx-udt->member_first];
dst->name.str = raddbg_string_from_idx(rdbg, src->name_string_idx, &dst->name.size);
dst->name.str = raddbgi_string_from_idx(rdbg, src->name_string_idx, &dst->name.size);
dst->val = src->val;
}
}
@@ -435,7 +435,7 @@ tg_type_from_graph_raddbg_key(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdbg
}
//- rjf: constructed types
if(RADDBG_TypeKind_FirstConstructed <= rdbg_type->kind && rdbg_type->kind <= RADDBG_TypeKind_LastConstructed)
if(RADDBGI_TypeKind_FirstConstructed <= rdbg_type->kind && rdbg_type->kind <= RADDBGI_TypeKind_LastConstructed)
{
// rjf: unpack direct type
B32 direct_type_is_good = 0;
@@ -443,8 +443,8 @@ tg_type_from_graph_raddbg_key(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdbg
U64 direct_type_byte_size = 0;
if(rdbg_type->constructed.direct_type_idx < type_node_idx)
{
RADDBG_TypeNode *direct_type_node = &rdbg->type_nodes[rdbg_type->constructed.direct_type_idx];
TG_Kind direct_type_kind = tg_kind_from_raddbg_type_kind(direct_type_node->kind);
RADDBGI_TypeNode *direct_type_node = &rdbg->type_nodes[rdbg_type->constructed.direct_type_idx];
TG_Kind direct_type_kind = tg_kind_from_raddbgi_type_kind(direct_type_node->kind);
direct_type_key = tg_key_ext(direct_type_kind, (U64)rdbg_type->constructed.direct_type_idx);
direct_type_is_good = 1;
direct_type_byte_size = (U64)direct_type_node->byte_size;
@@ -453,14 +453,14 @@ tg_type_from_graph_raddbg_key(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdbg
// rjf: construct based on kind
switch(rdbg_type->kind)
{
case RADDBG_TypeKind_Modifier:
case RADDBGI_TypeKind_Modifier:
{
TG_Flags flags = 0;
if(rdbg_type->flags & RADDBG_TypeModifierFlag_Const)
if(rdbg_type->flags & RADDBGI_TypeModifierFlag_Const)
{
flags |= TG_Flag_Const;
}
if(rdbg_type->flags & RADDBG_TypeModifierFlag_Volatile)
if(rdbg_type->flags & RADDBGI_TypeModifierFlag_Volatile)
{
flags |= TG_Flag_Volatile;
}
@@ -470,9 +470,9 @@ tg_type_from_graph_raddbg_key(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdbg
type->byte_size = direct_type_byte_size;
type->flags = flags;
}break;
case RADDBG_TypeKind_Ptr:
case RADDBG_TypeKind_LRef:
case RADDBG_TypeKind_RRef:
case RADDBGI_TypeKind_Ptr:
case RADDBGI_TypeKind_LRef:
case RADDBGI_TypeKind_RRef:
{
type = push_array(arena, TG_Type, 1);
type->kind = kind;
@@ -480,7 +480,7 @@ tg_type_from_graph_raddbg_key(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdbg
type->byte_size = graph->address_size;
}break;
case RADDBG_TypeKind_Array:
case RADDBGI_TypeKind_Array:
{
type = push_array(arena, TG_Type, 1);
type->kind = kind;
@@ -488,12 +488,12 @@ tg_type_from_graph_raddbg_key(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdbg
type->count = rdbg_type->constructed.count;
type->byte_size = direct_type_byte_size * type->count;
}break;
case RADDBG_TypeKind_Function:
case RADDBGI_TypeKind_Function:
{
U32 count = rdbg_type->constructed.count;
U32 idx_run_first = rdbg_type->constructed.param_idx_run_first;
U32 check_count = 0;
U32 *idx_run = raddbg_idx_run_from_first_count(rdbg, idx_run_first, count, &check_count);
U32 *idx_run = raddbgi_idx_run_from_first_count(rdbg, idx_run_first, count, &check_count);
if(check_count == count)
{
type = push_array(arena, TG_Type, 1);
@@ -507,8 +507,8 @@ tg_type_from_graph_raddbg_key(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdbg
U32 param_type_idx = idx_run[idx];
if(param_type_idx < type_node_idx)
{
RADDBG_TypeNode *param_type_node = &rdbg->type_nodes[param_type_idx];
TG_Kind param_kind = tg_kind_from_raddbg_type_kind(param_type_node->kind);
RADDBGI_TypeNode *param_type_node = &rdbg->type_nodes[param_type_idx];
TG_Kind param_kind = tg_kind_from_raddbgi_type_kind(param_type_node->kind);
type->param_type_keys[idx] = tg_key_ext(param_kind, (U64)param_type_idx);
}
else
@@ -518,7 +518,7 @@ tg_type_from_graph_raddbg_key(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdbg
}
}
}break;
case RADDBG_TypeKind_Method:
case RADDBGI_TypeKind_Method:
{
// NOTE(rjf): for methods, the `direct` type points at the owner type.
// the return type, instead of being encoded via the `direct` type, is
@@ -526,7 +526,7 @@ tg_type_from_graph_raddbg_key(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdbg
U32 count = rdbg_type->constructed.count;
U32 idx_run_first = rdbg_type->constructed.param_idx_run_first;
U32 check_count = 0;
U32 *idx_run = raddbg_idx_run_from_first_count(rdbg, idx_run_first, count, &check_count);
U32 *idx_run = raddbgi_idx_run_from_first_count(rdbg, idx_run_first, count, &check_count);
if(check_count == count)
{
type = push_array(arena, TG_Type, 1);
@@ -540,8 +540,8 @@ tg_type_from_graph_raddbg_key(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdbg
U32 param_type_idx = idx_run[idx];
if(param_type_idx < type_node_idx)
{
RADDBG_TypeNode *param_type_node = &rdbg->type_nodes[param_type_idx];
TG_Kind param_kind = tg_kind_from_raddbg_type_kind(param_type_node->kind);
RADDBGI_TypeNode *param_type_node = &rdbg->type_nodes[param_type_idx];
TG_Kind param_kind = tg_kind_from_raddbgi_type_kind(param_type_node->kind);
type->param_type_keys[idx] = tg_key_ext(param_kind, (U64)param_type_idx);
}
else
@@ -557,14 +557,14 @@ tg_type_from_graph_raddbg_key(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdbg
}
}
}break;
case RADDBG_TypeKind_MemberPtr:
case RADDBGI_TypeKind_MemberPtr:
{
// rjf: unpack owner type
TG_Key owner_type_key = zero_struct;
if(rdbg_type->constructed.owner_type_idx < type_node_idx)
{
RADDBG_TypeNode *owner_type_node = &rdbg->type_nodes[rdbg_type->constructed.owner_type_idx];
TG_Kind owner_type_kind = tg_kind_from_raddbg_type_kind(owner_type_node->kind);
RADDBGI_TypeNode *owner_type_node = &rdbg->type_nodes[rdbg_type->constructed.owner_type_idx];
TG_Kind owner_type_kind = tg_kind_from_raddbgi_type_kind(owner_type_node->kind);
owner_type_key = tg_key_ext(owner_type_kind, (U64)rdbg_type->constructed.owner_type_idx);
}
type = push_array(arena, TG_Type, 1);
@@ -577,19 +577,19 @@ tg_type_from_graph_raddbg_key(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdbg
}
//- rjf: alias types
else if(rdbg_type->kind == RADDBG_TypeKind_Alias)
else if(rdbg_type->kind == RADDBGI_TypeKind_Alias)
{
// rjf: unpack name
String8 name = {0};
name.str = raddbg_string_from_idx(rdbg, rdbg_type->user_defined.name_string_idx, &name.size);
name.str = raddbgi_string_from_idx(rdbg, rdbg_type->user_defined.name_string_idx, &name.size);
// rjf: unpack direct type
TG_Key direct_type_key = zero_struct;
U64 direct_type_byte_size = 0;
if(rdbg_type->user_defined.direct_type_idx < type_node_idx)
{
RADDBG_TypeNode *direct_type_node = &rdbg->type_nodes[rdbg_type->user_defined.direct_type_idx];
TG_Kind direct_type_kind = tg_kind_from_raddbg_type_kind(direct_type_node->kind);
RADDBGI_TypeNode *direct_type_node = &rdbg->type_nodes[rdbg_type->user_defined.direct_type_idx];
TG_Kind direct_type_kind = tg_kind_from_raddbgi_type_kind(direct_type_node->kind);
direct_type_key = tg_key_ext(direct_type_kind, (U64)rdbg_type->user_defined.direct_type_idx);
direct_type_byte_size = direct_type_node->byte_size;
}
@@ -603,11 +603,11 @@ tg_type_from_graph_raddbg_key(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdbg
}
//- rjf: incomplete types
else if(RADDBG_TypeKind_FirstIncomplete <= rdbg_type->kind && rdbg_type->kind <= RADDBG_TypeKind_LastIncomplete)
else if(RADDBGI_TypeKind_FirstIncomplete <= rdbg_type->kind && rdbg_type->kind <= RADDBGI_TypeKind_LastIncomplete)
{
// rjf: unpack name
String8 name = {0};
name.str = raddbg_string_from_idx(rdbg, rdbg_type->user_defined.name_string_idx, &name.size);
name.str = raddbgi_string_from_idx(rdbg, rdbg_type->user_defined.name_string_idx, &name.size);
// rjf: produce
type = push_array(arena, TG_Type, 1);
@@ -790,7 +790,7 @@ tg_type_from_graph_raddbg_key(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdbg
}
internal TG_Key
tg_direct_from_graph_raddbg_key(TG_Graph *graph, RADDBG_Parsed *rdbg, TG_Key key)
tg_direct_from_graph_raddbgi_key(TG_Graph *graph, RADDBGI_Parsed *rdbg, TG_Key key)
{
TG_Key result = zero_struct;
switch(key.kind)
@@ -800,7 +800,7 @@ tg_direct_from_graph_raddbg_key(TG_Graph *graph, RADDBG_Parsed *rdbg, TG_Key key
case TG_KeyKind_Cons:
{
Temp scratch = scratch_begin(0, 0);
TG_Type *type = tg_type_from_graph_raddbg_key(scratch.arena, graph, rdbg, key);
TG_Type *type = tg_type_from_graph_raddbgi_key(scratch.arena, graph, rdbg, key);
result = type->direct_type_key;
scratch_end(scratch);
}break;
@@ -809,16 +809,16 @@ tg_direct_from_graph_raddbg_key(TG_Graph *graph, RADDBG_Parsed *rdbg, TG_Key key
}
internal TG_Key
tg_unwrapped_direct_from_graph_raddbg_key(TG_Graph *graph, RADDBG_Parsed *rdbg, TG_Key key)
tg_unwrapped_direct_from_graph_raddbgi_key(TG_Graph *graph, RADDBGI_Parsed *rdbg, TG_Key key)
{
key = tg_unwrapped_from_graph_raddbg_key(graph, rdbg, key);
key = tg_direct_from_graph_raddbg_key(graph, rdbg, key);
key = tg_unwrapped_from_graph_raddbg_key(graph, rdbg, key);
key = tg_unwrapped_from_graph_raddbgi_key(graph, rdbg, key);
key = tg_direct_from_graph_raddbgi_key(graph, rdbg, key);
key = tg_unwrapped_from_graph_raddbgi_key(graph, rdbg, key);
return key;
}
internal TG_Key
tg_owner_from_graph_raddbg_key(TG_Graph *graph, RADDBG_Parsed *rdbg, TG_Key key)
tg_owner_from_graph_raddbgi_key(TG_Graph *graph, RADDBGI_Parsed *rdbg, TG_Key key)
{
TG_Key result = zero_struct;
switch(key.kind)
@@ -828,7 +828,7 @@ tg_owner_from_graph_raddbg_key(TG_Graph *graph, RADDBG_Parsed *rdbg, TG_Key key)
case TG_KeyKind_Cons:
{
Temp scratch = scratch_begin(0, 0);
TG_Type *type = tg_type_from_graph_raddbg_key(scratch.arena, graph, rdbg, key);
TG_Type *type = tg_type_from_graph_raddbgi_key(scratch.arena, graph, rdbg, key);
result = type->owner_type_key;
scratch_end(scratch);
}break;
@@ -837,14 +837,14 @@ tg_owner_from_graph_raddbg_key(TG_Graph *graph, RADDBG_Parsed *rdbg, TG_Key key)
}
internal TG_Key
tg_ptee_from_graph_raddbg_key(TG_Graph *graph, RADDBG_Parsed *rdbg, TG_Key key)
tg_ptee_from_graph_raddbgi_key(TG_Graph *graph, RADDBGI_Parsed *rdbg, TG_Key key)
{
TG_Key result = key;
B32 passed_ptr = 0;
for(;;)
{
TG_Kind kind = tg_kind_from_key(result);
result = tg_direct_from_graph_raddbg_key(graph, rdbg, result);
result = tg_direct_from_graph_raddbgi_key(graph, rdbg, result);
if(kind == TG_Kind_Ptr || kind == TG_Kind_LRef || kind == TG_Kind_RRef)
{
passed_ptr = 1;
@@ -869,7 +869,7 @@ tg_ptee_from_graph_raddbg_key(TG_Graph *graph, RADDBG_Parsed *rdbg, TG_Key key)
}
internal TG_Key
tg_unwrapped_from_graph_raddbg_key(TG_Graph *graph, RADDBG_Parsed *rdbg, TG_Key key)
tg_unwrapped_from_graph_raddbgi_key(TG_Graph *graph, RADDBGI_Parsed *rdbg, TG_Key key)
{
TG_Key result = key;
for(B32 good = 1; good;)
@@ -879,7 +879,7 @@ tg_unwrapped_from_graph_raddbg_key(TG_Graph *graph, RADDBG_Parsed *rdbg, TG_Key
kind == TG_Kind_Modifier ||
kind == TG_Kind_Alias)
{
result = tg_direct_from_graph_raddbg_key(graph, rdbg, result);
result = tg_direct_from_graph_raddbgi_key(graph, rdbg, result);
}
else
{
@@ -890,7 +890,7 @@ tg_unwrapped_from_graph_raddbg_key(TG_Graph *graph, RADDBG_Parsed *rdbg, TG_Key
}
internal U64
tg_byte_size_from_graph_raddbg_key(TG_Graph *graph, RADDBG_Parsed *rdbg, TG_Key key)
tg_byte_size_from_graph_raddbgi_key(TG_Graph *graph, RADDBGI_Parsed *rdbg, TG_Key key)
{
U64 result = 0;
switch(key.kind)
@@ -905,7 +905,7 @@ tg_byte_size_from_graph_raddbg_key(TG_Graph *graph, RADDBG_Parsed *rdbg, TG_Key
case TG_KeyKind_Cons:
{
Temp scratch = scratch_begin(0, 0);
TG_Type *type = tg_type_from_graph_raddbg_key(scratch.arena, graph, rdbg, key);
TG_Type *type = tg_type_from_graph_raddbgi_key(scratch.arena, graph, rdbg, key);
result = type->byte_size;
scratch_end(scratch);
}break;
@@ -940,12 +940,12 @@ tg_member_copy(Arena *arena, TG_Member *src)
}
internal TG_MemberArray
tg_members_from_graph_raddbg_key(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdbg, TG_Key key)
tg_members_from_graph_raddbgi_key(Arena *arena, TG_Graph *graph, RADDBGI_Parsed *rdbg, TG_Key key)
{
TG_MemberArray result = {0};
Temp scratch = scratch_begin(&arena, 1);
{
TG_Type *type = tg_type_from_graph_raddbg_key(scratch.arena, graph, rdbg, key);
TG_Type *type = tg_type_from_graph_raddbgi_key(scratch.arena, graph, rdbg, key);
if(type->members != 0)
{
result.count = type->count;
@@ -962,7 +962,7 @@ tg_members_from_graph_raddbg_key(Arena *arena, TG_Graph *graph, RADDBG_Parsed *r
}
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_raddbgi_key(Arena *arena, TG_Graph *graph, RADDBGI_Parsed *rdbg, TG_Key key)
{
Temp scratch = scratch_begin(&arena, 1);
TG_Kind root_type_kind = tg_kind_from_key(key);
@@ -971,7 +971,7 @@ tg_data_members_from_graph_raddbg_key(Arena *arena, TG_Graph *graph, RADDBG_Pars
TG_MemberList members_list = {0};
B32 members_need_offset_sort = 0;
{
TG_Type *root_type = tg_type_from_graph_raddbg_key(scratch.arena, graph, rdbg, key);
TG_Type *root_type = tg_type_from_graph_raddbgi_key(scratch.arena, graph, rdbg, key);
typedef struct Task Task;
struct Task
{
@@ -1010,7 +1010,7 @@ tg_data_members_from_graph_raddbg_key(Arena *arena, TG_Graph *graph, RADDBG_Pars
t->inheritance_chain = tg_key_list_copy(scratch.arena, &task->inheritance_chain);
tg_key_list_push(scratch.arena, &t->inheritance_chain, type->members[member_idx].type_key);
t->type_key = type->members[member_idx].type_key;
t->type = tg_type_from_graph_raddbg_key(scratch.arena, graph, rdbg, type->members[member_idx].type_key);
t->type = tg_type_from_graph_raddbgi_key(scratch.arena, graph, rdbg, type->members[member_idx].type_key);
SLLQueuePush(first_task, last_task, t);
members_need_offset_sort = 1;
}
@@ -1059,7 +1059,7 @@ tg_data_members_from_graph_raddbg_key(Arena *arena, TG_Graph *graph, RADDBG_Pars
TG_Member *member = &members.v[idx];
if(idx+1 < members.count)
{
U64 member_byte_size = tg_byte_size_from_graph_raddbg_key(graph, rdbg, member->type_key);
U64 member_byte_size = tg_byte_size_from_graph_raddbgi_key(graph, rdbg, member->type_key);
Rng1U64 member_byte_range = r1u64(member->off, member->off + member_byte_size);
if(member[1].off > member_byte_range.max)
{
@@ -1106,7 +1106,7 @@ tg_data_members_from_graph_raddbg_key(Arena *arena, TG_Graph *graph, RADDBG_Pars
}
internal void
tg_lhs_string_from_key(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdbg, TG_Key key, String8List *out, U32 prec, B32 skip_return)
tg_lhs_string_from_key(Arena *arena, TG_Graph *graph, RADDBGI_Parsed *rdbg, TG_Key key, String8List *out, U32 prec, B32 skip_return)
{
String8 keyword = {0};
TG_Kind kind = tg_kind_from_key(key);
@@ -1115,7 +1115,7 @@ tg_lhs_string_from_key(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdbg, TG_Ke
default:
{
Temp scratch = scratch_begin(&arena, 1);
TG_Type *type = tg_type_from_graph_raddbg_key(scratch.arena, graph, rdbg, key);
TG_Type *type = tg_type_from_graph_raddbgi_key(scratch.arena, graph, rdbg, key);
str8_list_push(arena, out, push_str8_copy(arena, type->name));
str8_list_push(arena, out, str8_lit(" "));
scratch_end(scratch);
@@ -1123,14 +1123,14 @@ tg_lhs_string_from_key(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdbg, TG_Ke
case TG_Kind_Bitfield:
{
TG_Key direct = tg_direct_from_graph_raddbg_key(graph, rdbg, key);
TG_Key direct = tg_direct_from_graph_raddbgi_key(graph, rdbg, key);
tg_lhs_string_from_key(arena, graph, rdbg, direct, out, prec, skip_return);
}break;
case TG_Kind_Modifier:
{
Temp scratch = scratch_begin(&arena, 1);
TG_Type *type = tg_type_from_graph_raddbg_key(scratch.arena, graph, rdbg, key);
TG_Type *type = tg_type_from_graph_raddbgi_key(scratch.arena, graph, rdbg, key);
TG_Key direct = type->direct_type_key;
tg_lhs_string_from_key(arena, graph, rdbg, direct, out, 1, skip_return);
if(type->flags & TG_Flag_Const)
@@ -1156,7 +1156,7 @@ tg_lhs_string_from_key(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdbg, TG_Ke
case TG_Kind_Alias:
{
Temp scratch = scratch_begin(&arena, 1);
TG_Type *type = tg_type_from_graph_raddbg_key(scratch.arena, graph, rdbg, key);
TG_Type *type = tg_type_from_graph_raddbgi_key(scratch.arena, graph, rdbg, key);
str8_list_push(arena, out, push_str8_copy(arena, type->name));
str8_list_push(arena, out, str8_lit(" "));
scratch_end(scratch);
@@ -1169,7 +1169,7 @@ tg_lhs_string_from_key(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdbg, TG_Ke
fwd_udt:;
{
Temp scratch = scratch_begin(&arena, 1);
TG_Type *type = tg_type_from_graph_raddbg_key(scratch.arena, graph, rdbg, key);
TG_Type *type = tg_type_from_graph_raddbgi_key(scratch.arena, graph, rdbg, key);
str8_list_push(arena, out, keyword);
str8_list_push(arena, out, str8_lit(" "));
str8_list_push(arena, out, push_str8_copy(arena, type->name));
@@ -1179,7 +1179,7 @@ tg_lhs_string_from_key(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdbg, TG_Ke
case TG_Kind_Array:
{
TG_Key direct = tg_direct_from_graph_raddbg_key(graph, rdbg, key);
TG_Key direct = tg_direct_from_graph_raddbgi_key(graph, rdbg, key);
tg_lhs_string_from_key(arena, graph, rdbg, direct, out, 2, skip_return);
if(prec == 1)
{
@@ -1191,7 +1191,7 @@ tg_lhs_string_from_key(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdbg, TG_Ke
{
if(!skip_return)
{
TG_Key direct = tg_direct_from_graph_raddbg_key(graph, rdbg, key);
TG_Key direct = tg_direct_from_graph_raddbgi_key(graph, rdbg, key);
tg_lhs_string_from_key(arena, graph, rdbg, direct, out, 2, 0);
}
if(prec == 1)
@@ -1202,21 +1202,21 @@ tg_lhs_string_from_key(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdbg, TG_Ke
case TG_Kind_Ptr:
{
TG_Key direct = tg_direct_from_graph_raddbg_key(graph, rdbg, key);
TG_Key direct = tg_direct_from_graph_raddbgi_key(graph, rdbg, key);
tg_lhs_string_from_key(arena, graph, rdbg, direct, out, 1, skip_return);
str8_list_push(arena, out, str8_lit("*"));
}break;
case TG_Kind_LRef:
{
TG_Key direct = tg_direct_from_graph_raddbg_key(graph, rdbg, key);
TG_Key direct = tg_direct_from_graph_raddbgi_key(graph, rdbg, key);
tg_lhs_string_from_key(arena, graph, rdbg, direct, out, 1, skip_return);
str8_list_push(arena, out, str8_lit("&"));
}break;
case TG_Kind_RRef:
{
TG_Key direct = tg_direct_from_graph_raddbg_key(graph, rdbg, key);
TG_Key direct = tg_direct_from_graph_raddbgi_key(graph, rdbg, key);
tg_lhs_string_from_key(arena, graph, rdbg, direct, out, 1, skip_return);
str8_list_push(arena, out, str8_lit("&&"));
}break;
@@ -1224,10 +1224,10 @@ tg_lhs_string_from_key(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdbg, TG_Ke
case TG_Kind_MemberPtr:
{
Temp scratch = scratch_begin(&arena, 1);
TG_Type *type = tg_type_from_graph_raddbg_key(scratch.arena, graph, rdbg, key);
TG_Type *type = tg_type_from_graph_raddbgi_key(scratch.arena, graph, rdbg, key);
TG_Key direct = type->direct_type_key;
tg_lhs_string_from_key(arena, graph, rdbg, direct, out, 1, skip_return);
TG_Type *container = tg_type_from_graph_raddbg_key(scratch.arena, graph, rdbg, type->owner_type_key);
TG_Type *container = tg_type_from_graph_raddbgi_key(scratch.arena, graph, rdbg, type->owner_type_key);
if(container->kind != TG_Kind_Null)
{
str8_list_push(arena, out, push_str8_copy(arena, container->name));
@@ -1243,7 +1243,7 @@ tg_lhs_string_from_key(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdbg, TG_Ke
}
internal void
tg_rhs_string_from_key(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdbg, TG_Key key, String8List *out, U32 prec)
tg_rhs_string_from_key(Arena *arena, TG_Graph *graph, RADDBGI_Parsed *rdbg, TG_Key key, String8List *out, U32 prec)
{
TG_Kind kind = tg_kind_from_key(key);
switch(kind)
@@ -1252,7 +1252,7 @@ tg_rhs_string_from_key(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdbg, TG_Ke
case TG_Kind_Bitfield:
{
TG_Key direct = tg_direct_from_graph_raddbg_key(graph, rdbg, key);
TG_Key direct = tg_direct_from_graph_raddbgi_key(graph, rdbg, key);
tg_rhs_string_from_key(arena, graph, rdbg, direct, out, prec);
}break;
@@ -1262,14 +1262,14 @@ tg_rhs_string_from_key(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdbg, TG_Ke
case TG_Kind_RRef:
case TG_Kind_MemberPtr:
{
TG_Key direct = tg_direct_from_graph_raddbg_key(graph, rdbg, key);
TG_Key direct = tg_direct_from_graph_raddbgi_key(graph, rdbg, key);
tg_rhs_string_from_key(arena, graph, rdbg, direct, out, 1);
}break;
case TG_Kind_Array:
{
Temp scratch = scratch_begin(&arena, 1);
TG_Type *type = tg_type_from_graph_raddbg_key(scratch.arena, graph, rdbg, key);
TG_Type *type = tg_type_from_graph_raddbgi_key(scratch.arena, graph, rdbg, key);
if(prec == 1)
{
str8_list_push(arena, out, str8_lit(")"));
@@ -1278,7 +1278,7 @@ tg_rhs_string_from_key(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdbg, TG_Ke
str8_list_push(arena, out, str8_lit("["));
str8_list_push(arena, out, count_str);
str8_list_push(arena, out, str8_lit("]"));
TG_Key direct = tg_direct_from_graph_raddbg_key(graph, rdbg, key);
TG_Key direct = tg_direct_from_graph_raddbgi_key(graph, rdbg, key);
tg_rhs_string_from_key(arena, graph, rdbg, direct, out, 2);
scratch_end(scratch);
}break;
@@ -1286,7 +1286,7 @@ tg_rhs_string_from_key(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdbg, TG_Ke
case TG_Kind_Function:
{
Temp scratch = scratch_begin(&arena, 1);
TG_Type *type = tg_type_from_graph_raddbg_key(scratch.arena, graph, rdbg, key);
TG_Type *type = tg_type_from_graph_raddbgi_key(scratch.arena, graph, rdbg, key);
if(prec == 1)
{
str8_list_push(arena, out, str8_lit(")"));
@@ -1315,7 +1315,7 @@ tg_rhs_string_from_key(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdbg, TG_Ke
}
str8_list_push(arena, out, str8_lit(")"));
}
TG_Key direct = tg_direct_from_graph_raddbg_key(graph, rdbg, key);
TG_Key direct = tg_direct_from_graph_raddbgi_key(graph, rdbg, key);
tg_rhs_string_from_key(arena, graph, rdbg, direct, out, 2);
scratch_end(scratch);
}break;
@@ -1323,7 +1323,7 @@ tg_rhs_string_from_key(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdbg, TG_Ke
}
internal String8
tg_string_from_key(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdbg, TG_Key key)
tg_string_from_key(Arena *arena, TG_Graph *graph, RADDBGI_Parsed *rdbg, TG_Key key)
{
Temp scratch = scratch_begin(&arena, 1);
String8List list = {0};
+14 -14
View File
@@ -203,8 +203,8 @@ internal TG_KeyList tg_key_list_copy(Arena *arena, TG_KeyList *src);
////////////////////////////////
//~ rjf: RADDBG <-> TG Enum Conversions
internal TG_Kind tg_kind_from_raddbg_type_kind(RADDBG_TypeKind kind);
internal TG_MemberKind tg_member_kind_from_raddbg_member_kind(RADDBG_MemberKind kind);
internal TG_Kind tg_kind_from_raddbgi_type_kind(RADDBGI_TypeKind kind);
internal TG_MemberKind tg_member_kind_from_raddbgi_member_kind(RADDBGI_MemberKind kind);
////////////////////////////////
//~ rjf: Key Type Functions
@@ -225,19 +225,19 @@ internal TG_Key tg_cons_type_make(TG_Graph *graph, TG_Kind kind, TG_Key direct_t
////////////////////////////////
//~ rjf: Graph Introspection API
internal TG_Type *tg_type_from_graph_raddbg_key(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdbg, TG_Key key);
internal TG_Key tg_direct_from_graph_raddbg_key(TG_Graph *graph, RADDBG_Parsed *rdbg, TG_Key key);
internal TG_Key tg_unwrapped_direct_from_graph_raddbg_key(TG_Graph *graph, RADDBG_Parsed *rdbg, TG_Key key);
internal TG_Key tg_owner_from_graph_raddbg_key(TG_Graph *graph, RADDBG_Parsed *rdbg, TG_Key key);
internal TG_Key tg_ptee_from_graph_raddbg_key(TG_Graph *graph, RADDBG_Parsed *rdbg, TG_Key key);
internal TG_Key tg_unwrapped_from_graph_raddbg_key(TG_Graph *graph, RADDBG_Parsed *rdbg, TG_Key key);
internal U64 tg_byte_size_from_graph_raddbg_key(TG_Graph *graph, RADDBG_Parsed *rdbg, TG_Key key);
internal TG_Type *tg_type_from_graph_raddbgi_key(Arena *arena, TG_Graph *graph, RADDBGI_Parsed *rdbg, TG_Key key);
internal TG_Key tg_direct_from_graph_raddbgi_key(TG_Graph *graph, RADDBGI_Parsed *rdbg, TG_Key key);
internal TG_Key tg_unwrapped_direct_from_graph_raddbgi_key(TG_Graph *graph, RADDBGI_Parsed *rdbg, TG_Key key);
internal TG_Key tg_owner_from_graph_raddbgi_key(TG_Graph *graph, RADDBGI_Parsed *rdbg, TG_Key key);
internal TG_Key tg_ptee_from_graph_raddbgi_key(TG_Graph *graph, RADDBGI_Parsed *rdbg, TG_Key key);
internal TG_Key tg_unwrapped_from_graph_raddbgi_key(TG_Graph *graph, RADDBGI_Parsed *rdbg, TG_Key key);
internal U64 tg_byte_size_from_graph_raddbgi_key(TG_Graph *graph, RADDBGI_Parsed *rdbg, TG_Key key);
internal TG_Kind tg_kind_from_key(TG_Key key);
internal TG_Member *tg_member_copy(Arena *arena, TG_Member *src);
internal TG_MemberArray tg_members_from_graph_raddbg_key(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdbg, TG_Key key);
internal TG_MemberArray tg_data_members_from_graph_raddbg_key(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdbg, TG_Key key);
internal void tg_lhs_string_from_key(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdbg, TG_Key key, String8List *out, U32 prec, B32 skip_return);
internal void tg_rhs_string_from_key(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdbg, TG_Key key, String8List *out, U32 prec);
internal String8 tg_string_from_key(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdbg, TG_Key key);
internal TG_MemberArray tg_members_from_graph_raddbgi_key(Arena *arena, TG_Graph *graph, RADDBGI_Parsed *rdbg, TG_Key key);
internal TG_MemberArray tg_data_members_from_graph_raddbgi_key(Arena *arena, TG_Graph *graph, RADDBGI_Parsed *rdbg, TG_Key key);
internal void tg_lhs_string_from_key(Arena *arena, TG_Graph *graph, RADDBGI_Parsed *rdbg, TG_Key key, String8List *out, U32 prec, B32 skip_return);
internal void tg_rhs_string_from_key(Arena *arena, TG_Graph *graph, RADDBGI_Parsed *rdbg, TG_Key key, String8List *out, U32 prec);
internal String8 tg_string_from_key(Arena *arena, TG_Graph *graph, RADDBGI_Parsed *rdbg, TG_Key key);
#endif // TYPE_GRAPH_NEW_H