mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-07-16 14:31:24 -07:00
checkpoint on eval / eval-viz simplification pass
This commit is contained in:
@@ -282,3 +282,43 @@ e_element_eval_from_array_eval_index(E_Eval eval, U64 index)
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
internal E_Eval
|
||||
e_member_eval_from_eval_member_name(E_Eval eval, String8 member_name)
|
||||
{
|
||||
E_Eval result = {0};
|
||||
{
|
||||
Temp scratch = scratch_begin(0, 0);
|
||||
E_MemberArray members = e_type_data_members_from_key(scratch.arena, eval.type_key);
|
||||
for(U64 member_idx = 0; member_idx < members.count; member_idx += 1)
|
||||
{
|
||||
E_Member *member = &members.v[member_idx];
|
||||
if(str8_match(member->name, member_name, 0))
|
||||
{
|
||||
result.mode = eval.mode;
|
||||
result.space = eval.space;
|
||||
result.type_key = member->type_key;
|
||||
result.code = eval.code;
|
||||
result.msgs = eval.msgs;
|
||||
switch(eval.mode)
|
||||
{
|
||||
default:{}break;
|
||||
case E_Mode_Value:
|
||||
if(member->off < sizeof(eval.value))
|
||||
{
|
||||
U64 member_size = e_type_byte_size_from_key(member->type_key);
|
||||
MemoryCopy((U8 *)(&result.value.u512[0]),
|
||||
(U8 *)(&eval.value.u512[0]) + member->off,
|
||||
Min(member_size, sizeof(eval.value) - member->off));
|
||||
}break;
|
||||
case E_Mode_Offset:
|
||||
{
|
||||
result.value.u64 = eval.value.u64 + member->off;
|
||||
}break;
|
||||
}
|
||||
}
|
||||
}
|
||||
scratch_end(scratch);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -27,5 +27,6 @@ internal E_Eval e_autoresolved_eval_from_eval(E_Eval eval);
|
||||
internal E_Eval e_dynamically_typed_eval_from_eval(E_Eval eval);
|
||||
internal E_Eval e_value_eval_from_eval(E_Eval eval);
|
||||
internal E_Eval e_element_eval_from_array_eval_index(E_Eval eval, U64 index);
|
||||
internal E_Eval e_member_eval_from_eval_member_name(E_Eval eval, String8 member_name);
|
||||
|
||||
#endif // EVAL_BUNDLES_H
|
||||
|
||||
@@ -157,7 +157,7 @@ e_type_kind_is_basic_or_enum(E_TypeKind kind)
|
||||
}
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Member List Building Functions
|
||||
//~ rjf: Member Functions
|
||||
|
||||
internal void
|
||||
e_member_list_push(Arena *arena, E_MemberList *list, E_Member *member)
|
||||
|
||||
@@ -212,7 +212,7 @@ internal B32 e_type_kind_is_signed(E_TypeKind kind);
|
||||
internal B32 e_type_kind_is_basic_or_enum(E_TypeKind kind);
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Member List Building Functions
|
||||
//~ rjf: Member Functions
|
||||
|
||||
internal void e_member_list_push(Arena *arena, E_MemberList *list, E_Member *member);
|
||||
#define e_member_list_push_new(arena, list, ...) e_member_list_push((arena), (list), &(E_Member){.kind = E_MemberKind_DataField, __VA_ARGS__})
|
||||
|
||||
Reference in New Issue
Block a user