Skip to content

Commit 68966ba

Browse files
committed
eval: more progress on 'sets', plug primary watch group into it; rd: more progress on watch ui based on new sets/lookups
1 parent 12784d9 commit 68966ba

File tree

8 files changed

+214
-49
lines changed

8 files changed

+214
-49
lines changed

src/eval_visualization/eval_visualization_builtin_view_rules.c

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,8 @@ struct EV_DefaultExpandAccel
104104
{
105105
E_MemberArray members;
106106
E_EnumValArray enum_vals;
107-
void *lookup_accel;
107+
E_LookupRule *lookup_rule;
108+
void *lookup_user_data;
108109
U64 array_count;
109110
B32 array_need_extra_deref;
110111
B32 is_ptr2ptr;
@@ -181,7 +182,11 @@ EV_VIEW_RULE_EXPR_EXPAND_INFO_FUNCTION_DEF(default)
181182
else if(type_kind == E_TypeKind_Set)
182183
{
183184
E_Type *type = e_type_from_key(scratch.arena, type_key);
184-
//E_LookupRule *rule = e_lookup_rule_from_string(type->name);
185+
E_LookupRule *rule = e_lookup_rule_from_string(type->name);
186+
E_LookupInfo lookup_info = rule->lookup_info(arena, expr);
187+
total_row_count = Max(lookup_info.named_expr_count, lookup_info.idxed_expr_count);
188+
accel->lookup_rule = rule;
189+
accel->lookup_user_data = lookup_info.user_data;
185190
}
186191

187192
////////////////////////////
@@ -273,6 +278,23 @@ EV_VIEW_RULE_EXPR_EXPAND_RANGE_INFO_FUNCTION_DEF(default)
273278
result.row_members[0] = &e_member_nil;
274279
}
275280

281+
////////////////////////////
282+
//- rjf: fill with lookups
283+
//
284+
else if(accel->lookup_rule != 0)
285+
{
286+
result.row_exprs_count = needed_row_count;
287+
result.row_exprs = push_array(arena, E_Expr *, result.row_exprs_count);
288+
result.row_strings = push_array(arena, String8, result.row_exprs_count);
289+
result.row_view_rules = push_array(arena, String8, result.row_exprs_count);
290+
result.row_members = push_array(arena, E_Member *, result.row_exprs_count);
291+
for EachIndex(row_expr_idx, result.row_exprs_count)
292+
{
293+
result.row_exprs[row_expr_idx] = e_expr_ref_array_index(arena, expr, idx_range.min + row_expr_idx);
294+
result.row_members[row_expr_idx] = &e_member_nil;
295+
}
296+
}
297+
276298
return result;
277299
}
278300

src/raddbg/generated/raddbg.meta.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -73,15 +73,14 @@ RD_VocabularyInfo rd_vocabulary_info_table[41] =
7373
{str8_lit_comp("label"), str8_lit_comp("labels"), str8_lit_comp("Label"), str8_lit_comp("Labels"), RD_IconKind_Null},
7474
};
7575

