further enriching of codebase type info & eval type info to encode code-contents of pointers, pretty names for members; further progress on improving watch views to support all needed features for replacing all table uis

This commit is contained in:
Ryan Fleury
2024-09-23 16:45:18 -07:00
parent 508d11c8d8
commit 5690a9e19b
8 changed files with 151 additions and 78 deletions
+1 -1
View File
@@ -45,7 +45,7 @@ typed_data_rebase_ptrs(Type *type, String8 data, void *base_ptr)
{
default:{}break;
case TypeKind_Ptr:
if(!t->type->is_external)
if(!(t->type->flags & TypeFlag_IsExternal))
{
*(U64 *)t->ptr = ((U64)(*(U8 **)t->ptr - (U8 *)base_ptr));
}break;
+61 -31
View File
@@ -97,6 +97,13 @@ typedef enum TypeKind
}
TypeKind;
typedef U32 TypeFlags;
enum
{
TypeFlag_IsExternal = (1<<0),
TypeFlag_IsCode = (1<<1),
};
typedef U32 MemberFlags;
enum
{
@@ -108,6 +115,7 @@ typedef struct Member Member;
struct Member
{
String8 name;
String8 pretty_name;
Type *type;
U64 value;
MemberFlags flags;
@@ -117,13 +125,13 @@ typedef struct Type Type;
struct Type
{
TypeKind kind;
TypeFlags flags;
U64 size;
Type *direct;
String8 name;
String8 count_delimiter_name; // gathered from surrounding members, turns *->[1] into *->[N]
U64 count;
Member *members;
B32 is_external;
};
////////////////////////////////
@@ -154,36 +162,36 @@ struct TypeSerializeParams
////////////////////////////////
//~ rjf: Type Info Table Initializer Helpers
#define member_lit_comp(S, ti, m, ...) {str8_lit_comp(#m), (ti), OffsetOf(S, m), __VA_ARGS__}
#define member_lit_comp(S, ti, m, ...) {str8_lit_comp(#m), {0}, (ti), 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, ti, ...) read_only global Type name = {TypeKind_Ptr, sizeof(void *), (ti), __VA_ARGS__}
#define struct_type(S) read_only global Type S##__type = {TypeKind_Struct, 0, sizeof(S), &type_nil, str8_lit_comp(#S), {0}, ArrayCount(S##__members), S##__members}
#define ptr_type(name, ti, ...) read_only global Type name = {TypeKind_Ptr, 0, sizeof(void *), (ti), __VA_ARGS__}
////////////////////////////////
//~ rjf: Globals
read_only global Type type_nil = {TypeKind_Null, 0, &type_nil};
read_only global Member member_nil = {{0}, &type_nil};
read_only global Type type_nil = {TypeKind_Null, 0, 0, &type_nil};
read_only global Member member_nil = {{0}, {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")};
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")};
//- rjf: Rng1U64
struct_members(Rng1U64)
@@ -194,15 +202,16 @@ struct_members(Rng1U64)
struct_type(Rng1U64);
//- rjf: String8
Type String8__str_ptr_type = {TypeKind_Ptr, sizeof(void *), type(U8), {0}, str8_lit_comp("size")};
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)},
{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"),
@@ -211,17 +220,37 @@ Type String8__type =
String8__members,
};
//- 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[] =
{
{str8_lit_comp("str"), {0}, &String8__code_str_ptr_type, OffsetOf(String8, str)},
{str8_lit_comp("size"), {0}, type(U64), OffsetOf(String8, size)},
};
Type String8__code_type =
{
TypeKind_Struct,
0,
sizeof(String8),
&type_nil,
str8_lit_comp("String8"),
{0},
ArrayCount(String8__code_members),
String8__code_members,
};
//- rjf: String8Node
extern Type String8Node__type;
Type String8Node__ptr_type = {TypeKind_Ptr, sizeof(void *), &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)},
{str8_lit_comp("next"), {0}, &String8Node__ptr_type, OffsetOf(String8Node, next)},
{str8_lit_comp("string"), {0}, type(String8), OffsetOf(String8Node, string)},
};
Type String8Node__type =
{
TypeKind_Struct,
0,
sizeof(String8Node),
&type_nil,
str8_lit_comp("String8Node"),
@@ -233,14 +262,15 @@ Type String8Node__type =
//- 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)},
{str8_lit_comp("first"), {0}, &String8Node__ptr_type, OffsetOf(String8List, first)},
{str8_lit_comp("last"), {0}, &String8Node__ptr_type, OffsetOf(String8List, last), MemberFlag_DoNotSerialize},
{str8_lit_comp("node_count"), {0}, type(U64), OffsetOf(String8List, node_count)},
{str8_lit_comp("total_size"), {0}, type(U64), OffsetOf(String8List, total_size)},
};
Type String8List__type =
{
TypeKind_Struct,
0,
sizeof(String8List),
&type_nil,
str8_lit_comp("String8List"),
+24 -20
View File
@@ -21,7 +21,7 @@ struct CTRL_MetaEvalFrame
{
U64 vaddr;
};
ptr_type(CTRL_MetaEvalFrame__vaddr_type, type(void), .is_external = 1, .size = sizeof(U64));
ptr_type(CTRL_MetaEvalFrame__vaddr_type, type(void), .flags = TypeFlag_IsExternal, .size = sizeof(U64));
struct_members(CTRL_MetaEvalFrame)
{
member_lit_comp(CTRL_MetaEvalFrame, &CTRL_MetaEvalFrame__vaddr_type, vaddr),
@@ -37,7 +37,7 @@ ptr_type(CTRL_MetaEvalFrameArray__v_ptr_type, &CTRL_MetaEvalFrame__vaddr_type, .
struct_members(CTRL_MetaEvalFrameArray)
{
member_lit_comp(CTRL_MetaEvalFrameArray, type(U64), count),
{str8_lit_comp("v"), &CTRL_MetaEvalFrameArray__v_ptr_type, OffsetOf(CTRL_MetaEvalFrameArray, v)},
{str8_lit_comp("v"), {0}, &CTRL_MetaEvalFrameArray__v_ptr_type, OffsetOf(CTRL_MetaEvalFrameArray, v)},
};
struct_type(CTRL_MetaEvalFrameArray);
@@ -46,30 +46,34 @@ 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(Rng1U64, vaddr_range)\
X(U32, color)\
X(String8, label)\
X(String8, exe)\
X(String8, dbg)\
X(String8, args)\
X(String8, working_directory)\
X(String8, entry_point)\
X(String8, location)\
X(String8, condition)\
X(CTRL_MetaEvalFrameArray, callstack)
#define X(T, name) T name;
X(B32, enabled, "Enabled")\
X(B32, frozen, "Frozen")\
X(U64, hit_count, "Hit Count")\
X(U64, id, "ID")\
X(Rng1U64, vaddr_range, "Address Range")\
X(U32, color, "Color")\
Y(String8, String8__code_type, label, "Label")\
X(String8, exe, "Executable Path")\
X(String8, dbg, "Debug Info Path")\
X(String8, args, "Arguments")\
X(String8, working_directory, "Working Directory")\
Y(String8, String8__code_type, entry_point, "Custom Entry Point")\
X(String8, location, "Location")\
Y(String8, String8__code_type, condition, "Condition")\
X(CTRL_MetaEvalFrameArray, callstack, "Call Stack")
#define X(T, name, pretty_name) T name;
#define Y(T, ti, name, pretty_name) T name;
CTRL_MetaEval_MemberXList
#undef X
#undef Y
};
struct_members(CTRL_MetaEval)
{
#define X(T, name) member_lit_comp(CTRL_MetaEval, type(T), name),
#define X(T, name, pretty_name_) member_lit_comp(CTRL_MetaEval, type(T), name, .pretty_name = str8_lit_comp(pretty_name_)),
#define Y(T, ti, name, pretty_name_) member_lit_comp(CTRL_MetaEval, &(ti), name, .pretty_name = str8_lit_comp(pretty_name_)),
CTRL_MetaEval_MemberXList
#undef X
#undef Y
};
struct_type(CTRL_MetaEval);
@@ -83,7 +87,7 @@ struct CTRL_MetaEvalArray
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)},
{str8_lit_comp("v"), {0}, &CTRL_MetaEvalArray__v_ptr_type, OffsetOf(CTRL_MetaEvalArray, v)},
member_lit_comp(CTRL_MetaEvalArray, type(U64), count),
};
struct_type(CTRL_MetaEvalArray);
+6 -2
View File
@@ -453,10 +453,14 @@ e_type_key_cons_base(Type *type)
{
E_TypeKey direct_type = e_type_key_cons_base(type->direct);
E_TypeFlags flags = 0;
if(type->is_external)
if(type->flags & TypeFlag_IsExternal)
{
flags |= E_TypeFlag_External;
}
if(type->flags & TypeFlag_IsCode)
{
flags |= E_TypeFlag_IsCode;
}
result = e_type_key_cons_ptr(arch_from_context(), direct_type, flags);
}break;
case TypeKind_Array:
@@ -471,7 +475,7 @@ e_type_key_cons_base(Type *type)
for(U64 idx = 0; idx < type->count; idx += 1)
{
E_TypeKey member_type_key = e_type_key_cons_base(type->members[idx].type);
e_member_list_push_new(scratch.arena, &members, .name = type->members[idx].name, .off = type->members[idx].value, .type_key = member_type_key);
e_member_list_push_new(scratch.arena, &members, .name = type->members[idx].name, .off = type->members[idx].value, .type_key = member_type_key, .pretty_name = type->members[idx].pretty_name);
}
E_MemberArray members_array = e_member_array_from_list(scratch.arena, &members);
result = e_type_key_cons(.arch = arch_from_context(),
+2
View File
@@ -69,6 +69,7 @@ enum
E_TypeFlag_Const = (1<<0),
E_TypeFlag_Volatile = (1<<1),
E_TypeFlag_External = (1<<2),
E_TypeFlag_IsCode = (1<<3),
};
typedef struct E_Member E_Member;
@@ -77,6 +78,7 @@ struct E_Member
E_MemberKind kind;
E_TypeKey type_key;
String8 name;
String8 pretty_name;
U64 off;
E_TypeKeyList inheritance_key_chain;
};
@@ -950,19 +950,6 @@ ev_row_list_push_new(Arena *arena, EV_View *view, EV_WindowedRowList *rows, EV_B
row->size_in_rows = 1;
row->string = block->string;
row->expr = expr_resolved;
if(row->expr->kind == E_ExprKind_MemberAccess)
{
Temp scratch = scratch_begin(&arena, 1);
E_IRTreeAndType irtree = e_irtree_and_type_from_expr(scratch.arena, row->expr->first);
E_TypeKey type = irtree.type_key;
E_MemberArray data_members = e_type_data_members_from_key(scratch.arena, type);
E_Member *member = e_type_member_from_array_name(&data_members, row->expr->last->string);
if(member != 0)
{
row->member = e_type_member_copy(arena, member);
}
scratch_end(scratch);
}
row->view_rules = view_rules;
return row;
}
@@ -1081,7 +1068,11 @@ ev_windowed_row_list_from_block_list(Arena *arena, EV_View *view, Rng1S64 visibl
{
EV_Key key = ev_key_make(ev_hash_from_key(block->parent_key), idx+1);
E_Expr *expr = ev_expr_from_block_index(arena, block, idx);
ev_row_list_push_new(arena, view, &list, block, key, expr);
EV_Row *row = ev_row_list_push_new(arena, view, &list, block, key, expr);
if(block->kind == EV_BlockKind_Members && idx < block->members.count)
{
row->member = e_type_member_copy(arena, &block->members.v[idx]);
}
}
}break;
}
@@ -1125,7 +1116,14 @@ ev_expr_string_from_row(Arena *arena, EV_Row *row)
}break;
case E_ExprKind_MemberAccess:
{
result = push_str8f(arena, ".%S", e_string_from_expr(arena, notable_expr->last));
if(row->member != 0 && row->member->pretty_name.size != 0)
{
result = push_str8_copy(arena, row->member->pretty_name);
}
else
{
result = push_str8f(arena, ".%S", e_string_from_expr(arena, notable_expr->last));
}
}break;
}
return result;
+39 -7
View File
@@ -877,6 +877,14 @@ rd_string_from_eval_viz_row_column(Arena *arena, EV_View *ev, EV_Row *row, RD_Wa
result = str8_skip(str8_chop(result, 1), 1);
result = raw_from_escaped_str8(arena, result);
}
if(col->rangify_braces && result.size >= 2 &&
result.str[0] == '{' &&
result.str[result.size-1] == '}')
{
result = push_str8_copy(arena, result);
result.str[0] = '[';
result.str[result.size-1] = ')';
}
return result;
}
@@ -926,6 +934,7 @@ rd_watch_view_column_alloc_(RD_WatchViewState *wv, RD_WatchViewColumnKind kind,
MemoryCopy(col->view_rule_buffer, params->view_rule.str, col->view_rule_size);
col->is_non_code = params->is_non_code;
col->dequote_string = params->dequote_string;
col->rangify_braces = params->rangify_braces;
return col;
}
@@ -2232,6 +2241,7 @@ rd_watch_view_build(RD_WatchViewState *ewv, RD_WatchViewFlags flags, String8 roo
B32 row_selected = (selection_tbl.min.y <= (semantic_idx+1) && (semantic_idx+1) <= selection_tbl.max.y);
B32 row_expanded = ev_expansion_from_key(eval_view, row->key);
E_Eval row_eval = e_eval_from_expr(scratch.arena, row->expr);
E_Type *row_type = e_type_from_key(scratch.arena, row_eval.type_key);
B32 row_is_expandable = ev_row_is_expandable(row);
B32 row_is_editable = ev_row_is_editable(row);
B32 next_row_expanded = row_expanded;
@@ -2428,9 +2438,9 @@ rd_watch_view_build(RD_WatchViewState *ewv, RD_WatchViewFlags flags, String8 roo
{
RD_Entity *entity = rd_entity_from_eval_space(row_eval.space);
UI_Box *box = ui_build_box_from_stringf(UI_BoxFlag_Clickable|UI_BoxFlag_DrawHotEffects|UI_BoxFlag_DrawActiveEffects, "###entity_%p", entity);
UI_Parent(box)
UI_Parent(box) UI_Focus(UI_FocusKind_Null)
{
if(row_is_expandable) UI_PrefWidth(ui_em(2.f, 1.f)) UI_Focus(UI_FocusKind_Off)
if(row_is_expandable) UI_PrefWidth(ui_em(2.f, 1.f))
{
if(ui_pressed(ui_expanderf(next_row_expanded, "###expand_%p", entity)))
{
@@ -2440,6 +2450,12 @@ rd_watch_view_build(RD_WatchViewState *ewv, RD_WatchViewFlags flags, String8 roo
DR_FancyStringList fstrs = rd_title_fstrs_from_entity(scratch.arena, entity, rd_rgba_from_theme_color(RD_ThemeColor_TextWeak), ui_top_font_size());
UI_Box *label = ui_build_box_from_key(UI_BoxFlag_DrawText, ui_key_zero());
ui_box_equip_display_fancy_strings(label, &fstrs);
if(entity->kind == RD_EntityKind_Target) UI_PrefWidth(ui_em(3.f, 1.f))
{
rd_icon_buttonf(RD_IconKind_Play, 0, "###run");
rd_icon_buttonf(RD_IconKind_StepInto, 0, "###step_into");
rd_icon_buttonf(RD_IconKind_CheckHollow, 0, "###selected");
}
}
UI_Signal sig = ui_signal_from_box(box);
if(ui_pressed(sig))
@@ -2653,12 +2669,23 @@ rd_watch_view_build(RD_WatchViewState *ewv, RD_WatchViewFlags flags, String8 roo
}
}
//- rjf: determine if cell is code
B32 cell_is_code = !col->is_non_code;
if(flags & RD_WatchViewFlag_PrettyNameMembers && cell_is_code && row->member != 0 && row->member->pretty_name.size != 0 && col->kind == RD_WatchViewColumnKind_Expr)
{
cell_is_code = 0;
}
if(col->kind == RD_WatchViewColumnKind_Value && row_type->flags & E_TypeFlag_IsCode)
{
cell_is_code = 1;
}
//- rjf: build cell
UI_Signal sig = {0};
UI_Palette(palette) UI_TableCell
UI_FocusHot(cell_selected ? UI_FocusKind_On : UI_FocusKind_Off)
UI_FocusActive((cell_selected && ewv->text_editing) ? UI_FocusKind_On : UI_FocusKind_Off)
RD_Font(col->is_non_code ? RD_FontSlot_Main : RD_FontSlot_Code)
RD_Font(cell_is_code ? RD_FontSlot_Code : RD_FontSlot_Main)
UI_FlagsAdd(cell_flags | (row->depth > 0 ? UI_BoxFlag_DrawTextWeak : 0))
{
// rjf: cell has errors? -> build error box
@@ -2698,7 +2725,7 @@ rd_watch_view_build(RD_WatchViewState *ewv, RD_WatchViewFlags flags, String8 roo
// rjf: build cell line edit
else
{
sig = rd_line_editf((RD_LineEditFlag_CodeContents*(!col->is_non_code)|
sig = rd_line_editf((RD_LineEditFlag_CodeContents*(!!cell_is_code)|
RD_LineEditFlag_NoBackground|
RD_LineEditFlag_DisableEdit*(!cell_can_edit)|
RD_LineEditFlag_Expander*!!(x == 0 && row_is_expandable && col->kind == RD_WatchViewColumnKind_Expr)|
@@ -5075,9 +5102,14 @@ RD_VIEW_RULE_UI_FUNCTION_DEF(targets)
{
rd_watch_view_init(wv);
rd_watch_view_column_alloc(wv, RD_WatchViewColumnKind_Expr, 0.30f, .display_string = str8_lit("Expression"));
rd_watch_view_column_alloc(wv, RD_WatchViewColumnKind_Value, 0.70f, .display_string = str8_lit("Value"));
rd_watch_view_column_alloc(wv, RD_WatchViewColumnKind_Value, 0.70f, .display_string = str8_lit("Value"), .dequote_string = 1, .is_non_code = 1);
}
rd_watch_view_build(wv, RD_WatchViewFlag_NoHeader|RD_WatchViewFlag_RootButtons, str8_lit("targets"), str8_lit("collection, only:label exe args working_directory entry_point str"), 0, 10, rect);
rd_watch_view_build(wv,
RD_WatchViewFlag_NoHeader|
RD_WatchViewFlag_RootButtons|
RD_WatchViewFlag_PrettyNameMembers,
str8_lit("targets"),
str8_lit("only:label exe args working_directory entry_point str"), 0, 10, rect);
ProfEnd();
}
@@ -5863,7 +5895,7 @@ RD_VIEW_RULE_UI_FUNCTION_DEF(modules)
rd_watch_view_column_alloc(wv, RD_WatchViewColumnKind_Member, 0.20f, .string = str8_lit("label.str"), .display_string = str8_lit("Name"), .dequote_string = 1, .is_non_code = 1);
rd_watch_view_column_alloc(wv, RD_WatchViewColumnKind_Member, 0.30f, .string = str8_lit("exe.str"), .display_string = str8_lit("Executable Path"), .dequote_string = 1, .is_non_code = 1);
rd_watch_view_column_alloc(wv, RD_WatchViewColumnKind_Member, 0.30f, .string = str8_lit("dbg.str"), .display_string = str8_lit("Debug Info Path"), .dequote_string = 1, .is_non_code = 1);
rd_watch_view_column_alloc(wv, RD_WatchViewColumnKind_Member, 0.20f, .string = str8_lit("vaddr_range"), .display_string = str8_lit("Address Range"), .view_rule = str8_lit("hex"));
rd_watch_view_column_alloc(wv, RD_WatchViewColumnKind_Member, 0.20f, .string = str8_lit("vaddr_range"), .display_string = str8_lit("Address Range"), .rangify_braces = 1, .view_rule = str8_lit("hex"));
}
rd_watch_view_build(wv, 0, str8_lit("modules"), str8_lit(""), 0, 10, rect);
ProfEnd();
+5 -2
View File
@@ -44,8 +44,9 @@ struct RD_CodeViewBuildResult
typedef U32 RD_WatchViewFlags;
enum
{
RD_WatchViewFlag_NoHeader = (1<<0),
RD_WatchViewFlag_RootButtons = (1<<1),
RD_WatchViewFlag_NoHeader = (1<<0),
RD_WatchViewFlag_RootButtons = (1<<1),
RD_WatchViewFlag_PrettyNameMembers = (1<<2),
};
typedef enum RD_WatchViewColumnKind
@@ -69,6 +70,7 @@ struct RD_WatchViewColumnParams
String8 view_rule;
B32 is_non_code;
B32 dequote_string;
B32 rangify_braces;
};
typedef struct RD_WatchViewColumn RD_WatchViewColumn;
@@ -86,6 +88,7 @@ struct RD_WatchViewColumn
U64 view_rule_size;
B32 is_non_code;
B32 dequote_string;
B32 rangify_braces;
};
typedef struct RD_WatchViewPoint RD_WatchViewPoint;