begin sketching out meta eval info, to allow for debugger meta evaluations on both ctrl thread & on ui thread - e.g. breakpoint hit count evaluation in conditional bps

This commit is contained in:
Ryan Fleury
2024-09-16 10:36:22 -07:00
parent 17d062934e
commit adc9e0e512
8 changed files with 93 additions and 19 deletions
+25
View File
@@ -1127,6 +1127,31 @@ 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};
{
e_member_list_push_new(scratch.arena, &members, .name = str8_lit("enabled"), .off = 0, .type_key = e_type_key_basic(E_TypeKind_S64));
e_member_list_push_new(scratch.arena, &members, .name = str8_lit("hit_count"),.off = 0+8, .type_key = e_type_key_basic(E_TypeKind_U64));
e_member_list_push_new(scratch.arena, &members, .name = str8_lit("label"), .off = 0+8+8, .type_key = e_type_key_cons_ptr(arch_from_context(), e_type_key_basic(E_TypeKind_Char8)));
e_member_list_push_new(scratch.arena, &members, .name = str8_lit("location"), .off = 0+8+8+8, .type_key = e_type_key_cons_ptr(arch_from_context(), e_type_key_basic(E_TypeKind_Char8)));
e_member_list_push_new(scratch.arena, &members, .name = str8_lit("condition"),.off = 0+8+8+8+8,.type_key = e_type_key_cons_ptr(arch_from_context(), e_type_key_basic(E_TypeKind_Char8)));
}
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
+46
View File
@@ -263,6 +263,43 @@ struct CTRL_UserBreakpointList
U64 count;
};
////////////////////////////////
//~ rjf: Meta Evaluation Types
typedef struct CTRL_MetaEvalInfo CTRL_MetaEvalInfo;
struct CTRL_MetaEvalInfo
{
B64 enabled;
U64 hit_count;
String8 label;
String8 location;
String8 condition;
};
typedef struct CTRL_MetaEvalInfoArray CTRL_MetaEvalInfoArray;
struct CTRL_MetaEvalInfoArray
{
CTRL_MetaEvalInfo *v;
U64 count;
};
typedef struct CTRL_MetaEval CTRL_MetaEval;
struct CTRL_MetaEval
{
B64 enabled;
U64 hit_count;
U64 label_off;
U64 location_off;
U64 condition_off;
};
typedef struct CTRL_MetaEvalArray CTRL_MetaEvalArray;
struct CTRL_MetaEvalArray
{
CTRL_MetaEval *v;
U64 count;
};
////////////////////////////////
//~ rjf: Evaluation Spaces
@@ -270,6 +307,7 @@ typedef U64 CTRL_EvalSpaceKind;
enum
{
CTRL_EvalSpaceKind_Entity = E_SpaceKind_FirstUserDefined,
CTRL_EvalSpaceKind_Meta,
};
////////////////////////////////
@@ -321,6 +359,7 @@ struct CTRL_Msg
String8List env_string_list;
CTRL_TrapList traps;
CTRL_UserBreakpointList user_bps;
CTRL_MetaEvalInfoArray meta_eval_infos;
};
typedef struct CTRL_MsgNode CTRL_MsgNode;
@@ -637,6 +676,8 @@ struct CTRL_State
DMN_EventNode *free_dmn_event_node;
Arena *user_entry_point_arena;
String8List user_entry_points;
Arena *user_meta_eval_arena;
CTRL_MetaEvalArray *user_meta_evals;
U64 exception_code_filters[(CTRL_ExceptionCodeKind_COUNT+63)/64];
U64 process_counter;
@@ -774,6 +815,11 @@ 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