76-
RD_CfgNameSchemaPair rd_cfg_name_schema_pair_table[7] =
76+
RD_CfgNameSchemaPair rd_cfg_name_schema_pair_table[6] =
7777
{
7878
{str8_lit_comp("settings"), str8_lit_comp("x:\n{\n @default(1) 'hover_animations': bool,\n @default(1) 'press_animations': bool,\n @default(0) 'focus_animations': bool,\n @default(1) 'tooltip_animations': bool,\n @default(1) 'menu_animations': bool,\n @default(1) 'scrolling_animations': bool,\n @default(1) 'background_blur': bool,\n @default(1) 'thread_lines': bool,\n @default(1) 'breakpoint_lines': bool,\n @default(1) 'thread_glow': bool,\n @default(1) 'breakpoint_glow': bool,\n @default(0) 'opaque_backgrounds': bool,\n @default(1) 'smooth_main_text': bool,\n @default(0) 'smooth_code_text': bool,\n @default(1) 'hint_main_text': bool,\n @default(1) 'hint_code_text': bool,\n @default(2) 'tab_width': @range[1, 32] u64,\n @can_be_per_window 'main_font_size': @range[6, 72] u64,\n @can_be_per_window 'code_font_size': @range[1, 32] u64,\n}\n"), str8_lit_comp("")},
7979
{str8_lit_comp("target"), str8_lit_comp("x:\n{\n 'label': code_string,\n 'executable': path,\n 'arguments': string,\n 'working_directory': path,\n 'entry_point': code_string,\n 'stdout_path': path,\n 'stderr_path': path,\n 'stdin_path': path,\n 'debug_subprocesses': bool,\n}\n"), str8_lit_comp("launch_and_run,launch_and_init,select_cfg,remove_cfg")},
8080
{str8_lit_comp("breakpoint"), str8_lit_comp("x:\n{\n 'label': code_string,\n 'condition': code_string,\n 'location': location,\n 'hit_count': u64,\n 'disabled': bool,\n}\n"), str8_lit_comp("enable_cfg,remove_cfg")},
8181
{str8_lit_comp("watch_pin"), str8_lit_comp("x:\n{\n 'expression': code_string,\n 'view_rule': code_string,\n 'location': location,\n}\n"), str8_lit_comp("remove_cfg")},
8282
{str8_lit_comp("file_path_map"), str8_lit_comp("x:{'source':path, 'dest':path}"), str8_lit_comp("remove_cfg")},
8383
{str8_lit_comp("auto_view_rule"), str8_lit_comp("x:{'source':code_string, 'dest':code_string}"), str8_lit_comp("remove_cfg")},
84-
{str8_lit_comp("watch"), str8_lit_comp("x:\n{\n 'expression': code_string,\n 'view_rule': code_string,\n}\n"), str8_lit_comp("remove_cfg")},
8584
};
8685

8786
String8 d_entity_kind_display_string_table[27] =
@@ -500,7 +499,7 @@ RD_CmdKindInfo rd_cmd_kind_info_table[213] =
500499
{ str8_lit_comp("log_marker"), str8_lit_comp("Logs a marker in the application log, to denote specific points in time within the log."), str8_lit_comp(""), str8_lit_comp(""), str8_lit_comp("Log Marker"), RD_IconKind_Null, (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), RD_EntityKind_Nil, CTRL_EntityKind_Null}},
501500
};
502501

503-
RD_StringBindingPair rd_default_binding_table[110] =
502+
RD_StringBindingPair rd_default_binding_table[111] =
504503
{
505504
{str8_lit_comp("kill_all"), {OS_Key_F5, 0 |OS_Modifier_Shift }},
506505
{str8_lit_comp("step_into_inst"), {OS_Key_F11, 0 |OS_Modifier_Alt}},
@@ -612,6 +611,7 @@ RD_StringBindingPair rd_default_binding_table[110] =
612611
{str8_lit_comp("filter"), {OS_Key_Slash, 0 |OS_Modifier_Ctrl }},
613612
{str8_lit_comp("open_lister"), {OS_Key_F1, 0 }},
614613
{str8_lit_comp("log_marker"), {OS_Key_M, 0 |OS_Modifier_Ctrl |OS_Modifier_Shift |OS_Modifier_Alt}},
614+
{str8_lit_comp("toggle_dev_menu"), {OS_Key_D, 0 |OS_Modifier_Ctrl |OS_Modifier_Shift |OS_Modifier_Alt}},
615615
};
616616

617617
String8 rd_binding_version_remap_old_name_table[8] =

src/raddbg/generated/raddbg.meta.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -734,14 +734,14 @@ extern String8 rd_cfg_src_string_table[4];
734734
extern RD_CmdKind rd_cfg_src_load_cmd_kind_table[4];
735735
extern RD_CmdKind rd_cfg_src_write_cmd_kind_table[4];
736736
extern RD_VocabularyInfo rd_vocabulary_info_table[41];
737-
extern RD_CfgNameSchemaPair rd_cfg_name_schema_pair_table[7];
737+
extern RD_CfgNameSchemaPair rd_cfg_name_schema_pair_table[6];
738738
extern String8 d_entity_kind_display_string_table[27];
739739
extern String8 d_entity_kind_name_lower_table[27];
740740
extern String8 d_entity_kind_name_lower_plural_table[27];
741741
extern String8 d_entity_kind_name_label_table[27];
742742
extern RD_EntityKindFlags rd_entity_kind_flags_table[27];
743743
extern Rng1U64 rd_reg_slot_range_table[40];
744-
extern RD_StringBindingPair rd_default_binding_table[110];
744+
extern RD_StringBindingPair rd_default_binding_table[111];
745745
extern String8 rd_binding_version_remap_old_name_table[8];
746746
extern String8 rd_binding_version_remap_new_name_table[8];
747747
extern String8 rd_icon_kind_text_table[69];

