mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-08-06 22:08:41 +00:00
move member lookup paths to using eval type member cache
This commit is contained in:
+20
-26
@@ -230,37 +230,31 @@ e_member_eval_from_eval_member_name(E_Eval eval, String8 member_name)
|
|||||||
{
|
{
|
||||||
E_Eval result = {0};
|
E_Eval result = {0};
|
||||||
{
|
{
|
||||||
Temp scratch = scratch_begin(0, 0);
|
E_Member member = e_type_member_from_key_name__cached(eval.type_key, member_name);
|
||||||
E_MemberArray members = e_type_data_members_from_key(scratch.arena, eval.type_key);
|
if(member.kind != E_MemberKind_Null)
|
||||||
for(U64 member_idx = 0; member_idx < members.count; member_idx += 1)
|
|
||||||
{
|
{
|
||||||
E_Member *member = &members.v[member_idx];
|
result.mode = eval.mode;
|
||||||
if(str8_match(member->name, member_name, 0))
|
result.space = eval.space;
|
||||||
|
result.type_key = member.type_key;
|
||||||
|
result.code = eval.code;
|
||||||
|
result.msgs = eval.msgs;
|
||||||
|
switch(eval.mode)
|
||||||
{
|
{
|
||||||
result.mode = eval.mode;
|
default:{}break;
|
||||||
result.space = eval.space;
|
case E_Mode_Value:
|
||||||
result.type_key = member->type_key;
|
if(member.off < sizeof(eval.value))
|
||||||
result.code = eval.code;
|
|
||||||
result.msgs = eval.msgs;
|
|
||||||
switch(eval.mode)
|
|
||||||
{
|
{
|
||||||
default:{}break;
|
U64 member_size = e_type_byte_size_from_key(member.type_key);
|
||||||
case E_Mode_Value:
|
MemoryCopy((U8 *)(&result.value.u512[0]),
|
||||||
if(member->off < sizeof(eval.value))
|
(U8 *)(&eval.value.u512[0]) + member.off,
|
||||||
{
|
Min(member_size, sizeof(eval.value) - member.off));
|
||||||
U64 member_size = e_type_byte_size_from_key(member->type_key);
|
}break;
|
||||||
MemoryCopy((U8 *)(&result.value.u512[0]),
|
case E_Mode_Offset:
|
||||||
(U8 *)(&eval.value.u512[0]) + member->off,
|
{
|
||||||
Min(member_size, sizeof(eval.value) - member->off));
|
result.value.u64 = eval.value.u64 + member.off;
|
||||||
}break;
|
}break;
|
||||||
case E_Mode_Offset:
|
|
||||||
{
|
|
||||||
result.value.u64 = eval.value.u64 + member->off;
|
|
||||||
}break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
scratch_end(scratch);
|
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|||||||
+5
-19
@@ -523,28 +523,14 @@ e_irtree_and_type_from_expr(Arena *arena, E_Expr *expr)
|
|||||||
B32 r_is_constant_value = 0;
|
B32 r_is_constant_value = 0;
|
||||||
{
|
{
|
||||||
Temp scratch = scratch_begin(&arena, 1);
|
Temp scratch = scratch_begin(&arena, 1);
|
||||||
E_MemberArray check_type_members = e_type_data_members_from_key(scratch.arena, check_type_key);
|
E_Member match = e_type_member_from_key_name__cached(check_type_key, exprr->string);
|
||||||
E_Member *match = 0;
|
if(match.kind != E_MemberKind_Null)
|
||||||
for(U64 member_idx = 0; member_idx < check_type_members.count; member_idx += 1)
|
|
||||||
{
|
|
||||||
E_Member *member = &check_type_members.v[member_idx];
|
|
||||||
if(str8_match(member->name, exprr->string, 0))
|
|
||||||
{
|
|
||||||
match = member;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
else if(str8_match(member->name, exprr->string, StringMatchFlag_CaseInsensitive))
|
|
||||||
{
|
|
||||||
match = member;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if(match != 0)
|
|
||||||
{
|
{
|
||||||
r_found = 1;
|
r_found = 1;
|
||||||
r_type = match->type_key;
|
r_type = match.type_key;
|
||||||
r_value = match->off;
|
r_value = match.off;
|
||||||
}
|
}
|
||||||
if(match == 0)
|
if(match.kind == E_MemberKind_Null)
|
||||||
{
|
{
|
||||||
E_Type *type = e_type_from_key(scratch.arena, check_type_key);
|
E_Type *type = e_type_from_key(scratch.arena, check_type_key);
|
||||||
if(type->enum_vals != 0)
|
if(type->enum_vals != 0)
|
||||||
|
|||||||
@@ -1874,7 +1874,7 @@ e_type_member_from_key_name__cached(E_TypeKey key, String8 name)
|
|||||||
{
|
{
|
||||||
E_Member result = {0};
|
E_Member result = {0};
|
||||||
E_MemberCacheNode *node = e_member_cache_node_from_type_key(key);
|
E_MemberCacheNode *node = e_member_cache_node_from_type_key(key);
|
||||||
if(node != 0)
|
if(node != 0 && node->member_hash_slots_count != 0)
|
||||||
{
|
{
|
||||||
U64 hash = e_hash_from_string(5381, name);
|
U64 hash = e_hash_from_string(5381, name);
|
||||||
U64 slot_idx = hash%node->member_hash_slots_count;
|
U64 slot_idx = hash%node->member_hash_slots_count;
|
||||||
|
|||||||
@@ -134,7 +134,9 @@ EV_VIEW_RULE_EXPR_EXPAND_INFO_FUNCTION_DEF(default)
|
|||||||
direct_type_kind == E_TypeKind_Union ||
|
direct_type_kind == E_TypeKind_Union ||
|
||||||
direct_type_kind == E_TypeKind_Class)))
|
direct_type_kind == E_TypeKind_Class)))
|
||||||
{
|
{
|
||||||
accel->members = e_type_data_members_from_key__cached(e_type_kind_is_pointer_or_ref(type_kind) ? direct_type_key : type_key);
|
E_TypeKey struct_type_key = e_type_kind_is_pointer_or_ref(type_kind) ? direct_type_key : type_key;
|
||||||
|
E_Type *struct_type = e_type_from_key(scratch.arena, struct_type_key);
|
||||||
|
accel->members = e_type_data_members_from_key__cached(struct_type_key);
|
||||||
total_row_count = accel->members.count;
|
total_row_count = accel->members.count;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -297,7 +299,7 @@ EV_VIEW_RULE_EXPR_RESOLUTION_FUNCTION_DEF(slice)
|
|||||||
if(type_kind == E_TypeKind_Struct || type_kind == E_TypeKind_Class)
|
if(type_kind == E_TypeKind_Struct || type_kind == E_TypeKind_Class)
|
||||||
{
|
{
|
||||||
// rjf: unpack members
|
// rjf: unpack members
|
||||||
E_MemberArray members = e_type_data_members_from_key(scratch.arena, irtree.type_key);
|
E_MemberArray members = e_type_data_members_from_key__cached(irtree.type_key);
|
||||||
|
|
||||||
// rjf: choose base pointer & count members
|
// rjf: choose base pointer & count members
|
||||||
E_Member *base_ptr_member = 0;
|
E_Member *base_ptr_member = 0;
|
||||||
@@ -391,7 +393,7 @@ EV_VIEW_RULE_EXPR_RESOLUTION_FUNCTION_DEF(only)
|
|||||||
E_TypeKind type_kind = e_type_kind_from_key(irtree.type_key);
|
E_TypeKind type_kind = e_type_kind_from_key(irtree.type_key);
|
||||||
if(type_kind == E_TypeKind_Struct || type_kind == E_TypeKind_Union || type_kind == E_TypeKind_Class)
|
if(type_kind == E_TypeKind_Struct || type_kind == E_TypeKind_Union || type_kind == E_TypeKind_Class)
|
||||||
{
|
{
|
||||||
E_MemberArray current_members = e_type_data_members_from_key(scratch.arena, irtree.type_key);
|
E_MemberArray current_members = e_type_data_members_from_key__cached(irtree.type_key);
|
||||||
E_MemberList new_members = {0};
|
E_MemberList new_members = {0};
|
||||||
for MD_EachNode(node, params->first)
|
for MD_EachNode(node, params->first)
|
||||||
{
|
{
|
||||||
@@ -433,7 +435,7 @@ EV_VIEW_RULE_EXPR_RESOLUTION_FUNCTION_DEF(omit)
|
|||||||
E_TypeKind type_kind = e_type_kind_from_key(irtree.type_key);
|
E_TypeKind type_kind = e_type_kind_from_key(irtree.type_key);
|
||||||
if(type_kind == E_TypeKind_Struct || type_kind == E_TypeKind_Union || type_kind == E_TypeKind_Class)
|
if(type_kind == E_TypeKind_Struct || type_kind == E_TypeKind_Union || type_kind == E_TypeKind_Class)
|
||||||
{
|
{
|
||||||
E_MemberArray current_members = e_type_data_members_from_key(scratch.arena, irtree.type_key);
|
E_MemberArray current_members = e_type_data_members_from_key__cached(irtree.type_key);
|
||||||
E_MemberList new_members = {0};
|
E_MemberList new_members = {0};
|
||||||
for EachIndex(idx, current_members.count)
|
for EachIndex(idx, current_members.count)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -8932,7 +8932,7 @@ rd_append_value_strings_from_eval(Arena *arena, EV_StringFlags flags, U32 defaul
|
|||||||
// rjf: content
|
// rjf: content
|
||||||
if(depth < 4)
|
if(depth < 4)
|
||||||
{
|
{
|
||||||
E_MemberArray data_members = e_type_data_members_from_key(scratch.arena, e_type_unwrap(eval.type_key));
|
E_MemberArray data_members = e_type_data_members_from_key__cached(e_type_unwrap(eval.type_key));
|
||||||
for(U64 member_idx = 0; member_idx < data_members.count && max_size > space_taken; member_idx += 1)
|
for(U64 member_idx = 0; member_idx < data_members.count && max_size > space_taken; member_idx += 1)
|
||||||
{
|
{
|
||||||
E_Member *mem = &data_members.v[member_idx];
|
E_Member *mem = &data_members.v[member_idx];
|
||||||
|
|||||||
Reference in New Issue
Block a user