eliminate unnecessary complication for debugger query evaluations; formalize them in the schemas, use set-hook rule to automatically plug in querying functions for them

This commit is contained in:
Ryan Fleury
2025-02-15 14:52:40 -08:00
parent 404ad620ef
commit b7f6b301ec
9 changed files with 109 additions and 355 deletions
+7 -1
View File
@@ -221,6 +221,7 @@ E_LOOKUP_ACCESS_FUNCTION_DEF(default)
B32 r_found = 0;
E_TypeKey r_type = zero_struct;
U64 r_value = 0;
String8 r_query_name = {0};
B32 r_is_constant_value = 0;
{
Temp scratch = scratch_begin(&arena, 1);
@@ -231,6 +232,10 @@ E_LOOKUP_ACCESS_FUNCTION_DEF(default)
r_type = match.type_key;
r_value = match.off;
}
if(match.kind == E_MemberKind_Query)
{
r_query_name = exprr->string;
}
if(match.kind == E_MemberKind_Null)
{
E_Type *type = e_type_from_key__cached(check_type_key);
@@ -290,6 +295,7 @@ E_LOOKUP_ACCESS_FUNCTION_DEF(default)
{
// rjf: build tree
E_IRNode *new_tree = l.root;
E_TypeKey new_tree_type = r_type;
E_Mode mode = l.mode;
if(l_restype_kind == E_TypeKind_Ptr ||
l_restype_kind == E_TypeKind_LRef ||
@@ -625,7 +631,7 @@ E_IRGEN_FUNCTION_DEF(slice)
E_TypeKey sized_base_ptr_type_key = e_type_key_cons_ptr(e_type_state->ctx->primary_module->arch, element_type_key, count, 0);
E_MemberList slice_type_members = {0};
e_member_list_push(scratch.arena, &slice_type_members, count_member);
e_member_list_push(scratch.arena, &slice_type_members, &(E_Member){.kind = E_MemberKind_DataField, .type_key = sized_base_ptr_type_key, .name = base_ptr_member->name, .pretty_name = base_ptr_member->pretty_name, .off = base_ptr_member->off});
e_member_list_push(scratch.arena, &slice_type_members, &(E_Member){.kind = E_MemberKind_DataField, .type_key = sized_base_ptr_type_key, .name = base_ptr_member->name, .off = base_ptr_member->off});
E_MemberArray slice_type_members_array = e_member_array_from_list(scratch.arena, &slice_type_members);
slice_type_key = e_type_key_cons(.arch = e_type_state->ctx->primary_module->arch,
.kind = E_TypeKind_Struct,
+1 -2
View File
@@ -501,7 +501,7 @@ e_type_key_cons_base(Type *type)
for(U64 idx = 0; idx < type->count; idx += 1)
{
E_TypeKey member_type_key = e_type_key_cons_base(type->members[idx].type);
e_member_list_push_new(scratch.arena, &members, .name = type->members[idx].name, .off = type->members[idx].value, .type_key = member_type_key, .pretty_name = type->members[idx].pretty_name);
e_member_list_push_new(scratch.arena, &members, .name = type->members[idx].name, .off = type->members[idx].value, .type_key = member_type_key);
}
E_MemberArray members_array = e_member_array_from_list(scratch.arena, &members);
result = e_type_key_cons(.arch = arch_from_context(),
@@ -1413,7 +1413,6 @@ e_type_member_copy(Arena *arena, E_Member *src)
E_Member *dst = push_array(arena, E_Member, 1);
MemoryCopyStruct(dst, src);
dst->name = push_str8_copy(arena, src->name);
dst->pretty_name = push_str8_copy(arena, src->pretty_name);
dst->inheritance_key_chain = e_type_key_list_copy(arena, &src->inheritance_key_chain);
return dst;
}
+1 -1
View File
@@ -59,6 +59,7 @@ typedef enum E_MemberKind
E_MemberKind_VirtualBase,
E_MemberKind_NestedType,
E_MemberKind_Padding,
E_MemberKind_Query,
E_MemberKind_COUNT
}
E_MemberKind;
@@ -80,7 +81,6 @@ struct E_Member
E_MemberKind kind;
E_TypeKey type_key;
String8 name;
String8 pretty_name;
U64 off;
E_TypeKeyList inheritance_key_chain;
};