src/raddbg/raddbg.mdesk

Lines changed: 1 addition & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -201,19 +201,6 @@ RD_VocabularyMap:
201201
```x:{'source':code_string, 'dest':code_string}```,
202202
`remove_cfg`,
203203
}
204-
205-
//- rjf: watches
206-
{
207-
watch,
208-
```x:
209-
{
210-
'expression': code_string,
211-
'view_rule': code_string,
212-
}
213-
```,
214-
`remove_cfg`,
215-
}
216-
217204
}
218205

219206
@struct RD_CfgNameSchemaPair:
@@ -877,6 +864,7 @@ RD_DefaultBindingTable:
877864

878865
//- rjf: developer commands
879866
{ "log_marker" M ctrl shift alt }
867+
{ "toggle_dev_menu" D ctrl shift alt }
880868
}
881869

882870
@data(RD_StringBindingPair) rd_default_binding_table:

src/raddbg/raddbg_core.c

Lines changed: 79 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -9161,6 +9161,45 @@ EV_VIEW_RULE_EXPR_EXPAND_RANGE_INFO_FUNCTION_DEF(procedures) {return rd_ev_
91619161
EV_VIEW_RULE_EXPR_EXPAND_ID_FROM_NUM_FUNCTION_DEF(procedures) {return rd_ev_view_rule_expr_id_from_num__debug_info_tables(num, user_data, RDI_SectionKind_Procedures); }
91629162
EV_VIEW_RULE_EXPR_EXPAND_NUM_FROM_ID_FUNCTION_DEF(procedures) {return rd_ev_view_rule_expr_num_from_id__debug_info_tables(id, user_data, RDI_SectionKind_Procedures); }
91639163

9164+
E_LOOKUP_INFO_FUNCTION_DEF(watch_group)
9165+
{
9166+
E_LookupInfo result = {0};
9167+
Temp scratch = scratch_begin(&arena, 1);
9168+
{
9169+
RD_CfgList cfgs_list = rd_cfg_top_level_list_from_string(scratch.arena, str8_lit("watch"));
9170+
RD_CfgArray *cfgs = push_array(arena, RD_CfgArray, 1);
9171+
cfgs[0] = rd_cfg_array_from_list(arena, &cfgs_list);
9172+
result.user_data = cfgs;
9173+
result.idxed_expr_count = cfgs_list.count;
9174+
}
9175+
scratch_end(scratch);
9176+
return result;
9177+
}
9178+
9179+
E_LOOKUP_FUNCTION_DEF(watch_group)
9180+
{
9181+
E_Lookup result = {{&e_irnode_nil}};
9182+
if(kind == E_ExprKind_ArrayIndex)
9183+
{
9184+
Temp scratch = scratch_begin(&arena, 1);
9185+
RD_CfgArray *cfgs = (RD_CfgArray *)user_data;
9186+
E_IRTreeAndType rhs_irtree = e_irtree_and_type_from_expr(scratch.arena, rhs);
9187+
E_OpList rhs_oplist = e_oplist_from_irtree(scratch.arena, rhs_irtree.root);
9188+
String8 rhs_bytecode = e_bytecode_from_oplist(scratch.arena, &rhs_oplist);
9189+
E_Interpretation rhs_interp = e_interpret(rhs_bytecode);
9190+
E_Value rhs_value = rhs_interp.value;
9191+
if(0 <= rhs_value.u64 && rhs_value.u64 < cfgs->count)
9192+
{
9193+
RD_Cfg *watch = cfgs->v[rhs_value.u64];
9194+
String8 expr_string = rd_cfg_child_from_string(watch, str8_lit("expression"))->first->string;
9195+
E_Expr *expr = e_parse_expr_from_text(arena, expr_string);
9196+
result.irtree_and_type = e_irtree_and_type_from_expr(arena, expr);
9197+
}
9198+
scratch_end(scratch);
9199+
}
9200+
return result;
9201+
}
9202+
91649203
E_LOOKUP_INFO_FUNCTION_DEF(top_level_cfg)
91659204
{
91669205
E_LookupInfo result = {0};
@@ -9169,7 +9208,8 @@ E_LOOKUP_INFO_FUNCTION_DEF(top_level_cfg)
91699208
E_IRTreeAndType lhs_irtree = e_irtree_and_type_from_expr(scratch.arena, lhs);
91709209
E_TypeKey lhs_type_key = lhs_irtree.type_key;
91719210
E_Type *lhs_type = e_type_from_key(scratch.arena, lhs_type_key);
9172-
RD_CfgList cfgs_list = rd_cfg_top_level_list_from_string(scratch.arena, lhs_type->name);
9211+
String8 cfg_name = rd_singular_from_code_name_plural(lhs_type->name);
9212+
RD_CfgList cfgs_list = rd_cfg_top_level_list_from_string(scratch.arena, cfg_name);
91739213
RD_CfgArray *cfgs = push_array(arena, RD_CfgArray, 1);
91749214
cfgs[0] = rd_cfg_array_from_list(arena, &cfgs_list);
91759215
result.user_data = cfgs;
@@ -9660,22 +9700,11 @@ rd_append_value_strings_from_eval(Arena *arena, EV_StringFlags flags, U32 defaul
96609700
}
96619701
}
96629702

9663-
//- rjf: member evaluations -> display member info
9664-
if(eval.mode == E_Mode_Null && !e_type_key_match(e_type_key_zero(), eval.type_key) && member != &e_member_nil)
9665-
{
9666-
U64 member_byte_size = e_type_byte_size_from_key(eval.type_key);
9667-
String8 offset_string = str8_from_u64(arena, member->off, radix, 0, 0);
9668-
String8 size_string = str8_from_u64(arena, member_byte_size, radix, 0, 0);
9669-
str8_list_pushf(arena, out, "member (%S offset, %S byte%s)", offset_string, size_string, member_byte_size == 1 ? "" : "s");
9670-
}
9671-
9672-
//- rjf: type evaluations -> display type basic information
9673-
else if(eval.mode == E_Mode_Null && !e_type_key_match(e_type_key_zero(), eval.type_key) && eval.expr->kind != E_ExprKind_MemberAccess)
9703+
//- rjf: type evaluations -> display type string
9704+
if(eval.mode == E_Mode_Null && !e_type_key_match(e_type_key_zero(), eval.type_key))
96749705
{
9675-
String8 basic_type_kind_string = e_kind_basic_string_table[e_type_kind_from_key(eval.type_key)];
9676-
U64 byte_size = e_type_byte_size_from_key(eval.type_key);
9677-
String8 size_string = str8_from_u64(arena, byte_size, radix, 0, 0);
9678-
str8_list_pushf(arena, out, "%S (%S byte%s)", basic_type_kind_string, size_string, byte_size == 1 ? "" : "s");
9706+
String8 string = e_type_string_from_key(arena, eval.type_key);
9707+
str8_list_push(arena, out, string);
96799708
}
96809709

96819710
//- rjf: value/offset evaluations
@@ -11945,6 +11974,21 @@ rd_vocabulary_info_from_code_name(String8 code_name)
1194511974
return info;
1194611975
}
1194711976

