further work on expanding main watch path to support various string styling/visualizing mechanisms, used ad-hoc before; more work on scheduler

This commit is contained in:
Ryan Fleury
2024-10-01 11:43:57 -07:00
parent dae0d602f9
commit 685cb4a3b8
6 changed files with 67 additions and 43 deletions
+19 -29
View File
@@ -102,6 +102,7 @@ enum
{
TypeFlag_IsExternal = (1<<0),
TypeFlag_IsCode = (1<<1),
TypeFlag_IsPath = (1<<2),
};
typedef U32 MemberFlags;
@@ -203,42 +204,31 @@ struct_members(Rng1U64)
struct_type(Rng1U64);
//- rjf: String8
Type String8__str_ptr_type = {TypeKind_Ptr, 0, sizeof(void *), type(U8), {0}, str8_lit_comp("size")};
Member String8__members[] =
ptr_type(String8__str_ptr_type, type(U8), str8_lit_comp("size"));
struct_members(String8)
{
{str8_lit_comp("str"), {0}, &String8__str_ptr_type, OffsetOf(String8, str)},
{str8_lit_comp("size"), {0}, 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,
member_lit_comp(String8, &String8__str_ptr_type, str),
member_lit_comp(String8, type(U64), size),
};
struct_type(String8);
//- rjf: String8 (code contents)
Type String8__code_str_ptr_type = {TypeKind_Ptr, TypeFlag_IsCode, sizeof(void *), type(U8), {0}, str8_lit_comp("size")};
Member String8__code_members[] =
//- rjf: String8 (Code)
ptr_type(String8_Code__str_ptr_type, type(U8), str8_lit_comp("size"), .flags = TypeFlag_IsCode);
struct_members(String8_Code)
{
{str8_lit_comp("str"), {0}, &String8__code_str_ptr_type, OffsetOf(String8, str)},
{str8_lit_comp("size"), {0}, type(U64), OffsetOf(String8, size)},
member_lit_comp(String8, &String8_Code__str_ptr_type, str),
member_lit_comp(String8, type(U64), size),
};
Type String8__code_type =
named_struct_type(String8_Code, String8);
//- rjf: String8 (Path)
ptr_type(String8_Path__str_ptr_type, type(U8), str8_lit_comp("size"), .flags = TypeFlag_IsPath);
struct_members(String8_Path)
{
TypeKind_Struct,
0,
sizeof(String8),
&type_nil,
str8_lit_comp("String8"),
{0},
ArrayCount(String8__code_members),
String8__code_members,
member_lit_comp(String8, &String8_Path__str_ptr_type, str),
member_lit_comp(String8, type(U64), size),
};
named_struct_type(String8_Path, String8);
//- rjf: String8Node
extern Type String8Node__type;
+19 -12
View File
@@ -17,20 +17,27 @@ typedef U64 CTRL_MachineID;
//- rjf: styled string types
ptr_type(CTRL_CodeString8__str_ptr_type, type(U8), .flags = TypeFlag_IsCode, .count_delimiter_name = str8_lit_comp("size"));
ptr_type(CTRL_PlainString8__str_ptr_type, type(U8), .flags = 0, .count_delimiter_name = str8_lit_comp("size"));
Member CTRL_CodeString8__members[] =
{
member_lit_comp(String8, &CTRL_CodeString8__str_ptr_type, str, .pretty_name = str8_lit_comp("Contents")),
member_lit_comp(String8, type(U64), size, .pretty_name = str8_lit_comp("Size")),
};
ptr_type(CTRL_CodeString8__str_ptr_type, type(U8), .flags = TypeFlag_IsCode, .count_delimiter_name = str8_lit_comp("size"));
ptr_type(CTRL_PathString8__str_ptr_type, type(U8), .flags = TypeFlag_IsPath, .count_delimiter_name = str8_lit_comp("size"));
Member CTRL_PlainString8__members[] =
{
member_lit_comp(String8, &CTRL_PlainString8__str_ptr_type, str, .pretty_name = str8_lit_comp("Contents")),
member_lit_comp(String8, type(U64), size, .pretty_name = str8_lit_comp("Size")),
};
named_struct_type(CTRL_CodeString8, String8, .name = str8_lit_comp("string"));
Member CTRL_CodeString8__members[] =
{
member_lit_comp(String8, &CTRL_CodeString8__str_ptr_type, str, .pretty_name = str8_lit_comp("Contents")),
member_lit_comp(String8, type(U64), size, .pretty_name = str8_lit_comp("Size")),
};
Member CTRL_PathString8__members[] =
{
member_lit_comp(String8, &CTRL_PathString8__str_ptr_type, str, .pretty_name = str8_lit_comp("Contents")),
member_lit_comp(String8, type(U64), size, .pretty_name = str8_lit_comp("Size")),
};
named_struct_type(CTRL_PlainString8, String8, .name = str8_lit_comp("string"));
named_struct_type(CTRL_CodeString8, String8, .name = str8_lit_comp("string"));
named_struct_type(CTRL_PathString8, String8, .name = str8_lit_comp("string"));
//- rjf: meta evaluation callstack types
@@ -74,10 +81,10 @@ X(U64, id, "ID")\
X(Rng1U64, vaddr_range, "Address Range")\
X(U32, color, "Color")\
Y(String8, type(CTRL_CodeString8), label, "Label")\
Y(String8, type(CTRL_PlainString8), exe, "Executable Path")\
Y(String8, type(CTRL_PlainString8), dbg, "Debug Info Path")\
Y(String8, type(CTRL_PathString8), exe, "Executable Path")\
Y(String8, type(CTRL_PathString8), dbg, "Debug Info Path")\
Y(String8, type(CTRL_PlainString8), args, "Arguments")\
Y(String8, type(CTRL_PlainString8), working_directory, "Working Directory")\
Y(String8, type(CTRL_PathString8), working_directory, "Working Directory")\
Y(String8, type(CTRL_CodeString8), entry_point, "Custom Entry Point")\
Y(String8, type(CTRL_PlainString8), location, "Location")\
Y(String8, type(CTRL_CodeString8), condition, "Condition")\
@@ -112,9 +119,9 @@ struct_members(CTRL_BreakpointMetaEval)
struct_members(CTRL_TargetMetaEval)
{
member_lit_comp(CTRL_MetaEval, type(CTRL_CodeString8), label, .pretty_name = str8_lit_comp("Label")),
member_lit_comp(CTRL_MetaEval, type(CTRL_PlainString8),exe, .pretty_name = str8_lit_comp("Executable")),
member_lit_comp(CTRL_MetaEval, type(CTRL_PathString8), exe, .pretty_name = str8_lit_comp("Executable")),
member_lit_comp(CTRL_MetaEval, type(CTRL_PlainString8),args, .pretty_name = str8_lit_comp("Arguments")),
member_lit_comp(CTRL_MetaEval, type(CTRL_PlainString8),working_directory, .pretty_name = str8_lit_comp("Working Directory")),
member_lit_comp(CTRL_MetaEval, type(CTRL_PathString8), working_directory, .pretty_name = str8_lit_comp("Working Directory")),
member_lit_comp(CTRL_MetaEval, type(CTRL_CodeString8), entry_point, .pretty_name = str8_lit_comp("Custom Entry Point")),
};
+4
View File
@@ -463,6 +463,10 @@ e_type_key_cons_base(Type *type)
{
flags |= E_TypeFlag_IsCode;
}
if(type->flags & TypeFlag_IsPath)
{
flags |= E_TypeFlag_IsPath;
}
result = e_type_key_cons_ptr(arch_from_context(), direct_type, flags);
}break;
case TypeKind_Array:
+1
View File
@@ -70,6 +70,7 @@ enum
E_TypeFlag_Volatile = (1<<1),
E_TypeFlag_External = (1<<2),
E_TypeFlag_IsCode = (1<<3),
E_TypeFlag_IsPath = (1<<4),
};
typedef struct E_Member E_Member;
+4
View File
@@ -1853,6 +1853,10 @@ rd_name_from_ctrl_entity(Arena *arena, CTRL_Entity *entity)
{
string = str8_lit("unnamed");
}
if(entity->kind == CTRL_EntityKind_Module)
{
string = str8_skip_last_slash(string);
}
return string;
}
+20 -2
View File
@@ -1217,6 +1217,7 @@ rd_watch_view_build(RD_WatchViewState *ewv, RD_WatchViewFlags flags, String8 roo
{RD_EntityKind_Target, CTRL_EntityKind_Null, RD_CmdKind_LaunchAndInit },
{RD_EntityKind_Target, CTRL_EntityKind_Null, RD_CmdKind_SelectEntity },
{RD_EntityKind_Nil, CTRL_EntityKind_Thread, RD_CmdKind_FreezeThread },
{RD_EntityKind_Nil, CTRL_EntityKind_Thread, RD_CmdKind_SelectThread },
};
RD_WatchViewRowCtrl *row_ctrls = row_ctrls_;
U64 row_ctrls_count = ArrayCount(row_ctrls_);
@@ -2381,7 +2382,8 @@ rd_watch_view_build(RD_WatchViewState *ewv, RD_WatchViewFlags flags, String8 roo
//- rjf: peek clicks in canvas region, mark clicked
for(UI_Event *evt = 0; ui_next_event(&evt);)
{
if(evt->kind == UI_EventKind_Press && evt->key == OS_Key_LeftMouseButton && contains_2f32(canvas_rect, evt->pos))
if(evt->kind == UI_EventKind_Press && evt->key == OS_Key_LeftMouseButton && contains_2f32(canvas_rect, evt->pos) &&
contains_2f32(rect, evt->pos))
{
pressed = 1;
break;
@@ -2468,7 +2470,7 @@ rd_watch_view_build(RD_WatchViewState *ewv, RD_WatchViewFlags flags, String8 roo
{
palette = rd_palette_from_code(RD_PaletteCode_NeutralPopButton);
}
if(ctrl_entity->kind == RD_EntityKind_Thread && ctrl_handle_match(ctrl_entity->handle, rd_regs()->thread))
if(ctrl_entity->kind == CTRL_EntityKind_Thread && ctrl_handle_match(ctrl_entity->handle, rd_regs()->thread))
{
palette = rd_palette_from_code(RD_PaletteCode_NeutralPopButton);
}
@@ -2528,6 +2530,10 @@ rd_watch_view_build(RD_WatchViewState *ewv, RD_WatchViewFlags flags, String8 roo
sig.event_flags & OS_Modifier_Ctrl && !entity->disabled ? RD_CmdKind_DisableEntity :
RD_CmdKind_SelectEntity, .entity = rd_handle_from_entity(entity));
}
if(ctrl_entity->kind == CTRL_EntityKind_Thread)
{
rd_cmd(RD_CmdKind_SelectThread, .thread = ctrl_entity->handle);
}
}
}
}
@@ -2551,6 +2557,10 @@ rd_watch_view_build(RD_WatchViewState *ewv, RD_WatchViewFlags flags, String8 roo
{
icon_kind = entity->disabled ? RD_IconKind_CheckHollow : RD_IconKind_CheckFilled;
}
if(ctrl->kind == RD_CmdKind_SelectThread)
{
icon_kind = (ctrl_handle_match(ctrl_entity->handle, rd_base_regs()->thread) ? RD_IconKind_CheckFilled : RD_IconKind_CheckHollow);
}
if(ctrl->kind == RD_CmdKind_FreezeThread)
{
icon_kind = is_frozen ? RD_IconKind_Locked : RD_IconKind_Unlocked;
@@ -2567,6 +2577,10 @@ rd_watch_view_build(RD_WatchViewState *ewv, RD_WatchViewFlags flags, String8 roo
sig.event_flags & OS_Modifier_Ctrl && !entity->disabled ? RD_CmdKind_DisableEntity :
RD_CmdKind_SelectEntity, .entity = rd_handle_from_entity(entity));
}
else if(ctrl->kind == RD_CmdKind_SelectThread)
{
rd_cmd(RD_CmdKind_SelectThread, .thread = ctrl_entity->handle);
}
else if(ctrl->kind == RD_CmdKind_FreezeThread)
{
rd_cmd(is_frozen ? RD_CmdKind_ThawThread : RD_CmdKind_FreezeThread,
@@ -2811,6 +2825,10 @@ rd_watch_view_build(RD_WatchViewState *ewv, RD_WatchViewFlags flags, String8 roo
{
cell_is_code = 1;
}
if(col->kind == RD_WatchViewColumnKind_Value && row_type->flags & E_TypeFlag_IsPath)
{
cell_is_code = 0;
}
//- rjf: build cell
UI_Signal sig = {0};