diff --git a/project.4coder b/project.4coder index 888697b1..767c54a9 100644 --- a/project.4coder +++ b/project.4coder @@ -46,7 +46,7 @@ load_paths = commands = { //- rjf: fkey command slots (change locally but do not commit) - .f1 = { .win = "build ryan_scratch", .linux = "", .out = "*compilation*", .footer_panel = true, .save_dirty_files = true, .cursor_at_end = false, }, + .f1 = { .win = "build raddbg telemetry", .linux = "", .out = "*compilation*", .footer_panel = true, .save_dirty_files = true, .cursor_at_end = false, }, .f2 = { .win = "build rdi_from_pdb", .linux = "", .out = "*compilation*", .footer_panel = true, .save_dirty_files = true, .cursor_at_end = false, }, .f3 = { .win = "pushd build && raddbg.exe --user:local_dev.raddbg_user --project:local_dev.raddbg_project --auto_step && popd",.linux = "", .out = "*compilation*", .footer_panel = true, .save_dirty_files = true, .cursor_at_end = false, }, diff --git a/src/base/base_meta.c b/src/base/base_meta.c index b9b8f8a6..2ca10816 100644 --- a/src/base/base_meta.c +++ b/src/base/base_meta.c @@ -343,3 +343,13 @@ deserialized_from_typed_data(Arena *arena, Type *type, String8 data, TypeSeriali } return result; } + +internal String8 +deep_copy_from_typed_data(Arena *arena, Type *type, String8 data, TypeSerializeParams *params) +{ + Temp scratch = scratch_begin(&arena, 1); + String8 data_srlz = serialized_from_typed_data(scratch.arena, type, data, params); + String8 data_copy = deserialized_from_typed_data(arena, type, data_srlz, params); + scratch_end(scratch); + return data_copy; +} diff --git a/src/base/base_meta.h b/src/base/base_meta.h index f27533b5..5f01627a 100644 --- a/src/base/base_meta.h +++ b/src/base/base_meta.h @@ -63,12 +63,6 @@ struct EmbedInfoTable //////////////////////////////// //~ rjf: Type Info Types -typedef U32 TypeFlags; -enum -{ - TypeFlag_Indexified = (1<<0), -}; - typedef enum TypeKind { TypeKind_Null, @@ -123,7 +117,6 @@ typedef struct Type Type; struct Type { TypeKind kind; - TypeFlags flags; U64 size; Type *direct; String8 name; @@ -156,46 +149,96 @@ struct TypeSerializeParams #define type(T) &(T##__type) +//////////////////////////////// +//~ rjf: Type Info Table Initializer Helpers + +#define member_lit_comp(S, T, m, ...) {str8_lit_comp(#m), type(T), OffsetOf(S, m), __VA_ARGS__} +#define struct_members(S) read_only global Member S##__members[] = +#define struct_type(S) read_only global Type S##__type = {TypeKind_Struct, sizeof(S), &type_nil, str8_lit_comp(#S), {0}, ArrayCount(S##__members), S##__members} +#define ptr_type(name, t, ...) read_only global Type name = {TypeKind_Ptr, sizeof(void *), (t), __VA_ARGS__} + //////////////////////////////// //~ rjf: Globals -read_only global Type type_nil = {TypeKind_Null, 0, 0, &type_nil}; -read_only global Type void__type = {TypeKind_Void, 0, 0, &type_nil, str8_lit_comp("void")}; -read_only global Type U8__type = {TypeKind_U8, 0, sizeof(U8), &type_nil, str8_lit_comp("U8")}; -read_only global Type U16__type = {TypeKind_U16, 0, sizeof(U16), &type_nil, str8_lit_comp("U16")}; -read_only global Type U32__type = {TypeKind_U32, 0, sizeof(U32), &type_nil, str8_lit_comp("U32")}; -read_only global Type U64__type = {TypeKind_U64, 0, sizeof(U64), &type_nil, str8_lit_comp("U64")}; -read_only global Type S8__type = {TypeKind_S8, 0, sizeof(S8), &type_nil, str8_lit_comp("S8")}; -read_only global Type S16__type = {TypeKind_S16, 0, sizeof(S16), &type_nil, str8_lit_comp("S16")}; -read_only global Type S32__type = {TypeKind_S32, 0, sizeof(S32), &type_nil, str8_lit_comp("S32")}; -read_only global Type S64__type = {TypeKind_S64, 0, sizeof(S64), &type_nil, str8_lit_comp("S64")}; -read_only global Type B8__type = {TypeKind_B8, 0, sizeof(B8), &type_nil, str8_lit_comp("B8")}; -read_only global Type B16__type = {TypeKind_B16, 0, sizeof(B16), &type_nil, str8_lit_comp("B16")}; -read_only global Type B32__type = {TypeKind_B32, 0, sizeof(B32), &type_nil, str8_lit_comp("B32")}; -read_only global Type B64__type = {TypeKind_B64, 0, sizeof(B64), &type_nil, str8_lit_comp("B64")}; -read_only global Type F32__type = {TypeKind_F32, 0, sizeof(F32), &type_nil, str8_lit_comp("F32")}; -read_only global Type F64__type = {TypeKind_F64, 0, sizeof(F64), &type_nil, str8_lit_comp("F64")}; -read_only global Type *type_leaves[] = -{ - &type_nil, - type(void), - type(U8), - type(U16), - type(U32), - type(U64), - type(S8), - type(S16), - type(S32), - type(S64), - type(B8), - type(B16), - type(B32), - type(B64), - type(F32), - type(F64), -}; +read_only global Type type_nil = {TypeKind_Null, 0, &type_nil}; read_only global Member member_nil = {{0}, &type_nil}; +//////////////////////////////// +//~ rjf: Built-In Types + +//- rjf: leaves +read_only global Type void__type = {TypeKind_Void, 0, &type_nil, str8_lit_comp("void")}; +read_only global Type U8__type = {TypeKind_U8, sizeof(U8), &type_nil, str8_lit_comp("U8")}; +read_only global Type U16__type = {TypeKind_U16, sizeof(U16), &type_nil, str8_lit_comp("U16")}; +read_only global Type U32__type = {TypeKind_U32, sizeof(U32), &type_nil, str8_lit_comp("U32")}; +read_only global Type U64__type = {TypeKind_U64, sizeof(U64), &type_nil, str8_lit_comp("U64")}; +read_only global Type S8__type = {TypeKind_S8, sizeof(S8), &type_nil, str8_lit_comp("S8")}; +read_only global Type S16__type = {TypeKind_S16, sizeof(S16), &type_nil, str8_lit_comp("S16")}; +read_only global Type S32__type = {TypeKind_S32, sizeof(S32), &type_nil, str8_lit_comp("S32")}; +read_only global Type S64__type = {TypeKind_S64, sizeof(S64), &type_nil, str8_lit_comp("S64")}; +read_only global Type B8__type = {TypeKind_B8, sizeof(B8), &type_nil, str8_lit_comp("B8")}; +read_only global Type B16__type = {TypeKind_B16, sizeof(B16), &type_nil, str8_lit_comp("B16")}; +read_only global Type B32__type = {TypeKind_B32, sizeof(B32), &type_nil, str8_lit_comp("B32")}; +read_only global Type B64__type = {TypeKind_B64, sizeof(B64), &type_nil, str8_lit_comp("B64")}; +read_only global Type F32__type = {TypeKind_F32, sizeof(F32), &type_nil, str8_lit_comp("F32")}; +read_only global Type F64__type = {TypeKind_F64, sizeof(F64), &type_nil, str8_lit_comp("F64")}; + +//- rjf: String8 +Type String8__str_ptr_type = {TypeKind_Ptr, sizeof(void *), type(U8), {0}, str8_lit_comp("size")}; +Member String8__members[] = +{ + {str8_lit_comp("str"), &String8__str_ptr_type, OffsetOf(String8, str)}, + {str8_lit_comp("size"), type(U64), OffsetOf(String8, size)}, +}; +Type String8__type = +{ + TypeKind_Struct, + sizeof(String8), + &type_nil, + str8_lit_comp("String8"), + {0}, + ArrayCount(String8__members), + String8__members, +}; + +//- rjf: String8Node +extern Type String8Node__type; +Type String8Node__ptr_type = {TypeKind_Ptr, sizeof(void *), &String8Node__type}; +Member String8Node__members[] = +{ + {str8_lit_comp("next"), &String8Node__ptr_type, OffsetOf(String8Node, next)}, + {str8_lit_comp("string"), type(String8), OffsetOf(String8Node, string)}, +}; +Type String8Node__type = +{ + TypeKind_Struct, + sizeof(String8Node), + &type_nil, + str8_lit_comp("String8Node"), + {0}, + ArrayCount(String8Node__members), + String8Node__members, +}; + +//- rjf: String8List +Member String8List__members[] = +{ + {str8_lit_comp("first"), &String8Node__ptr_type, OffsetOf(String8List, first)}, + {str8_lit_comp("last"), &String8Node__ptr_type, OffsetOf(String8List, last), MemberFlag_DoNotSerialize}, + {str8_lit_comp("node_count"), type(U64), OffsetOf(String8List, node_count)}, + {str8_lit_comp("total_size"), type(U64), OffsetOf(String8List, total_size)}, +}; +Type String8List__type = +{ + TypeKind_Struct, + sizeof(String8List), + &type_nil, + str8_lit_comp("String8List"), + {0}, + ArrayCount(String8List__members), + String8List__members, +}; + //////////////////////////////// //~ rjf: Type Info Lookups @@ -206,7 +249,9 @@ internal Member *member_from_name(Type *type, String8 name); internal String8 serialized_from_typed_data(Arena *arena, Type *type, String8 data, TypeSerializeParams *params); internal String8 deserialized_from_typed_data(Arena *arena, Type *type, String8 data, TypeSerializeParams *params); +internal String8 deep_copy_from_typed_data(Arena *arena, Type *type, String8 data, TypeSerializeParams *params); #define serialized_from_struct(arena, T, ptr, ...) serialized_from_typed_data((arena), type(T), str8_struct(ptr), &(TypeSerializeParams){.ptr_ref_infos = 0, __VA_ARGS__}) #define struct_from_serialized(arena, T, string, ...) (T *)deserialized_from_typed_data((arena), type(T), (string), &(TypeSerializeParams){.ptr_ref_infos = 0, __VA_ARGS__}).str +#define deep_copy_from_struct(arena, T, ptr, ...) (T *)deep_copy_from_typed_data((arena), type(T), str8_struct(ptr), &(TypeSerializeParams){.ptr_ref_infos = 0, __VA_ARGS__}).str #endif // BASE_META_H diff --git a/src/ctrl/ctrl.mdesk b/src/ctrl/ctrl.mdesk index 346bb79f..cf9f33ec 100644 --- a/src/ctrl/ctrl.mdesk +++ b/src/ctrl/ctrl.mdesk @@ -1,72 +1,6 @@ // Copyright (c) 2024 Epic Games Tools // Licensed under the MIT license (https://opensource.org/license/mit/) -//////////////////////////////// -//~ rjf: Meta Evaluation Type Information - -@table(name info_type eval_type dynamic_kind) -CTRL_MetaEvalMemberTable: -{ - {enabled S32 S32 } - {frozen S32 S32 } - {hit_count U64 U64 } - {id U64 U64 } - {color U32 U32 } - {label String8 U64 String8 } - {location String8 U64 String8 } - {condition String8 U64 String8 } - {callstack CTRL_MetaEvalFrameArray U64 FrameArray } -} - -@struct CTRL_MetaEvalFrameArray: -{ - `U64 *frames`; - `U64 count`; -} - -@enum CTRL_MetaEvalDynamicKind: -{ - Null, - String8, - FrameArray, - COUNT -} - -@struct CTRL_MetaEvalInfo: -{ - @expand(CTRL_MetaEvalMemberTable a) `$(a.info_type) $(a.name)` -} - -@struct CTRL_MetaEval: -{ - @expand(CTRL_MetaEvalMemberTable a) `$(a.eval_type) $(a.name)` -} - -@data(String8) ctrl_meta_eval_member_name_table: -{ - @expand(CTRL_MetaEvalMemberTable a) `str8_lit_comp("$(a.name)")` -} - -@data(Rng1U64) ctrl_meta_eval_info_member_range_table: -{ - @expand(CTRL_MetaEvalMemberTable a) `{OffsetOf(CTRL_MetaEvalInfo, $(a.name)), OffsetOf(CTRL_MetaEvalInfo, $(a.name)) + sizeof($(a.info_type))}` -} - -@data(Rng1U64) ctrl_meta_eval_member_range_table: -{ - @expand(CTRL_MetaEvalMemberTable a) `{OffsetOf(CTRL_MetaEval, $(a.name)), OffsetOf(CTRL_MetaEval, $(a.name)) + sizeof($(a.eval_type))}` -} - -@data(E_TypeKind) ctrl_meta_eval_member_type_kind_table: -{ - @expand(CTRL_MetaEvalMemberTable a) `E_TypeKind_$(a.eval_type)` -} - -@data(CTRL_MetaEvalDynamicKind) ctrl_meta_eval_member_dynamic_kind_table: -{ - @expand(CTRL_MetaEvalMemberTable a) `$(a.dynamic_kind != '' -> 'CTRL_MetaEvalDynamicKind_'..a.dynamic_kind)$(a.dynamic_kind == '' -> 'CTRL_MetaEvalDynamicKind_Null')` -} - //////////////////////////////// //~ rjf: Entity Kinds diff --git a/src/ctrl/ctrl_core.c b/src/ctrl/ctrl_core.c index b5c9db72..88f929ea 100644 --- a/src/ctrl/ctrl_core.c +++ b/src/ctrl/ctrl_core.c @@ -185,68 +185,6 @@ ctrl_user_breakpoint_list_copy(Arena *arena, CTRL_UserBreakpointList *src) return dst; } -//////////////////////////////// -//~ rjf: Meta Evaluation Type Functions - -internal CTRL_MetaEval * -ctrl_meta_eval_from_info(Arena *arena, CTRL_MetaEvalInfo *info) -{ - CTRL_MetaEval *eval = push_array(arena, CTRL_MetaEval, 1); - { - for(U64 idx = 0; idx < ArrayCount(ctrl_meta_eval_info_member_range_table); idx += 1) - { - switch(ctrl_meta_eval_member_dynamic_kind_table[idx]) - { - default: - case CTRL_MetaEvalDynamicKind_Null: - { - MemoryCopy((U8 *)eval + ctrl_meta_eval_member_range_table[idx].min, - (U8 *)info + ctrl_meta_eval_info_member_range_table[idx].min, - dim_1u64(ctrl_meta_eval_member_range_table[idx])); - }break; - case CTRL_MetaEvalDynamicKind_String8: - { - String8 string = *(String8 *)((U8 *)info + ctrl_meta_eval_info_member_range_table[idx].min); - String8 string_copy = push_str8_copy(arena, string); - U64 off = (string_copy.str - (U8 *)eval); - MemoryCopy((U8 *)eval + ctrl_meta_eval_member_range_table[idx].min, &off, sizeof(U64)); - }break; - case CTRL_MetaEvalDynamicKind_FrameArray: - { - - }break; - } - } - } - return eval; -} - -internal CTRL_MetaEvalInfoArray -ctrl_meta_eval_info_array_copy(Arena *arena, CTRL_MetaEvalInfoArray *src) -{ - CTRL_MetaEvalInfoArray dst = {0}; - dst.count = src->count; - dst.v = push_array(arena, CTRL_MetaEvalInfo, dst.count); - MemoryCopy(dst.v, src->v, sizeof(dst.v[0])*dst.count); - for(U64 idx = 0; idx < dst.count; idx += 1) - { - for(U64 member_idx = 0; member_idx < ArrayCount(ctrl_meta_eval_info_member_range_table); member_idx += 1) - { - switch(ctrl_meta_eval_member_dynamic_kind_table[member_idx]) - { - default:{}break; - case CTRL_MetaEvalDynamicKind_String8: - { - String8 string = *(String8 *)((U8 *)(&dst.v[idx]) + ctrl_meta_eval_info_member_range_table[member_idx].min); - String8 string_copy = push_str8_copy(arena, string); - MemoryCopy((U8 *)(&dst.v[idx]) + ctrl_meta_eval_info_member_range_table[member_idx].min, &string_copy, sizeof(String8)); - }break; - } - } - } - return dst; -} - //////////////////////////////// //~ rjf: Message Type Functions @@ -262,7 +200,7 @@ ctrl_msg_deep_copy(Arena *arena, CTRL_Msg *dst, CTRL_Msg *src) dst->env_string_list = str8_list_copy(arena, &src->env_string_list); dst->traps = ctrl_trap_list_copy(arena, &src->traps); dst->user_bps = ctrl_user_breakpoint_list_copy(arena, &src->user_bps); - dst->meta_eval_infos = ctrl_meta_eval_info_array_copy(arena, &src->meta_eval_infos); + dst->meta_evals = *deep_copy_from_struct(arena, CTRL_MetaEvalArray, &src->meta_evals); } //- rjf: list building @@ -386,6 +324,9 @@ ctrl_serialized_string_from_msg_list(Arena *arena, CTRL_MsgList *msgs) } // rjf: write meta-eval-info array + String8 meta_evals_srlzed = serialized_from_struct(scratch.arena, CTRL_MetaEvalArray, &msg->meta_evals); + str8_serial_push_string(scratch.arena, &msgs_srlzed, meta_evals_srlzed); +#if 0 str8_serial_push_struct(scratch.arena, &msgs_srlzed, &msg->meta_eval_infos.count); for(U64 idx = 0; idx < msg->meta_eval_infos.count; idx += 1) { @@ -408,6 +349,7 @@ ctrl_serialized_string_from_msg_list(Arena *arena, CTRL_MsgList *msgs) } } } +#endif } } String8 string = str8_serial_end(arena, &msgs_srlzed); @@ -521,6 +463,9 @@ ctrl_msg_list_from_serialized_string(Arena *arena, String8 string) } // rjf: read meta-eval-info array + String8 meta_evals_srlzed = str8_skip(string, read_off); + msg->meta_evals = *struct_from_serialized(arena, CTRL_MetaEvalArray, meta_evals_srlzed); +#if 0 read_off += str8_deserial_read_struct(string, read_off, &msg->meta_eval_infos.count); msg->meta_eval_infos.v = push_array(arena, CTRL_MetaEvalInfo, msg->meta_eval_infos.count); for(U64 idx = 0; idx < msg->meta_eval_infos.count; idx += 1) @@ -547,6 +492,7 @@ ctrl_msg_list_from_serialized_string(Arena *arena, String8 string) } } } +#endif } } return msgs; @@ -1259,39 +1205,6 @@ ctrl_entity_store_apply_events(CTRL_EntityStore *store, CTRL_EventList *list) } } -//////////////////////////////// -//~ rjf: Meta-Eval Functions - -internal E_TypeKey -ctrl_meta_eval_type_key(void) -{ - Temp scratch = scratch_begin(0, 0); - E_MemberList members = {0}; - { - for(U64 idx = 0; idx < ArrayCount(ctrl_meta_eval_member_range_table); idx += 1) - { - E_TypeKey member_type_key = e_type_key_basic(ctrl_meta_eval_member_type_kind_table[idx]); - switch(ctrl_meta_eval_member_dynamic_kind_table[idx]) - { - default:{}break; - case CTRL_MetaEvalDynamicKind_String8: - { - member_type_key = e_type_key_cons_ptr(arch_from_context(), e_type_key_basic(E_TypeKind_Char8)); - }break; - } - e_member_list_push_new(scratch.arena, &members, .name = ctrl_meta_eval_member_name_table[idx], .off = ctrl_meta_eval_member_range_table[idx].min, .type_key = member_type_key); - } - } - E_MemberArray members_array = e_member_array_from_list(scratch.arena, &members); - E_TypeKey meta_eval_type_key = e_type_key_cons(.arch = arch_from_context(), - .kind = E_TypeKind_Struct, - .name = str8_lit("Meta"), - .members = members_array.v, - .count = members_array.count); - scratch_end(scratch); - return meta_eval_type_key; -} - //////////////////////////////// //~ rjf: Main Layer Initialization diff --git a/src/ctrl/ctrl_core.h b/src/ctrl/ctrl_core.h index 8809e808..698c5790 100644 --- a/src/ctrl/ctrl_core.h +++ b/src/ctrl/ctrl_core.h @@ -12,6 +12,49 @@ typedef U64 CTRL_MachineID; #define CTRL_MachineID_Local (1) +//////////////////////////////// +//~ rjf: Meta Evaluation Types + +//- rjf: meta evaluation instance +typedef struct CTRL_MetaEval CTRL_MetaEval; +struct CTRL_MetaEval +{ +#define CTRL_MetaEval_MemberXList \ +X(B32, enabled)\ +X(B32, frozen)\ +X(U64, hit_count)\ +X(U64, id)\ +X(U32, color)\ +X(String8, label)\ +X(String8, location)\ +X(String8, condition) +#define X(type, name) type name; + CTRL_MetaEval_MemberXList +#undef X +}; +struct_members(CTRL_MetaEval) +{ +#define X(type, name) member_lit_comp(CTRL_MetaEval, type, name), + CTRL_MetaEval_MemberXList +#undef X +}; +struct_type(CTRL_MetaEval); + +//- rjf: meta evaluation array +typedef struct CTRL_MetaEvalArray CTRL_MetaEvalArray; +struct CTRL_MetaEvalArray +{ + CTRL_MetaEval *v; + U64 count; +}; +ptr_type(CTRL_MetaEvalArray__v_ptr_type, type(CTRL_MetaEval), .count_delimiter_name = str8_lit_comp("count")); +struct_members(CTRL_MetaEvalArray) +{ + {str8_lit_comp("v"), &CTRL_MetaEvalArray__v_ptr_type, OffsetOf(CTRL_MetaEvalArray, v)}, + member_lit_comp(CTRL_MetaEvalArray, U64, count), +}; +struct_type(CTRL_MetaEvalArray); + //////////////////////////////// //~ rjf: Entity Handle Types @@ -253,23 +296,6 @@ struct CTRL_UserBreakpointList U64 count; }; -//////////////////////////////// -//~ rjf: Meta Evaluation Types - -typedef struct CTRL_MetaEvalInfoArray CTRL_MetaEvalInfoArray; -struct CTRL_MetaEvalInfoArray -{ - CTRL_MetaEvalInfo *v; - U64 count; -}; - -typedef struct CTRL_MetaEvalArray CTRL_MetaEvalArray; -struct CTRL_MetaEvalArray -{ - CTRL_MetaEval *v; - U64 count; -}; - //////////////////////////////// //~ rjf: Evaluation Spaces @@ -324,7 +350,7 @@ struct CTRL_Msg String8List env_string_list; CTRL_TrapList traps; CTRL_UserBreakpointList user_bps; - CTRL_MetaEvalInfoArray meta_eval_infos; + CTRL_MetaEvalArray meta_evals; }; typedef struct CTRL_MsgNode CTRL_MsgNode; @@ -709,12 +735,6 @@ internal CTRL_TrapList ctrl_trap_list_copy(Arena *arena, CTRL_TrapList *src); internal void ctrl_user_breakpoint_list_push(Arena *arena, CTRL_UserBreakpointList *list, CTRL_UserBreakpoint *bp); internal CTRL_UserBreakpointList ctrl_user_breakpoint_list_copy(Arena *arena, CTRL_UserBreakpointList *src); -//////////////////////////////// -//~ rjf: Meta Evaluation Type Functions - -internal CTRL_MetaEval *ctrl_meta_eval_from_info(Arena *arena, CTRL_MetaEvalInfo *info); -internal CTRL_MetaEvalInfoArray ctrl_meta_eval_info_array_copy(Arena *arena, CTRL_MetaEvalInfoArray *src); - //////////////////////////////// //~ rjf: Message Type Functions @@ -788,11 +808,6 @@ internal CTRL_EntityRec ctrl_entity_rec_depth_first(CTRL_Entity *entity, CTRL_En //- rjf: applying events to entity caches internal void ctrl_entity_store_apply_events(CTRL_EntityStore *store, CTRL_EventList *list); -//////////////////////////////// -//~ rjf: Meta-Eval Functions - -internal E_TypeKey ctrl_meta_eval_type_key(void); - //////////////////////////////// //~ rjf: Main Layer Initialization diff --git a/src/ctrl/generated/ctrl.meta.c b/src/ctrl/generated/ctrl.meta.c index f2ace71a..26bc0c99 100644 --- a/src/ctrl/generated/ctrl.meta.c +++ b/src/ctrl/generated/ctrl.meta.c @@ -4,71 +4,6 @@ //- GENERATED CODE C_LINKAGE_BEGIN -String8 ctrl_meta_eval_member_name_table[9] = -{ -str8_lit_comp("enabled"), -str8_lit_comp("frozen"), -str8_lit_comp("hit_count"), -str8_lit_comp("id"), -str8_lit_comp("color"), -str8_lit_comp("label"), -str8_lit_comp("location"), -str8_lit_comp("condition"), -str8_lit_comp("callstack"), -}; - -Rng1U64 ctrl_meta_eval_info_member_range_table[9] = -{ -{OffsetOf(CTRL_MetaEvalInfo, enabled), OffsetOf(CTRL_MetaEvalInfo, enabled) + sizeof(S32)}, -{OffsetOf(CTRL_MetaEvalInfo, frozen), OffsetOf(CTRL_MetaEvalInfo, frozen) + sizeof(S32)}, -{OffsetOf(CTRL_MetaEvalInfo, hit_count), OffsetOf(CTRL_MetaEvalInfo, hit_count) + sizeof(U64)}, -{OffsetOf(CTRL_MetaEvalInfo, id), OffsetOf(CTRL_MetaEvalInfo, id) + sizeof(U64)}, -{OffsetOf(CTRL_MetaEvalInfo, color), OffsetOf(CTRL_MetaEvalInfo, color) + sizeof(U32)}, -{OffsetOf(CTRL_MetaEvalInfo, label), OffsetOf(CTRL_MetaEvalInfo, label) + sizeof(String8)}, -{OffsetOf(CTRL_MetaEvalInfo, location), OffsetOf(CTRL_MetaEvalInfo, location) + sizeof(String8)}, -{OffsetOf(CTRL_MetaEvalInfo, condition), OffsetOf(CTRL_MetaEvalInfo, condition) + sizeof(String8)}, -{OffsetOf(CTRL_MetaEvalInfo, callstack), OffsetOf(CTRL_MetaEvalInfo, callstack) + sizeof(CTRL_MetaEvalFrameArray)}, -}; - -Rng1U64 ctrl_meta_eval_member_range_table[9] = -{ -{OffsetOf(CTRL_MetaEval, enabled), OffsetOf(CTRL_MetaEval, enabled) + sizeof(S32)}, -{OffsetOf(CTRL_MetaEval, frozen), OffsetOf(CTRL_MetaEval, frozen) + sizeof(S32)}, -{OffsetOf(CTRL_MetaEval, hit_count), OffsetOf(CTRL_MetaEval, hit_count) + sizeof(U64)}, -{OffsetOf(CTRL_MetaEval, id), OffsetOf(CTRL_MetaEval, id) + sizeof(U64)}, -{OffsetOf(CTRL_MetaEval, color), OffsetOf(CTRL_MetaEval, color) + sizeof(U32)}, -{OffsetOf(CTRL_MetaEval, label), OffsetOf(CTRL_MetaEval, label) + sizeof(U64)}, -{OffsetOf(CTRL_MetaEval, location), OffsetOf(CTRL_MetaEval, location) + sizeof(U64)}, -{OffsetOf(CTRL_MetaEval, condition), OffsetOf(CTRL_MetaEval, condition) + sizeof(U64)}, -{OffsetOf(CTRL_MetaEval, callstack), OffsetOf(CTRL_MetaEval, callstack) + sizeof(U64)}, -}; - -E_TypeKind ctrl_meta_eval_member_type_kind_table[9] = -{ -E_TypeKind_S32, -E_TypeKind_S32, -E_TypeKind_U64, -E_TypeKind_U64, -E_TypeKind_U32, -E_TypeKind_U64, -E_TypeKind_U64, -E_TypeKind_U64, -E_TypeKind_U64, -}; - -CTRL_MetaEvalDynamicKind ctrl_meta_eval_member_dynamic_kind_table[9] = -{ -CTRL_MetaEvalDynamicKind_Null, -CTRL_MetaEvalDynamicKind_Null, -CTRL_MetaEvalDynamicKind_Null, -CTRL_MetaEvalDynamicKind_Null, -CTRL_MetaEvalDynamicKind_Null, -CTRL_MetaEvalDynamicKind_String8, -CTRL_MetaEvalDynamicKind_String8, -CTRL_MetaEvalDynamicKind_String8, -CTRL_MetaEvalDynamicKind_FrameArray, -}; - String8 ctrl_entity_kind_display_string_table[8] = { {0}, diff --git a/src/ctrl/generated/ctrl.meta.h b/src/ctrl/generated/ctrl.meta.h index 7fddebd9..b5f03424 100644 --- a/src/ctrl/generated/ctrl.meta.h +++ b/src/ctrl/generated/ctrl.meta.h @@ -6,14 +6,6 @@ #ifndef CTRL_META_H #define CTRL_META_H -typedef enum CTRL_MetaEvalDynamicKind -{ -CTRL_MetaEvalDynamicKind_Null, -CTRL_MetaEvalDynamicKind_String8, -CTRL_MetaEvalDynamicKind_FrameArray, -CTRL_MetaEvalDynamicKind_COUNT, -} CTRL_MetaEvalDynamicKind; - typedef enum CTRL_EntityKind { CTRL_EntityKind_Null, @@ -70,47 +62,7 @@ CTRL_ExceptionCodeKind_Win32DirectXDebugLayer, CTRL_ExceptionCodeKind_COUNT, } CTRL_ExceptionCodeKind; -typedef struct CTRL_MetaEvalFrameArray CTRL_MetaEvalFrameArray; -struct CTRL_MetaEvalFrameArray -{ -U64 *frames; -U64 count; -}; - -typedef struct CTRL_MetaEvalInfo CTRL_MetaEvalInfo; -struct CTRL_MetaEvalInfo -{ -S32 enabled; -S32 frozen; -U64 hit_count; -U64 id; -U32 color; -String8 label; -String8 location; -String8 condition; -CTRL_MetaEvalFrameArray callstack; -}; - -typedef struct CTRL_MetaEval CTRL_MetaEval; -struct CTRL_MetaEval -{ -S32 enabled; -S32 frozen; -U64 hit_count; -U64 id; -U32 color; -U64 label; -U64 location; -U64 condition; -U64 callstack; -}; - C_LINKAGE_BEGIN -extern String8 ctrl_meta_eval_member_name_table[9]; -extern Rng1U64 ctrl_meta_eval_info_member_range_table[9]; -extern Rng1U64 ctrl_meta_eval_member_range_table[9]; -extern E_TypeKind ctrl_meta_eval_member_type_kind_table[9]; -extern CTRL_MetaEvalDynamicKind ctrl_meta_eval_member_dynamic_kind_table[9]; extern String8 ctrl_entity_kind_display_string_table[8]; extern U32 ctrl_exception_code_kind_code_table[38]; extern String8 ctrl_exception_code_kind_display_string_table[38]; diff --git a/src/dbg_engine/dbg_engine_core.c b/src/dbg_engine/dbg_engine_core.c index c33ccab2..cfb5a200 100644 --- a/src/dbg_engine/dbg_engine_core.c +++ b/src/dbg_engine/dbg_engine_core.c @@ -1570,7 +1570,7 @@ d_init(void) } internal D_EventList -d_tick(Arena *arena, D_TargetArray *targets, D_BreakpointArray *breakpoints, D_PathMapArray *path_maps, U64 exception_code_filters[(CTRL_ExceptionCodeKind_COUNT+63)/64], CTRL_MetaEvalInfoArray *meta_eval_infos) +d_tick(Arena *arena, D_TargetArray *targets, D_BreakpointArray *breakpoints, D_PathMapArray *path_maps, U64 exception_code_filters[(CTRL_ExceptionCodeKind_COUNT+63)/64], CTRL_MetaEvalArray *meta_evals) { ProfBeginFunction(); Temp scratch = scratch_begin(&arena, 1); @@ -2125,7 +2125,7 @@ d_tick(Arena *arena, D_TargetArray *targets, D_BreakpointArray *breakpoints, D_P msg->cmd_line_string_list = cmdln_strings; msg->env_inherit = 1; MemoryCopyArray(msg->exception_code_filters, exception_code_filters); - MemoryCopyStruct(&msg->meta_eval_infos, meta_eval_infos); + MemoryCopyStruct(&msg->meta_evals, meta_evals); str8_list_push(scratch.arena, &msg->entry_points, custom_entry_point_name); msg->env_string_list = env; } @@ -2165,7 +2165,7 @@ d_tick(Arena *arena, D_TargetArray *targets, D_BreakpointArray *breakpoints, D_P msg->exit_code = 1; msg->entity = process->handle; MemoryCopyArray(msg->exception_code_filters, exception_code_filters); - MemoryCopyStruct(&msg->meta_eval_infos, meta_eval_infos); + MemoryCopyStruct(&msg->meta_evals, meta_evals); } } @@ -2192,7 +2192,7 @@ d_tick(Arena *arena, D_TargetArray *targets, D_BreakpointArray *breakpoints, D_P msg->kind = CTRL_MsgKind_Detach; msg->entity = n->v->handle; MemoryCopyArray(msg->exception_code_filters, exception_code_filters); - MemoryCopyStruct(&msg->meta_eval_infos, meta_eval_infos); + MemoryCopyStruct(&msg->meta_evals, meta_evals); } }break; case D_CmdKind_Continue: @@ -2469,7 +2469,7 @@ d_tick(Arena *arena, D_TargetArray *targets, D_BreakpointArray *breakpoints, D_P msg->kind = CTRL_MsgKind_Attach; msg->entity_id = pid; MemoryCopyArray(msg->exception_code_filters, exception_code_filters); - MemoryCopyStruct(&msg->meta_eval_infos, meta_eval_infos); + MemoryCopyStruct(&msg->meta_evals, meta_evals); } }break; } @@ -2491,7 +2491,7 @@ d_tick(Arena *arena, D_TargetArray *targets, D_BreakpointArray *breakpoints, D_P msg->entity = run_thread->handle; msg->parent = process->handle; MemoryCopyArray(msg->exception_code_filters, exception_code_filters); - MemoryCopyStruct(&msg->meta_eval_infos, meta_eval_infos); + MemoryCopyStruct(&msg->meta_evals, meta_evals); MemoryCopyStruct(&msg->traps, &run_traps); D_BreakpointArray *bp_batches[] = { diff --git a/src/dbg_engine/dbg_engine_core.h b/src/dbg_engine/dbg_engine_core.h index 040e4962..360b8262 100644 --- a/src/dbg_engine/dbg_engine_core.h +++ b/src/dbg_engine/dbg_engine_core.h @@ -523,6 +523,6 @@ internal B32 d_next_cmd(D_Cmd **cmd); //~ rjf: Main Layer Top-Level Calls internal void d_init(void); -internal D_EventList d_tick(Arena *arena, D_TargetArray *targets, D_BreakpointArray *breakpoints, D_PathMapArray *path_maps, U64 exception_code_filters[(CTRL_ExceptionCodeKind_COUNT+63)/64], CTRL_MetaEvalInfoArray *meta_eval_infos); +internal D_EventList d_tick(Arena *arena, D_TargetArray *targets, D_BreakpointArray *breakpoints, D_PathMapArray *path_maps, U64 exception_code_filters[(CTRL_ExceptionCodeKind_COUNT+63)/64], CTRL_MetaEvalArray *meta_evals); #endif // DBG_ENGINE_CORE_H diff --git a/src/eval/eval_types.c b/src/eval/eval_types.c index e8f2eda3..e2b835c2 100644 --- a/src/eval/eval_types.c +++ b/src/eval/eval_types.c @@ -4,6 +4,37 @@ //////////////////////////////// //~ rjf: Type Kind Enum Functions +internal E_TypeKind +e_type_kind_from_base(TypeKind kind) +{ + E_TypeKind result = E_TypeKind_Null; + switch(kind) + { + default:{}break; + case TypeKind_Void: {result = E_TypeKind_Void;}break; + case TypeKind_U8: {result = E_TypeKind_U8;}break; + case TypeKind_U16: {result = E_TypeKind_U16;}break; + case TypeKind_U32: {result = E_TypeKind_U32;}break; + case TypeKind_U64: {result = E_TypeKind_U64;}break; + case TypeKind_S8: {result = E_TypeKind_S8;}break; + case TypeKind_S16: {result = E_TypeKind_S16;}break; + case TypeKind_S32: {result = E_TypeKind_S32;}break; + case TypeKind_S64: {result = E_TypeKind_S64;}break; + case TypeKind_B8: {result = E_TypeKind_S8;}break; + case TypeKind_B16: {result = E_TypeKind_S16;}break; + case TypeKind_B32: {result = E_TypeKind_S32;}break; + case TypeKind_B64: {result = E_TypeKind_S64;}break; + case TypeKind_F32: {result = E_TypeKind_F32;}break; + case TypeKind_F64: {result = E_TypeKind_F64;}break; + case TypeKind_Ptr: {result = E_TypeKind_Ptr;}break; + case TypeKind_Array: {result = E_TypeKind_Array;}break; + case TypeKind_Struct:{result = E_TypeKind_Struct;}break; + case TypeKind_Union: {result = E_TypeKind_Union;}break; + case TypeKind_Enum: {result = E_TypeKind_Enum;}break; + } + return result; +} + internal E_TypeKind e_type_kind_from_rdi(RDI_TypeKind kind) { @@ -404,6 +435,63 @@ e_type_key_cons_ptr(Arch arch, E_TypeKey element_type_key) return key; } +internal E_TypeKey +e_type_key_cons_base(Type *type, String8 name) +{ + E_TypeKey result = e_type_key_zero(); + switch(type->kind) + { + default: + if(TypeKind_FirstLeaf <= type->kind && type->kind <= TypeKind_LastLeaf) + { + E_TypeKind kind = e_type_kind_from_base(type->kind); + result = e_type_key_basic(kind); + }break; + case TypeKind_Struct: + { + Temp scratch = scratch_begin(0, 0); + E_MemberList members = {0}; + for(U64 idx = 0; idx < type->count; idx += 1) + { + E_TypeKey member_type_key = e_type_key_cons_base(type->members[idx].type, str8_zero()); + 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(), + .kind = E_TypeKind_Struct, + .name = name, + .members = members_array.v, + .count = members_array.count); + scratch_end(scratch); + }break; + } + return result; +#if 0 + E_MemberList members = {0}; + { + for(U64 idx = 0; idx < ArrayCount(ctrl_meta_eval_member_range_table); idx += 1) + { + E_TypeKey member_type_key = e_type_key_basic(ctrl_meta_eval_member_type_kind_table[idx]); + switch(ctrl_meta_eval_member_dynamic_kind_table[idx]) + { + default:{}break; + case CTRL_MetaEvalDynamicKind_String8: + { + member_type_key = e_type_key_cons_ptr(arch_from_context(), e_type_key_basic(E_TypeKind_Char8)); + }break; + } + e_member_list_push_new(scratch.arena, &members, .name = ctrl_meta_eval_member_name_table[idx], .off = ctrl_meta_eval_member_range_table[idx].min, .type_key = member_type_key); + } + } + E_MemberArray members_array = e_member_array_from_list(scratch.arena, &members); + E_TypeKey meta_eval_type_key = e_type_key_cons(.arch = arch_from_context(), + .kind = E_TypeKind_Struct, + .name = str8_lit("Meta"), + .members = members_array.v, + .count = members_array.count); +#endif +} + //- rjf: basic type key functions internal B32 diff --git a/src/eval/eval_types.h b/src/eval/eval_types.h index e47e2475..f1bbe19b 100644 --- a/src/eval/eval_types.h +++ b/src/eval/eval_types.h @@ -202,6 +202,7 @@ thread_static E_TypeState *e_type_state = 0; //////////////////////////////// //~ rjf: Type Kind Enum Functions +internal E_TypeKind e_type_kind_from_base(TypeKind kind); internal E_TypeKind e_type_kind_from_rdi(RDI_TypeKind kind); internal E_MemberKind e_member_kind_from_rdi(RDI_MemberKind kind); internal RDI_EvalTypeGroup e_type_group_from_kind(E_TypeKind kind); @@ -242,6 +243,7 @@ internal E_TypeKey e_type_key_cons_(E_ConsTypeParams *params); //- rjf: constructed type construction helpers internal E_TypeKey e_type_key_cons_array(E_TypeKey element_type_key, U64 count); internal E_TypeKey e_type_key_cons_ptr(Arch arch, E_TypeKey element_type_key); +internal E_TypeKey e_type_key_cons_base(Type *type, String8 name); //- rjf: basic type key functions internal B32 e_type_key_match(E_TypeKey l, E_TypeKey r); diff --git a/src/raddbg/raddbg_core.c b/src/raddbg/raddbg_core.c index 9f7d8a28..86040d36 100644 --- a/src/raddbg/raddbg_core.c +++ b/src/raddbg/raddbg_core.c @@ -1856,13 +1856,14 @@ rd_eval_space_read(void *u, E_Space space, void *out, Rng1U64 range) } }break; case CTRL_EvalSpaceKind_Meta: - if(space.u64_0 < rd_state->meta_eval_infos.count) + if(space.u64_0 < rd_state->meta_evals.count) { - CTRL_MetaEvalInfo *info = &rd_state->meta_eval_infos.v[space.u64_0]; + CTRL_MetaEval *eval = &rd_state->meta_evals.v[space.u64_0]; Temp scratch = scratch_begin(0, 0); - arena_push(scratch.arena, 0, 64); + void *offsetify_base = arena_push(scratch.arena, 0, 64); U64 pos_min = arena_pos(scratch.arena); - CTRL_MetaEval *eval = ctrl_meta_eval_from_info(scratch.arena, info); + TypeSerializePtrRefInfo str_ptr_ref_info = { type(U8), .offsetify_base = offsetify_base}; + String8 eval_srlzed = serialized_from_struct(scratch.arena, CTRL_MetaEval, eval, .ptr_ref_infos_count = 1, .ptr_ref_infos = &str_ptr_ref_info); U64 pos_opl = arena_pos(scratch.arena); Rng1U64 legal_range = r1u64(0, pos_opl-pos_min); if(contains_1u64(legal_range, range.min)) @@ -1870,7 +1871,7 @@ rd_eval_space_read(void *u, E_Space space, void *out, Rng1U64 range) result = 1; U64 range_dim = dim_1u64(range); U64 bytes_to_read = Min(range_dim, (legal_range.max - range.min)); - MemoryCopy(out, ((U8 *)eval) + range.min, bytes_to_read); + MemoryCopy(out, (eval_srlzed.str) + range.min, bytes_to_read); if(bytes_to_read < range_dim) { MemoryZero((U8 *)out + bytes_to_read, range_dim - bytes_to_read); @@ -10306,28 +10307,28 @@ rd_frame(void) CTRL_EntityKind_Thread, CTRL_EntityKind_Module, }; - U64 meta_eval_info_count = 0; + U64 meta_eval_count = 0; for(U64 idx = 0; idx < ArrayCount(evallable_entity_kinds); idx += 1) { RD_EntityList list = rd_query_cached_entity_list_with_kind(evallable_entity_kinds[idx]); - meta_eval_info_count += list.count; + meta_eval_count += list.count; } for(U64 idx = 0; idx < ArrayCount(evallable_ctrl_entity_kinds); idx += 1) { CTRL_EntityList list = ctrl_entity_list_from_kind(d_state->ctrl_entity_store, evallable_ctrl_entity_kinds[idx]); - meta_eval_info_count += list.count; + meta_eval_count += list.count; } - rd_state->meta_eval_infos.count = meta_eval_info_count; - rd_state->meta_eval_infos.v = push_array(scratch.arena, CTRL_MetaEvalInfo, rd_state->meta_eval_infos.count); - U64 meta_eval_info_idx = 0; + rd_state->meta_evals.count = meta_eval_count; + rd_state->meta_evals.v = push_array(scratch.arena, CTRL_MetaEval, rd_state->meta_evals.count); + U64 meta_eval_idx = 0; for(U64 idx = 0; idx < ArrayCount(evallable_entity_kinds); idx += 1) { RD_EntityList list = rd_query_cached_entity_list_with_kind(evallable_entity_kinds[idx]); switch(evallable_entity_kinds[idx]) { default:{}break; - case RD_EntityKind_Breakpoint:{rd_state->meta_eval_infos_bps_idx_range.min = idx;}break; - case RD_EntityKind_WatchPin:{rd_state->meta_eval_infos_wps_idx_range.min = idx;}break; + case RD_EntityKind_Breakpoint:{rd_state->meta_evals_bps_idx_range.min = idx;}break; + case RD_EntityKind_WatchPin:{rd_state->meta_evals_wps_idx_range.min = idx;}break; } for(RD_EntityNode *n = list.first; n != 0; n = n->next) { @@ -10345,20 +10346,20 @@ rd_frame(void) loc_string = push_str8f(scratch.arena, "0x%I64x", loc->vaddr); } String8 cnd_string = push_str8_copy(scratch.arena, cnd->string); - CTRL_MetaEvalInfo *mei = &rd_state->meta_eval_infos.v[meta_eval_info_idx]; - mei->enabled = !entity->disabled; - mei->hit_count = entity->u64; - mei->color = u32_from_rgba(rd_rgba_from_entity(entity)); - mei->label = label_string; - mei->location = loc_string; - mei->condition = cnd_string; - meta_eval_info_idx += 1; + CTRL_MetaEval *meval = &rd_state->meta_evals.v[meta_eval_idx]; + meval->enabled = !entity->disabled; + meval->hit_count = entity->u64; + meval->color = u32_from_rgba(rd_rgba_from_entity(entity)); + meval->label = label_string; + meval->location = loc_string; + meval->condition = cnd_string; + meta_eval_idx += 1; } switch(evallable_entity_kinds[idx]) { default:{}break; - case RD_EntityKind_Breakpoint:{rd_state->meta_eval_infos_bps_idx_range.max = idx;}break; - case RD_EntityKind_WatchPin:{rd_state->meta_eval_infos_wps_idx_range.max = idx;}break; + case RD_EntityKind_Breakpoint:{rd_state->meta_evals_bps_idx_range.max = idx;}break; + case RD_EntityKind_WatchPin:{rd_state->meta_evals_wps_idx_range.max = idx;}break; } } for(U64 idx = 0; idx < ArrayCount(evallable_ctrl_entity_kinds); idx += 1) @@ -10367,12 +10368,12 @@ rd_frame(void) for(CTRL_EntityNode *n = list.first; n != 0; n = n->next) { CTRL_Entity *entity = n->v; - CTRL_MetaEvalInfo *mei = &rd_state->meta_eval_infos.v[meta_eval_info_idx]; - mei->label = entity->string; - mei->id = entity->id; - mei->color = entity->rgba; - // TODO(rjf): @msgs - meta_eval_info_idx += 1; + CTRL_MetaEval *meval = &rd_state->meta_evals.v[meta_eval_idx]; + meval->frozen = entity->is_frozen; + meval->color = entity->rgba; + meval->label = entity->string; + meval->id = entity->id; + meta_eval_idx += 1; } } } @@ -10441,10 +10442,10 @@ rd_frame(void) //- rjf: add macros for meta evaluations { - E_TypeKey meta_eval_type_key = ctrl_meta_eval_type_key(); - for(U64 idx = 0; idx < rd_state->meta_eval_infos.count; idx += 1) + E_TypeKey meta_eval_type_key = e_type_key_cons_base(type(CTRL_MetaEval), str8_lit("debugger_entity")); + for(U64 idx = 0; idx < rd_state->meta_evals.count; idx += 1) { - CTRL_MetaEvalInfo *mei = &rd_state->meta_eval_infos.v[idx]; + CTRL_MetaEval *meval = &rd_state->meta_evals.v[idx]; E_Space space = e_space_make(CTRL_EvalSpaceKind_Meta); space.u64_0 = idx; E_Expr *expr = e_push_expr(scratch.arena, E_ExprKind_LeafOffset, 0); @@ -10452,9 +10453,9 @@ rd_frame(void) expr->mode = E_Mode_Offset; expr->type_key = meta_eval_type_key; e_string2expr_map_insert(scratch.arena, ctx->macro_map, push_str8f(scratch.arena, "$%I64u", idx), expr); - if(mei->label.size != 0) + if(meval->label.size != 0) { - e_string2expr_map_insert(scratch.arena, ctx->macro_map, mei->label, expr); + e_string2expr_map_insert(scratch.arena, ctx->macro_map, meval->label, expr); } } } @@ -14500,7 +14501,7 @@ rd_frame(void) //- rjf: tick debug engine // U64 cmd_count_pre_tick = rd_state->cmds[0].count; - D_EventList engine_events = d_tick(scratch.arena, &targets, &breakpoints, &path_maps, exception_code_filters, &rd_state->meta_eval_infos); + D_EventList engine_events = d_tick(scratch.arena, &targets, &breakpoints, &path_maps, exception_code_filters, &rd_state->meta_evals); //////////////////////////// //- rjf: no selected thread? -> try to snap to any existing thread diff --git a/src/raddbg/raddbg_core.h b/src/raddbg/raddbg_core.h index d28b6f86..bbe1a9ce 100644 --- a/src/raddbg/raddbg_core.h +++ b/src/raddbg/raddbg_core.h @@ -804,9 +804,9 @@ struct RD_State F32 frame_dt; // rjf: meta evaluation info - CTRL_MetaEvalInfoArray meta_eval_infos; - Rng1U64 meta_eval_infos_bps_idx_range; - Rng1U64 meta_eval_infos_wps_idx_range; + CTRL_MetaEvalArray meta_evals; + Rng1U64 meta_evals_bps_idx_range; + Rng1U64 meta_evals_wps_idx_range; // rjf: registers stack RD_RegsNode base_regs; diff --git a/src/raddbg/raddbg_views.c b/src/raddbg/raddbg_views.c index 4d4f19b1..5fc62354 100644 --- a/src/raddbg/raddbg_views.c +++ b/src/raddbg/raddbg_views.c @@ -1043,11 +1043,11 @@ rd_watch_view_build(RD_WatchViewState *ewv, B32 modifiable, U32 default_radix, R // case RD_WatchViewFillKind_Breakpoints: { - E_TypeKey meta_eval_type = ctrl_meta_eval_type_key(); + E_TypeKey meta_eval_type = e_type_key_cons_base(type(CTRL_MetaEval), str8_lit("debugger_entity")); mutable_entity_kind = RD_EntityKind_Breakpoint; ev_view_rule_list_push_string(scratch.arena, &top_level_view_rules, str8_lit("no_addr")); RD_EntityList bps = rd_query_cached_entity_list_with_kind(mutable_entity_kind); - U64 idx = rd_state->meta_eval_infos_bps_idx_range.min; + U64 idx = rd_state->meta_evals_bps_idx_range.min; for(RD_EntityNode *n = bps.first; n != 0; n = n->next, idx += 1) { RD_Entity *bp = n->entity; @@ -1075,7 +1075,7 @@ rd_watch_view_build(RD_WatchViewState *ewv, B32 modifiable, U32 default_radix, R { mutable_entity_kind = RD_EntityKind_WatchPin; RD_EntityList wps = rd_query_cached_entity_list_with_kind(mutable_entity_kind); - U64 idx = rd_state->meta_eval_infos_wps_idx_range.min; + U64 idx = rd_state->meta_evals_wps_idx_range.min; for(RD_EntityNode *n = wps.first; n != 0; n = n->next, idx += 1) { RD_Entity *wp = n->entity; diff --git a/src/scratch/ryan_scratch.c b/src/scratch/ryan_scratch.c index 29b85e44..3b1899a7 100644 --- a/src/scratch/ryan_scratch.c +++ b/src/scratch/ryan_scratch.c @@ -52,75 +52,6 @@ struct FooBar String8 name; }; -//- - -Type String8__str_ptr_type = {TypeKind_Ptr, 0, sizeof(void *), type(U8), {0}, str8_lit_comp("size")}; - -Member String8__members[] = -{ - {str8_lit_comp("str"), &String8__str_ptr_type, OffsetOf(String8, str)}, - {str8_lit_comp("size"), type(U64), OffsetOf(String8, size)}, -}; - -Type String8__type = -{ - TypeKind_Struct, - 0, - sizeof(String8), - &type_nil, - str8_lit_comp("String8"), - {0}, - ArrayCount(String8__members), - String8__members, -}; - -//- - -extern Type String8Node__type; -Type String8Node__ptr_type = {TypeKind_Ptr, 0, sizeof(void *), &String8Node__type}; - -Member String8Node__members[] = -{ - {str8_lit_comp("next"), &String8Node__ptr_type, OffsetOf(String8Node, next)}, - {str8_lit_comp("string"), type(String8), OffsetOf(String8Node, string)}, -}; - -Type String8Node__type = -{ - TypeKind_Struct, - 0, - sizeof(String8Node), - &type_nil, - str8_lit_comp("String8Node"), - {0}, - ArrayCount(String8Node__members), - String8Node__members, -}; - -//- - -Member String8List__members[] = -{ - {str8_lit_comp("first"), &String8Node__ptr_type, OffsetOf(String8List, first)}, - {str8_lit_comp("last"), &String8Node__ptr_type, OffsetOf(String8List, last), MemberFlag_DoNotSerialize}, - {str8_lit_comp("node_count"), type(U64), OffsetOf(String8List, node_count)}, - {str8_lit_comp("total_size"), type(U64), OffsetOf(String8List, total_size)}, -}; - -Type String8List__type = -{ - TypeKind_Struct, - 0, - sizeof(String8List), - &type_nil, - str8_lit_comp("String8List"), - {0}, - ArrayCount(String8List__members), - String8List__members, -}; - -//- - Member FooBar__members[] = { {str8_lit_comp("x"), type(U64), OffsetOf(FooBar, x)}, @@ -132,7 +63,6 @@ Member FooBar__members[] = Type FooBar__type = { TypeKind_Struct, - 0, sizeof(FooBar), &type_nil, str8_lit_comp("FooBar"),