11977+
internal RD_VocabularyInfo *
11978+
rd_vocabulary_info_from_code_name_plural(String8 code_name_plural)
11979+
{
11980+
RD_VocabularyInfo *info = &rd_nil_vocabulary_info;
11981+
for EachElement(idx, rd_vocabulary_info_table)
11982+
{
11983+
if(str8_match(rd_vocabulary_info_table[idx].code_name_plural, code_name_plural, 0))
11984+
{
11985+
info = &rd_vocabulary_info_table[idx];
11986+
break;
11987+
}
11988+
}
11989+
return info;
11990+
}
11991+
1194811992
////////////////////////////////
1194911993
//~ rjf: Continuous Frame Requests
1195011994

@@ -13163,7 +13207,6 @@ rd_frame(void)
1316313207
//- rjf: choose set of evallable config names
1316413208
String8 evallable_cfg_names[] =
1316513209
{
13166-
str8_lit("watch"),
1316713210
str8_lit("breakpoint"),
1316813211
str8_lit("watch_pin"),
1316913212
str8_lit("target"),
@@ -13340,6 +13383,16 @@ rd_frame(void)
1334013383
}
1334113384
}
1334213385

13386+
//- rjf: add macros for watch groups
13387+
{
13388+
String8 collection_name = str8_lit("watches");
13389+
E_TypeKey collection_type_key = e_type_key_cons(.kind = E_TypeKind_Set, .name = collection_name);
13390+
E_Expr *expr = e_push_expr(scratch.arena, E_ExprKind_LeafOffset, 0);
13391+
expr->type_key = collection_type_key;
13392+
e_string2expr_map_insert(scratch.arena, ctx->macro_map, collection_name, expr);
13393+
e_lookup_rule_map_insert_new(scratch.arena, ctx->lookup_rule_map, collection_name, E_LOOKUP_INFO_FUNCTION_NAME(watch_group), E_LOOKUP_FUNCTION_NAME(watch_group));
13394+
}
13395+
1334313396
//- rjf: add macros for collections (new @cfg)
1334413397
for EachElement(cfg_name_idx, evallable_cfg_names)
1334513398
{
@@ -13835,6 +13888,15 @@ rd_frame(void)
1383513888
rd_cfg_release(recent_projects.last->v);
1383613889
}
1383713890
}
13891+
13892+
//- TODO(rjf): @cfg set up debugging config state
13893+
if(kind == RD_CmdKind_OpenUser)
13894+
{
13895+
RD_Cfg *user = rd_cfg_child_from_string(rd_state->root_cfg, str8_lit("user"));
13896+
RD_Cfg *watch = rd_cfg_new(user, str8_lit("watch"));
13897+
RD_Cfg *expr = rd_cfg_new(watch, str8_lit("expression"));
13898+
rd_cfg_new(expr, str8_lit("basics"));
13899+
}
1383813900
}break;
1383913901

1384013902
//- rjf: writing config changes

src/raddbg/raddbg_core.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1416,10 +1416,12 @@ internal DR_FancyStringList rd_stop_explanation_fstrs_from_ctrl_event(Arena *are
14161416
//~ rjf: Vocabulary Info Lookups
14171417

14181418
internal RD_VocabularyInfo *rd_vocabulary_info_from_code_name(String8 code_name);
1419+
internal RD_VocabularyInfo *rd_vocabulary_info_from_code_name_plural(String8 code_name_plural);
14191420
#define rd_plural_from_code_name(code_name) (rd_vocabulary_info_from_code_name(code_name)->code_name_plural)
14201421
#define rd_display_from_code_name(code_name) (rd_vocabulary_info_from_code_name(code_name)->display_name)
14211422
#define rd_display_plural_from_code_name(code_name) (rd_vocabulary_info_from_code_name(code_name)->display_name_plural)
14221423
#define rd_icon_kind_from_code_name(code_name) (rd_vocabulary_info_from_code_name(code_name)->icon_kind)
1424+
#define rd_singular_from_code_name_plural(code_name_plural) (rd_vocabulary_info_from_code_name_plural(code_name_plural)->code_name)
14231425

14241426
////////////////////////////////
14251427
//~ rjf: Continuous Frame Requests

src/raddbg/raddbg_main.c

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -596,14 +596,6 @@ entry_point(CmdLine *cmd_line)
596596
rd_init(cmd_line);
597597
}
598598

599-
//- TODO(rjf): @cfg set up debugging config state
600-
{
601-
RD_Cfg *user = rd_cfg_child_from_string(rd_state->root_cfg, str8_lit("user"));
602-
RD_Cfg *watch = rd_cfg_new(user, str8_lit("watch"));
603-
RD_Cfg *expr = rd_cfg_new(watch, str8_lit("expression"));
604-
rd_cfg_new(expr, str8_lit("basics"));
605-
}
606-
607599
//- rjf: setup initial target from command line args
608600
{
609601
String8List args = cmd_line->inputs;

0 commit comments

Comments
 (0)