mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-06-13 07:32:23 -07:00
checkpoint on eval / eval-viz simplification pass
This commit is contained in:
+69
-6
@@ -4596,7 +4596,7 @@ df_append_viz_blocks_for_parent__rec(Arena *arena, DF_EvalView *eval_view, DF_Ex
|
||||
{
|
||||
DF_EvalVizBlock *block = df_eval_viz_block_begin(arena, DF_EvalVizBlockKind_Root, parent_key, key, depth);
|
||||
block->eval = eval;
|
||||
block->cfg_table = *cfg_table;
|
||||
block->cfg_table = cfg_table;
|
||||
block->string = eval_string;
|
||||
block->visual_idx_range = r1u64(key.child_num-1, key.child_num+0);
|
||||
block->semantic_idx_range = r1u64(key.child_num-1, key.child_num+0);
|
||||
@@ -4744,7 +4744,7 @@ df_append_viz_blocks_for_parent__rec(Arena *arena, DF_EvalView *eval_view, DF_Ex
|
||||
{
|
||||
last_vb->eval = udt_eval;
|
||||
last_vb->string = eval_string;
|
||||
last_vb->cfg_table = *cfg_table;
|
||||
last_vb->cfg_table = cfg_table;
|
||||
last_vb->visual_idx_range = last_vb->semantic_idx_range = r1u64(0, filtered_data_members.count);
|
||||
}
|
||||
for(DF_ExpandNode *child = node->first; child != 0; child = child->next)
|
||||
@@ -4801,7 +4801,7 @@ df_append_viz_blocks_for_parent__rec(Arena *arena, DF_EvalView *eval_view, DF_Ex
|
||||
{
|
||||
last_vb->eval = udt_eval;
|
||||
last_vb->string = eval_string;
|
||||
last_vb->cfg_table = *cfg_table;
|
||||
last_vb->cfg_table = cfg_table;
|
||||
last_vb->visual_idx_range = last_vb->semantic_idx_range = r1u64(0, type->count);
|
||||
}
|
||||
df_eval_viz_block_end(list_out, last_vb);
|
||||
@@ -4858,7 +4858,7 @@ df_append_viz_blocks_for_parent__rec(Arena *arena, DF_EvalView *eval_view, DF_Ex
|
||||
{
|
||||
last_vb->eval = udt_eval;
|
||||
last_vb->string = eval_string;
|
||||
last_vb->cfg_table = *cfg_table;
|
||||
last_vb->cfg_table = cfg_table;
|
||||
last_vb->link_member_type_key = link_member->type_key;
|
||||
last_vb->link_member_off = link_member->off;
|
||||
last_vb->visual_idx_range = r1u64(0, link_bases.count);
|
||||
@@ -4923,7 +4923,7 @@ df_append_viz_blocks_for_parent__rec(Arena *arena, DF_EvalView *eval_view, DF_Ex
|
||||
{
|
||||
last_vb->eval = arr_eval;
|
||||
last_vb->string = eval_string;
|
||||
last_vb->cfg_table = *cfg_table;
|
||||
last_vb->cfg_table = cfg_table;
|
||||
last_vb->visual_idx_range = last_vb->semantic_idx_range = r1u64(0, array_count);
|
||||
}
|
||||
for(DF_ExpandNode *child = node->first; child != 0; child = child->next)
|
||||
@@ -5149,7 +5149,7 @@ df_parent_key_from_viz_block_list_row_num(DF_EvalVizBlockList *blocks, S64 row_n
|
||||
//- rjf: viz row list building
|
||||
|
||||
internal DF_EvalVizRow *
|
||||
df_eval_viz_row_list_push_new(Arena *arena, DF_EvalVizWindowedRowList *rows, DF_EvalVizBlock *block, DF_ExpandKey key, E_Eval eval)
|
||||
df_eval_viz_row_list_push_new(Arena *arena, DF_EvalView *eval_view, DF_EvalVizWindowedRowList *rows, DF_EvalVizBlock *block, DF_ExpandKey key, E_Eval eval)
|
||||
{
|
||||
// rjf: push
|
||||
DF_EvalVizRow *row = push_array(arena, DF_EvalVizRow, 1);
|
||||
@@ -5203,6 +5203,69 @@ df_eval_viz_row_list_push_new(Arena *arena, DF_EvalVizWindowedRowList *rows, DF_
|
||||
}
|
||||
}
|
||||
|
||||
// rjf: fill view-rule-derived info
|
||||
{
|
||||
// rjf: pick cfg table
|
||||
DF_CfgTable *cfg_table = block->cfg_table;
|
||||
{
|
||||
String8 row_view_rules = df_eval_view_rule_from_key(eval_view, row->key);
|
||||
if(row_view_rules.size != 0)
|
||||
{
|
||||
cfg_table = push_array(arena, DF_CfgTable, 1);
|
||||
*cfg_table = df_cfg_table_from_inheritance(arena, cfg_table);
|
||||
df_cfg_table_push_unparsed_string(arena, cfg_table, row_view_rules, DF_CfgSrc_User);
|
||||
}
|
||||
}
|
||||
|
||||
// rjf: determine if view rules force expandability
|
||||
B32 expandability_required = 0;
|
||||
for(DF_CfgVal *val = cfg_table->first_val; val != 0 && val != &df_g_nil_cfg_val; val = val->linear_next)
|
||||
{
|
||||
DF_CoreViewRuleSpec *spec = df_core_view_rule_spec_from_string(val->string);
|
||||
if(spec->info.flags & DF_CoreViewRuleSpecInfoFlag_Expandable)
|
||||
{
|
||||
expandability_required = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// rjf: determine row ui hook to use for this row
|
||||
DF_GfxViewRuleSpec *value_ui_rule_spec = &df_g_nil_gfx_view_rule_spec;
|
||||
DF_CfgNode *value_ui_rule_node= &df_g_nil_cfg_node;
|
||||
for(DF_CfgVal *val = cfg_table->first_val; val != 0 && val != &df_g_nil_cfg_val; val = val->linear_next)
|
||||
{
|
||||
DF_GfxViewRuleSpec *spec = df_gfx_view_rule_spec_from_string(val->string);
|
||||
if(spec->info.flags & DF_GfxViewRuleSpecInfoFlag_RowUI)
|
||||
{
|
||||
value_ui_rule_spec = spec;
|
||||
value_ui_rule_node = val->last;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// rjf: determine block ui hook to use for this row
|
||||
DF_GfxViewRuleSpec *expand_ui_rule_spec = &df_g_nil_gfx_view_rule_spec;
|
||||
DF_CfgNode *expand_ui_rule_node = &df_g_nil_cfg_node;
|
||||
for(DF_CfgVal *val = cfg_table->first_val; val != 0 && val != &df_g_nil_cfg_val; val = val->linear_next)
|
||||
{
|
||||
DF_GfxViewRuleSpec *spec = df_gfx_view_rule_spec_from_string(val->string);
|
||||
if(spec->info.flags & DF_GfxViewRuleSpecInfoFlag_BlockUI)
|
||||
{
|
||||
expand_ui_rule_spec = spec;
|
||||
expand_ui_rule_node = val->last;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// rjf: fill
|
||||
if(expandability_required) { row->flags |= DF_EvalVizRowFlag_CanExpand; }
|
||||
row->cfg_table = cfg_table;
|
||||
row->value_ui_rule_node = value_ui_rule_node;
|
||||
row->value_ui_rule_spec = value_ui_rule_spec;
|
||||
row->expand_ui_rule_node = expand_ui_rule_node;
|
||||
row->expand_ui_rule_spec = expand_ui_rule_spec;
|
||||
}
|
||||
|
||||
return row;
|
||||
}
|
||||
|
||||
|
||||
@@ -711,7 +711,7 @@ struct DF_EvalVizBlock
|
||||
FZY_ItemArray fzy_backing_items;
|
||||
|
||||
// rjf: visualization config extensions
|
||||
DF_CfgTable cfg_table;
|
||||
DF_CfgTable *cfg_table;
|
||||
E_TypeKey link_member_type_key;
|
||||
U64 link_member_off;
|
||||
};
|
||||
@@ -748,8 +748,6 @@ enum
|
||||
DF_EvalVizStringFlag_ReadOnlyDisplayRules = (1<<0),
|
||||
};
|
||||
|
||||
// TODO(rjf): move viz-row stuff to gfx layer
|
||||
|
||||
typedef U32 DF_EvalVizRowFlags;
|
||||
enum
|
||||
{
|
||||
@@ -772,13 +770,12 @@ struct DF_EvalVizRow
|
||||
|
||||
// rjf: evaluation artifacts
|
||||
E_Eval eval;
|
||||
E_Member *member;
|
||||
|
||||
// rjf: basic visualization contents
|
||||
DF_CfgTable *cfg_table;
|
||||
String8 display_expr;
|
||||
String8 edit_expr;
|
||||
String8 display_value;
|
||||
String8 edit_value;
|
||||
E_TypeKeyList inherited_type_key_chain;
|
||||
|
||||
// rjf: variable-size & hook info
|
||||
U64 size_in_rows;
|
||||
@@ -1614,7 +1611,7 @@ internal DF_ExpandKey df_key_from_viz_block_list_row_num(DF_EvalVizBlockList *bl
|
||||
internal DF_ExpandKey df_parent_key_from_viz_block_list_row_num(DF_EvalVizBlockList *blocks, S64 row_num);
|
||||
|
||||
//- rjf: viz row list building
|
||||
internal DF_EvalVizRow *df_eval_viz_row_list_push_new(Arena *arena, DF_EvalVizWindowedRowList *rows, DF_EvalVizBlock *block, DF_ExpandKey key, E_Eval eval);
|
||||
internal DF_EvalVizRow *df_eval_viz_row_list_push_new(Arena *arena, DF_EvalView *eval_view, DF_EvalVizWindowedRowList *rows, DF_EvalVizBlock *block, DF_ExpandKey key, E_Eval eval);
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Main State Accessors/Mutators
|
||||
|
||||
+42
-142
@@ -6134,7 +6134,7 @@ df_window_update_and_render(Arena *arena, DF_Window *ws, DF_CmdList *cmds)
|
||||
DF_ExpandKey key = df_expand_key_make(df_hash_from_expand_key(parent_key), 1);
|
||||
DF_EvalVizBlockList viz_blocks = df_eval_viz_block_list_from_eval_view_expr_keys(scratch.arena, eval_view, expr, parent_key, key);
|
||||
U32 default_radix = (eval.space == E_Space_Regs ? 16 : 10);
|
||||
DF_EvalVizWindowedRowList viz_rows = df_eval_viz_windowed_row_list_from_viz_block_list(scratch.arena, scope, eval_view, default_radix, ui_top_font(), ui_top_font_size(), r1s64(0, 50), &viz_blocks);
|
||||
DF_EvalVizWindowedRowList viz_rows = df_eval_viz_windowed_row_list_from_viz_block_list(scratch.arena, eval_view, default_radix, ui_top_font(), ui_top_font_size(), r1s64(0, 50), &viz_blocks);
|
||||
|
||||
//- rjf: animate
|
||||
{
|
||||
@@ -6209,6 +6209,10 @@ df_window_update_and_render(Arena *arena, DF_Window *ws, DF_CmdList *cmds)
|
||||
//- rjf: build rows
|
||||
for(DF_EvalVizRow *row = viz_rows.first; row != 0; row = row->next)
|
||||
{
|
||||
//- rjf: unpack row
|
||||
String8 row_edit_value = df_value_string_from_eval(scratch.arena, 0, default_radix, ui_top_font(), ui_top_font_size(), 500.f, row->eval, row->member, row->cfg_table);
|
||||
String8 row_display_value = df_value_string_from_eval(scratch.arena, DF_EvalVizStringFlag_ReadOnlyDisplayRules, default_radix, ui_top_font(), ui_top_font_size(), 500.f, row->eval, row->member, row->cfg_table);
|
||||
|
||||
//- rjf: calculate width of exp row
|
||||
if(row == viz_rows.first)
|
||||
{
|
||||
@@ -6274,7 +6278,7 @@ df_window_update_and_render(Arena *arena, DF_Window *ws, DF_CmdList *cmds)
|
||||
DF_LineEditFlag_DisplayStringIsCode|
|
||||
DF_LineEditFlag_PreferDisplayString|
|
||||
DF_LineEditFlag_Border,
|
||||
0, 0, &ws->hover_eval_txt_cursor, &ws->hover_eval_txt_mark, ws->hover_eval_txt_buffer, sizeof(ws->hover_eval_txt_buffer), &ws->hover_eval_txt_size, 0, row->edit_value, "%S###val_%I64x", row->display_value, row_hash);
|
||||
0, 0, &ws->hover_eval_txt_cursor, &ws->hover_eval_txt_mark, ws->hover_eval_txt_buffer, sizeof(ws->hover_eval_txt_buffer), &ws->hover_eval_txt_size, 0, row_edit_value, "%S###val_%I64x", row_display_value, row_hash);
|
||||
if(ui_pressed(sig))
|
||||
{
|
||||
ws->hover_eval_focused = 1;
|
||||
@@ -6301,7 +6305,7 @@ df_window_update_and_render(Arena *arena, DF_Window *ws, DF_CmdList *cmds)
|
||||
ui_set_next_palette(ui_build_palette(ui_top_palette(), .background = rgba));
|
||||
ui_set_next_flags(UI_BoxFlag_DrawBackground);
|
||||
}
|
||||
df_code_label(1.f, 1, df_rgba_from_theme_color(DF_ThemeColor_CodeDefault), row->display_value);
|
||||
df_code_label(1.f, 1, df_rgba_from_theme_color(DF_ThemeColor_CodeDefault), row_display_value);
|
||||
}
|
||||
}
|
||||
if(row == viz_rows.first)
|
||||
@@ -8280,7 +8284,7 @@ df_window_update_and_render(Arena *arena, DF_Window *ws, DF_CmdList *cmds)
|
||||
//~ rjf: Eval Viz
|
||||
|
||||
internal String8
|
||||
df_eval_escaped_from_raw_string(Arena *arena, String8 raw)
|
||||
df_escaped_from_raw_string(Arena *arena, String8 raw)
|
||||
{
|
||||
Temp scratch = scratch_begin(&arena, 1);
|
||||
String8List parts = {0};
|
||||
@@ -8323,7 +8327,7 @@ df_eval_escaped_from_raw_string(Arena *arena, String8 raw)
|
||||
}
|
||||
|
||||
internal String8List
|
||||
df_single_line_eval_value_strings_from_eval(Arena *arena, DF_EvalVizStringFlags flags, U32 default_radix, F_Tag font, F32 font_size, F32 max_size, S32 depth, E_Eval eval, E_Member *opt_member, DF_CfgTable *cfg_table)
|
||||
df_value_strings_from_eval(Arena *arena, DF_EvalVizStringFlags flags, U32 default_radix, F_Tag font, F32 font_size, F32 max_size, S32 depth, E_Eval eval, E_Member *opt_member, DF_CfgTable *cfg_table)
|
||||
{
|
||||
ProfBeginFunction();
|
||||
String8List list = {0};
|
||||
@@ -8432,7 +8436,7 @@ df_single_line_eval_value_strings_from_eval(Arena *arena, DF_EvalVizStringFlags
|
||||
case 2: {raw_text = str8_from_16(arena, str16((U16 *)text_slice.data.str, text_slice.data.size/sizeof(U16)));}break;
|
||||
case 4: {raw_text = str8_from_32(arena, str32((U32 *)text_slice.data.str, text_slice.data.size/sizeof(U32)));}break;
|
||||
}
|
||||
String8 text = df_eval_escaped_from_raw_string(arena, raw_text);
|
||||
String8 text = df_escaped_from_raw_string(arena, raw_text);
|
||||
space_taken += f_dim_from_tag_size_string(font, font_size, 0, 0, text).x;
|
||||
space_taken += 2*f_dim_from_tag_size_string(font, font_size, 0, 0, str8_lit("\"")).x;
|
||||
str8_list_push(arena, &list, str8_lit("\""));
|
||||
@@ -8460,7 +8464,7 @@ df_single_line_eval_value_strings_from_eval(Arena *arena, DF_EvalVizStringFlags
|
||||
pted_eval.mode = E_Mode_Offset;
|
||||
pted_eval.space = value_eval.space;
|
||||
pted_eval.value = value_eval.value;
|
||||
String8List pted_strs = df_single_line_eval_value_strings_from_eval(arena, flags, default_radix, font, font_size, max_size-space_taken, depth+1, pted_eval, opt_member, cfg_table);
|
||||
String8List pted_strs = df_value_strings_from_eval(arena, flags, default_radix, font, font_size, max_size-space_taken, depth+1, pted_eval, opt_member, cfg_table);
|
||||
if(pted_strs.total_size == 0)
|
||||
{
|
||||
String8 unknown = str8_lit("???");
|
||||
@@ -8535,7 +8539,7 @@ df_single_line_eval_value_strings_from_eval(Arena *arena, DF_EvalVizStringFlags
|
||||
case 2: {raw_text = str8_from_16(arena, str16((U16 *)text_data.str, text_data.size/sizeof(U16)));}break;
|
||||
case 4: {raw_text = str8_from_32(arena, str32((U32 *)text_data.str, text_data.size/sizeof(U32)));}break;
|
||||
}
|
||||
String8 text = df_eval_escaped_from_raw_string(arena, raw_text);
|
||||
String8 text = df_escaped_from_raw_string(arena, raw_text);
|
||||
space_taken += f_dim_from_tag_size_string(font, font_size, 0, 0, text).x;
|
||||
space_taken += 2*f_dim_from_tag_size_string(font, font_size, 0, 0, str8_lit("\"")).x;
|
||||
str8_list_push(arena, &list, str8_lit("\""));
|
||||
@@ -8560,7 +8564,7 @@ df_single_line_eval_value_strings_from_eval(Arena *arena, DF_EvalVizStringFlags
|
||||
for(U64 idx = 0; idx < array_count && max_size > space_taken; idx += 1)
|
||||
{
|
||||
E_Eval element_eval = e_element_eval_from_array_eval_index(eval, idx);
|
||||
String8List element_strs = df_single_line_eval_value_strings_from_eval(arena, flags, default_radix, font, font_size, max_size-space_taken, depth+1, element_eval, opt_member, cfg_table);
|
||||
String8List element_strs = df_value_strings_from_eval(arena, flags, default_radix, font, font_size, max_size-space_taken, depth+1, element_eval, opt_member, cfg_table);
|
||||
space_taken += f_dim_from_tag_size_string_list(font, font_size, 0, 0, element_strs).x;
|
||||
str8_list_concat_in_place(&list, &element_strs);
|
||||
if(idx+1 < array_count)
|
||||
@@ -8619,7 +8623,7 @@ df_single_line_eval_value_strings_from_eval(Arena *arena, DF_EvalVizStringFlags
|
||||
member_eval.space = eval.space;
|
||||
member_eval.value = eval.value;
|
||||
member_eval.value.u64 += mem->off;
|
||||
String8List member_strs = df_single_line_eval_value_strings_from_eval(arena, flags, default_radix, font, font_size, max_size-space_taken, depth+1, member_eval, opt_member, cfg_table);
|
||||
String8List member_strs = df_value_strings_from_eval(arena, flags, default_radix, font, font_size, max_size-space_taken, depth+1, member_eval, opt_member, cfg_table);
|
||||
space_taken += f_dim_from_tag_size_string_list(font, font_size, 0, 0, member_strs).x;
|
||||
str8_list_concat_in_place(&list, &member_strs);
|
||||
if(member_idx+1 < filtered_data_members.count)
|
||||
@@ -8652,8 +8656,18 @@ df_single_line_eval_value_strings_from_eval(Arena *arena, DF_EvalVizStringFlags
|
||||
return list;
|
||||
}
|
||||
|
||||
internal String8
|
||||
df_value_string_from_eval(Arena *arena, DF_EvalVizStringFlags flags, U32 default_radix, F_Tag font, F32 font_size, F32 max_size, E_Eval eval, E_Member *opt_member, DF_CfgTable *cfg_table)
|
||||
{
|
||||
Temp scratch = scratch_begin(&arena, 1);
|
||||
String8List parts = df_value_strings_from_eval(scratch.arena, flags, default_radix, font, font_size, max_size, 0, eval, opt_member, cfg_table);
|
||||
String8 result = str8_list_join(arena, &parts, 0);
|
||||
scratch_end(scratch);
|
||||
return result;
|
||||
}
|
||||
|
||||
internal DF_EvalVizWindowedRowList
|
||||
df_eval_viz_windowed_row_list_from_viz_block_list(Arena *arena, DI_Scope *scope, DF_EvalView *eval_view, U32 default_radix, F_Tag font, F32 font_size, Rng1S64 visible_range, DF_EvalVizBlockList *blocks)
|
||||
df_eval_viz_windowed_row_list_from_viz_block_list(Arena *arena, DF_EvalView *eval_view, U32 default_radix, F_Tag font, F32 font_size, Rng1S64 visible_range, DF_EvalVizBlockList *blocks)
|
||||
{
|
||||
ProfBeginFunction();
|
||||
Temp scratch = scratch_begin(&arena, 1);
|
||||
@@ -8677,52 +8691,6 @@ df_eval_viz_windowed_row_list_from_viz_block_list(Arena *arena, DI_Scope *scope,
|
||||
Rng1S64 block_semantic_range = r1s64(semantic_idx_off, semantic_idx_off + block_num_semantic_rows);
|
||||
E_TypeKind block_type_kind = e_type_kind_from_key(block->eval.type_key);
|
||||
|
||||
//////////////////////////////
|
||||
//- rjf: determine if view rules force expandability
|
||||
//
|
||||
B32 expandability_required = 0;
|
||||
for(DF_CfgVal *val = block->cfg_table.first_val; val != 0 && val != &df_g_nil_cfg_val; val = val->linear_next)
|
||||
{
|
||||
DF_CoreViewRuleSpec *spec = df_core_view_rule_spec_from_string(val->string);
|
||||
if(spec->info.flags & DF_CoreViewRuleSpecInfoFlag_Expandable)
|
||||
{
|
||||
expandability_required = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
//////////////////////////////
|
||||
//- rjf: grab default row ui view rule to use for this block
|
||||
//
|
||||
DF_GfxViewRuleSpec *value_ui_rule_spec = &df_g_nil_gfx_view_rule_spec;
|
||||
DF_CfgNode *value_ui_rule_node= &df_g_nil_cfg_node;
|
||||
for(DF_CfgVal *val = block->cfg_table.first_val; val != 0 && val != &df_g_nil_cfg_val; val = val->linear_next)
|
||||
{
|
||||
DF_GfxViewRuleSpec *spec = df_gfx_view_rule_spec_from_string(val->string);
|
||||
if(spec->info.flags & DF_GfxViewRuleSpecInfoFlag_RowUI)
|
||||
{
|
||||
value_ui_rule_spec = spec;
|
||||
value_ui_rule_node = val->last;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
//////////////////////////////
|
||||
//- rjf: grab expand ui view rule to use for this block's rows
|
||||
//
|
||||
DF_GfxViewRuleSpec *expand_ui_rule_spec = &df_g_nil_gfx_view_rule_spec;
|
||||
DF_CfgNode *expand_ui_rule_node = &df_g_nil_cfg_node;
|
||||
for(DF_CfgVal *val = block->cfg_table.first_val; val != 0 && val != &df_g_nil_cfg_val; val = val->linear_next)
|
||||
{
|
||||
DF_GfxViewRuleSpec *spec = df_gfx_view_rule_spec_from_string(val->string);
|
||||
if(spec->info.flags & DF_GfxViewRuleSpecInfoFlag_BlockUI)
|
||||
{
|
||||
expand_ui_rule_spec = spec;
|
||||
expand_ui_rule_node = val->last;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
//////////////////////////////
|
||||
//- rjf: get skip/chop of block's index range
|
||||
//
|
||||
@@ -8764,7 +8732,7 @@ df_eval_viz_windowed_row_list_from_viz_block_list(Arena *arena, DI_Scope *scope,
|
||||
//////////////////////////////
|
||||
//- rjf: produce rows, depending on block's kind
|
||||
//
|
||||
switch(block->kind)
|
||||
if(visible_idx_range.max > visible_idx_range.min) switch(block->kind)
|
||||
{
|
||||
default:{}break;
|
||||
|
||||
@@ -8772,37 +8740,23 @@ df_eval_viz_windowed_row_list_from_viz_block_list(Arena *arena, DI_Scope *scope,
|
||||
//- rjf: null -> empty row
|
||||
//
|
||||
case DF_EvalVizBlockKind_Null:
|
||||
if(visible_idx_range.max > visible_idx_range.min)
|
||||
{
|
||||
E_Eval eval = zero_struct;
|
||||
df_eval_viz_row_list_push_new(arena, &list, block, block->key, eval);
|
||||
df_eval_viz_row_list_push_new(arena, eval_view, &list, block, block->key, eval);
|
||||
}break;
|
||||
|
||||
//////////////////////////////
|
||||
//- rjf: root -> just a single row. possibly expandable.
|
||||
//
|
||||
case DF_EvalVizBlockKind_Root:
|
||||
if(visible_idx_range.max > visible_idx_range.min)
|
||||
{
|
||||
String8List display_strings = df_single_line_eval_value_strings_from_eval(scratch.arena, DF_EvalVizStringFlag_ReadOnlyDisplayRules, default_radix, font, font_size, 500, 0, block->eval, block->member, &block->cfg_table);
|
||||
String8List edit_strings = df_single_line_eval_value_strings_from_eval(scratch.arena, 0, default_radix, font, font_size, 500, 0, block->eval, block->member, &block->cfg_table);
|
||||
DF_EvalVizRow *row = df_eval_viz_row_list_push_new(arena, &list, block, block->key, block->eval);
|
||||
DF_EvalVizRow *row = df_eval_viz_row_list_push_new(arena, eval_view, &list, block, block->key, block->eval);
|
||||
row->display_expr = block->string;
|
||||
row->edit_expr = block->string;
|
||||
row->display_value = str8_list_join(arena, &display_strings, 0);
|
||||
row->edit_value = str8_list_join(arena, &edit_strings, 0);
|
||||
row->value_ui_rule_node = value_ui_rule_node;
|
||||
row->value_ui_rule_spec = value_ui_rule_spec;
|
||||
row->expand_ui_rule_node = expand_ui_rule_node;
|
||||
row->expand_ui_rule_spec = expand_ui_rule_spec;
|
||||
if(block->member && block->member->kind == E_MemberKind_Padding)
|
||||
{
|
||||
row->flags |= DF_EvalVizRowFlag_ExprIsSpecial;
|
||||
}
|
||||
if(expandability_required)
|
||||
{
|
||||
row->flags |= DF_EvalVizRowFlag_CanExpand;
|
||||
}
|
||||
}break;
|
||||
|
||||
//////////////////////////////
|
||||
@@ -8812,7 +8766,7 @@ df_eval_viz_windowed_row_list_from_viz_block_list(Arena *arena, DI_Scope *scope,
|
||||
if(block_type_kind != E_TypeKind_Null)
|
||||
{
|
||||
E_MemberArray data_members = e_type_data_members_from_key(scratch.arena, block->eval.type_key);
|
||||
E_MemberArray filtered_data_members = df_filtered_data_members_from_members_cfg_table(scratch.arena, data_members, &block->cfg_table);
|
||||
E_MemberArray filtered_data_members = df_filtered_data_members_from_members_cfg_table(scratch.arena, data_members, block->cfg_table);
|
||||
for(U64 idx = visible_idx_range.min; idx < visible_idx_range.max && idx < filtered_data_members.count; idx += 1)
|
||||
{
|
||||
E_Member *member = &filtered_data_members.v[idx];
|
||||
@@ -8832,7 +8786,7 @@ df_eval_viz_windowed_row_list_from_viz_block_list(Arena *arena, DI_Scope *scope,
|
||||
|
||||
// rjf: get view rules
|
||||
String8 view_rule_string = df_eval_view_rule_from_key(eval_view, key);
|
||||
DF_CfgTable view_rule_table = df_cfg_table_from_inheritance(scratch.arena, &block->cfg_table);
|
||||
DF_CfgTable view_rule_table = df_cfg_table_from_inheritance(scratch.arena, block->cfg_table);
|
||||
df_cfg_table_push_unparsed_string(scratch.arena, &view_rule_table, view_rule_string, DF_CfgSrc_User);
|
||||
|
||||
// rjf: apply view rules to eval
|
||||
@@ -8842,26 +8796,14 @@ df_eval_viz_windowed_row_list_from_viz_block_list(Arena *arena, DI_Scope *scope,
|
||||
}
|
||||
|
||||
// rjf: build & push row
|
||||
String8List display_strings = df_single_line_eval_value_strings_from_eval(scratch.arena, DF_EvalVizStringFlag_ReadOnlyDisplayRules, default_radix, font, font_size, 500, 0, member_eval, member, &view_rule_table);
|
||||
String8List edit_strings = df_single_line_eval_value_strings_from_eval(scratch.arena, 0, default_radix, font, font_size, 500, 0, member_eval, member, &view_rule_table);
|
||||
DF_EvalVizRow *row = df_eval_viz_row_list_push_new(arena, &list, block, key, member_eval);
|
||||
DF_EvalVizRow *row = df_eval_viz_row_list_push_new(arena, eval_view, &list, block, key, member_eval);
|
||||
row->member = e_type_member_copy(arena, member);
|
||||
if(member->kind == E_MemberKind_Padding)
|
||||
{
|
||||
row->flags |= DF_EvalVizRowFlag_ExprIsSpecial;
|
||||
}
|
||||
row->display_expr = push_str8_copy(arena, member->name);
|
||||
row->edit_expr = push_str8f(arena, "%S.%S", block->string, member->name);
|
||||
row->display_value = str8_list_join(arena, &display_strings, 0);
|
||||
row->edit_value = str8_list_join(arena, &edit_strings, 0);
|
||||
row->value_ui_rule_node = value_ui_rule_node;
|
||||
row->value_ui_rule_spec = value_ui_rule_spec;
|
||||
row->expand_ui_rule_node = expand_ui_rule_node;
|
||||
row->expand_ui_rule_spec = expand_ui_rule_spec;
|
||||
row->inherited_type_key_chain = e_type_key_list_copy(arena, &member->inheritance_key_chain);
|
||||
if(expandability_required)
|
||||
{
|
||||
row->flags |= DF_EvalVizRowFlag_CanExpand;
|
||||
}
|
||||
}
|
||||
}break;
|
||||
|
||||
@@ -8888,7 +8830,7 @@ df_eval_viz_windowed_row_list_from_viz_block_list(Arena *arena, DI_Scope *scope,
|
||||
|
||||
// rjf: get view rules
|
||||
String8 view_rule_string = df_eval_view_rule_from_key(eval_view, key);
|
||||
DF_CfgTable view_rule_table = df_cfg_table_from_inheritance(scratch.arena, &block->cfg_table);
|
||||
DF_CfgTable view_rule_table = df_cfg_table_from_inheritance(scratch.arena, block->cfg_table);
|
||||
df_cfg_table_push_unparsed_string(scratch.arena, &view_rule_table, view_rule_string, DF_CfgSrc_User);
|
||||
|
||||
// rjf: apply view rules to eval
|
||||
@@ -8898,17 +8840,9 @@ df_eval_viz_windowed_row_list_from_viz_block_list(Arena *arena, DI_Scope *scope,
|
||||
}
|
||||
|
||||
// rjf: build & push row
|
||||
String8List display_strings = df_single_line_eval_value_strings_from_eval(scratch.arena, DF_EvalVizStringFlag_ReadOnlyDisplayRules, default_radix, font, font_size, 500, 0, eval, 0, &view_rule_table);
|
||||
String8List edit_strings = df_single_line_eval_value_strings_from_eval(scratch.arena, 0, default_radix, font, font_size, 500, 0, eval, 0, &view_rule_table);
|
||||
DF_EvalVizRow *row = df_eval_viz_row_list_push_new(arena, &list, block, key, eval);
|
||||
DF_EvalVizRow *row = df_eval_viz_row_list_push_new(arena, eval_view, &list, block, key, eval);
|
||||
row->display_expr = push_str8_copy(arena, enum_val->name);
|
||||
row->edit_expr = row->display_expr;
|
||||
row->display_value = str8_list_join(arena, &display_strings, 0);
|
||||
row->edit_value = str8_list_join(arena, &edit_strings, 0);
|
||||
row->value_ui_rule_node = value_ui_rule_node;
|
||||
row->value_ui_rule_spec = value_ui_rule_spec;
|
||||
row->expand_ui_rule_node = expand_ui_rule_node;
|
||||
row->expand_ui_rule_spec = expand_ui_rule_spec;
|
||||
}
|
||||
}break;
|
||||
|
||||
@@ -8930,7 +8864,7 @@ df_eval_viz_windowed_row_list_from_viz_block_list(Arena *arena, DI_Scope *scope,
|
||||
|
||||
// rjf: get view rules
|
||||
String8 view_rule_string = df_eval_view_rule_from_key(eval_view, key);
|
||||
DF_CfgTable view_rule_table = df_cfg_table_from_inheritance(scratch.arena, &block->cfg_table);
|
||||
DF_CfgTable view_rule_table = df_cfg_table_from_inheritance(scratch.arena, block->cfg_table);
|
||||
df_cfg_table_push_unparsed_string(scratch.arena, &view_rule_table, view_rule_string, DF_CfgSrc_User);
|
||||
|
||||
// rjf: apply view rules to eval
|
||||
@@ -8940,21 +8874,9 @@ df_eval_viz_windowed_row_list_from_viz_block_list(Arena *arena, DI_Scope *scope,
|
||||
}
|
||||
|
||||
// rjf: build row
|
||||
String8List display_strings = df_single_line_eval_value_strings_from_eval(scratch.arena, DF_EvalVizStringFlag_ReadOnlyDisplayRules, default_radix, font, font_size, 500, 0, elem_eval, 0, &view_rule_table);
|
||||
String8List edit_strings = df_single_line_eval_value_strings_from_eval(scratch.arena, 0, default_radix, font, font_size, 500, 0, elem_eval, 0, &view_rule_table);
|
||||
DF_EvalVizRow *row = df_eval_viz_row_list_push_new(arena, &list, block, key, elem_eval);
|
||||
DF_EvalVizRow *row = df_eval_viz_row_list_push_new(arena, eval_view, &list, block, key, elem_eval);
|
||||
row->display_expr = push_str8f(arena, "[%I64u]", idx);
|
||||
row->edit_expr = push_str8f(arena, "%S[%I64u]", block->string, idx);
|
||||
row->display_value = str8_list_join(arena, &display_strings, 0);
|
||||
row->edit_value = str8_list_join(arena, &edit_strings, 0);
|
||||
row->value_ui_rule_node = value_ui_rule_node;
|
||||
row->value_ui_rule_spec = value_ui_rule_spec;
|
||||
row->expand_ui_rule_node = expand_ui_rule_node;
|
||||
row->expand_ui_rule_spec = expand_ui_rule_spec;
|
||||
if(expandability_required)
|
||||
{
|
||||
row->flags |= DF_EvalVizRowFlag_CanExpand;
|
||||
}
|
||||
}
|
||||
}break;
|
||||
|
||||
@@ -8985,7 +8907,7 @@ df_eval_viz_windowed_row_list_from_viz_block_list(Arena *arena, DI_Scope *scope,
|
||||
|
||||
// rjf: get view rules
|
||||
String8 view_rule_string = df_eval_view_rule_from_key(eval_view, key);
|
||||
DF_CfgTable view_rule_table = df_cfg_table_from_inheritance(scratch.arena, &block->cfg_table);
|
||||
DF_CfgTable view_rule_table = df_cfg_table_from_inheritance(scratch.arena, block->cfg_table);
|
||||
df_cfg_table_push_unparsed_string(scratch.arena, &view_rule_table, view_rule_string, DF_CfgSrc_User);
|
||||
|
||||
// rjf: apply view rules to eval
|
||||
@@ -8994,21 +8916,9 @@ df_eval_viz_windowed_row_list_from_viz_block_list(Arena *arena, DI_Scope *scope,
|
||||
E_TypeKind link_type_kind = e_type_kind_from_key(link_eval.type_key);
|
||||
|
||||
// rjf: build row
|
||||
String8List display_strings = df_single_line_eval_value_strings_from_eval(scratch.arena, DF_EvalVizStringFlag_ReadOnlyDisplayRules, default_radix, font, font_size, 500, 0, link_eval, 0, &view_rule_table);
|
||||
String8List edit_strings = df_single_line_eval_value_strings_from_eval(scratch.arena, 0, default_radix, font, font_size, 500, 0, link_eval, 0, &view_rule_table);
|
||||
DF_EvalVizRow *row = df_eval_viz_row_list_push_new(arena, &list, block, key, link_eval);
|
||||
DF_EvalVizRow *row = df_eval_viz_row_list_push_new(arena, eval_view, &list, block, key, link_eval);
|
||||
row->display_expr = push_str8f(arena, "[%I64u]", idx);
|
||||
row->edit_expr = push_str8f(arena, "(%S *)0xI64x", node_type_string, link_eval.value.u64);
|
||||
row->display_value = str8_list_join(arena, &display_strings, 0);
|
||||
row->edit_value = str8_list_join(arena, &edit_strings, 0);
|
||||
row->value_ui_rule_node = value_ui_rule_node;
|
||||
row->value_ui_rule_spec = value_ui_rule_spec;
|
||||
row->expand_ui_rule_node = expand_ui_rule_node;
|
||||
row->expand_ui_rule_spec = expand_ui_rule_spec;
|
||||
if(expandability_required)
|
||||
{
|
||||
row->flags |= DF_EvalVizRowFlag_CanExpand;
|
||||
}
|
||||
}
|
||||
}break;
|
||||
|
||||
@@ -9019,14 +8929,12 @@ df_eval_viz_windowed_row_list_from_viz_block_list(Arena *arena, DI_Scope *scope,
|
||||
if(num_skipped_visual < block_num_visual_rows)
|
||||
{
|
||||
DF_ExpandKey key = df_expand_key_make(df_hash_from_expand_key(block->parent_key), 1);
|
||||
DF_EvalVizRow *row = df_eval_viz_row_list_push_new(arena, &list, block, key, block->eval);
|
||||
DF_EvalVizRow *row = df_eval_viz_row_list_push_new(arena, eval_view, &list, block, key, block->eval);
|
||||
row->flags = DF_EvalVizRowFlag_Canvas;
|
||||
row->edit_expr = block->string;
|
||||
row->size_in_rows = dim_1u64(intersect_1u64(visible_idx_range, r1u64(0, dim_1u64(block->visual_idx_range))));
|
||||
row->skipped_size_in_rows= (visible_idx_range.min > block->visual_idx_range.min) ? visible_idx_range.min - block->visual_idx_range.min : 0;
|
||||
row->chopped_size_in_rows= (visible_idx_range.max < block->visual_idx_range.max) ? block->visual_idx_range.max - visible_idx_range.max : 0;
|
||||
row->expand_ui_rule_node = expand_ui_rule_node;
|
||||
row->expand_ui_rule_spec = expand_ui_rule_spec;
|
||||
}break;
|
||||
|
||||
//////////////////////////////
|
||||
@@ -9067,7 +8975,7 @@ df_eval_viz_windowed_row_list_from_viz_block_list(Arena *arena, DI_Scope *scope,
|
||||
|
||||
// rjf: get view rules
|
||||
String8 view_rule_string = df_eval_view_rule_from_key(eval_view, key);
|
||||
DF_CfgTable view_rule_table = df_cfg_table_from_inheritance(scratch.arena, &block->cfg_table);
|
||||
DF_CfgTable view_rule_table = df_cfg_table_from_inheritance(scratch.arena, block->cfg_table);
|
||||
df_cfg_table_push_unparsed_string(scratch.arena, &view_rule_table, view_rule_string, DF_CfgSrc_User);
|
||||
|
||||
// rjf: apply view rules to eval
|
||||
@@ -9077,17 +8985,9 @@ df_eval_viz_windowed_row_list_from_viz_block_list(Arena *arena, DI_Scope *scope,
|
||||
}
|
||||
|
||||
// rjf: build row
|
||||
String8List display_strings = df_single_line_eval_value_strings_from_eval(scratch.arena, DF_EvalVizStringFlag_ReadOnlyDisplayRules, default_radix, font, font_size, 500, 0, eval, 0, &view_rule_table);
|
||||
String8List edit_strings = df_single_line_eval_value_strings_from_eval(scratch.arena, 0, default_radix, font, font_size, 500, 0, eval, 0, &view_rule_table);
|
||||
DF_EvalVizRow *row = df_eval_viz_row_list_push_new(arena, &list, block, key, eval);
|
||||
DF_EvalVizRow *row = df_eval_viz_row_list_push_new(arena, eval_view, &list, block, key, eval);
|
||||
row->display_expr = name;
|
||||
row->edit_expr = name;
|
||||
row->display_value = str8_list_join(arena, &display_strings, 0);
|
||||
row->edit_value = str8_list_join(arena, &edit_strings, 0);
|
||||
row->value_ui_rule_node = value_ui_rule_node;
|
||||
row->value_ui_rule_spec = value_ui_rule_spec;
|
||||
row->expand_ui_rule_node = expand_ui_rule_node;
|
||||
row->expand_ui_rule_spec = expand_ui_rule_spec;
|
||||
}break;
|
||||
}
|
||||
}
|
||||
@@ -11688,7 +11588,7 @@ df_code_slice(DF_Window *ws, DF_CodeSliceParams *params, TxtPt *cursor, TxtPt *m
|
||||
if(!e_type_key_match(e_type_key_zero(), eval.type_key))
|
||||
{
|
||||
DF_CfgTable cfg_table = {0};
|
||||
String8List eval_strings = df_single_line_eval_value_strings_from_eval(scratch.arena, DF_EvalVizStringFlag_ReadOnlyDisplayRules, 10, params->font, params->font_size, params->font_size*60.f, 0, eval, 0, &cfg_table);
|
||||
String8List eval_strings = df_value_strings_from_eval(scratch.arena, DF_EvalVizStringFlag_ReadOnlyDisplayRules, 10, params->font, params->font_size, params->font_size*60.f, 0, eval, 0, &cfg_table);
|
||||
eval_string = str8_list_join(scratch.arena, &eval_strings, 0);
|
||||
}
|
||||
ui_spacer(ui_em(1.5f, 1.f));
|
||||
|
||||
+4
-3
@@ -965,9 +965,10 @@ internal void df_window_update_and_render(Arena *arena, DF_Window *ws, DF_CmdLis
|
||||
////////////////////////////////
|
||||
//~ rjf: Eval Viz
|
||||
|
||||
internal String8 df_eval_escaped_from_raw_string(Arena *arena, String8 raw);
|
||||
internal String8List df_single_line_eval_value_strings_from_eval(Arena *arena, DF_EvalVizStringFlags flags, U32 default_radix, F_Tag font, F32 font_size, F32 max_size, S32 depth, E_Eval eval, E_Member *opt_member, DF_CfgTable *cfg_table);
|
||||
internal DF_EvalVizWindowedRowList df_eval_viz_windowed_row_list_from_viz_block_list(Arena *arena, DI_Scope *scope, DF_EvalView *eval_view, U32 default_radix, F_Tag font, F32 font_size, Rng1S64 visible_range, DF_EvalVizBlockList *blocks);
|
||||
internal String8 df_escaped_from_raw_string(Arena *arena, String8 raw);
|
||||
internal String8List df_value_strings_from_eval(Arena *arena, DF_EvalVizStringFlags flags, U32 default_radix, F_Tag font, F32 font_size, F32 max_size, S32 depth, E_Eval eval, E_Member *opt_member, DF_CfgTable *cfg_table);
|
||||
internal String8 df_value_string_from_eval(Arena *arena, DF_EvalVizStringFlags flags, U32 default_radix, F_Tag font, F32 font_size, F32 max_size, E_Eval eval, E_Member *opt_member, DF_CfgTable *cfg_table);
|
||||
internal DF_EvalVizWindowedRowList df_eval_viz_windowed_row_list_from_viz_block_list(Arena *arena, DF_EvalView *eval_view, U32 default_radix, F_Tag font, F32 font_size, Rng1S64 visible_range, DF_EvalVizBlockList *blocks);
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Hover Eval
|
||||
|
||||
@@ -324,7 +324,7 @@ DF_CORE_VIEW_RULE_VIZ_BLOCK_PROD_FUNCTION_DEF(rgba)
|
||||
DF_EvalVizBlock *vb = df_eval_viz_block_begin(arena, DF_EvalVizBlockKind_Canvas, key, df_expand_key_make(df_hash_from_expand_key(key), 1), depth);
|
||||
vb->eval = eval;
|
||||
vb->string = string;
|
||||
vb->cfg_table = *cfg_table;
|
||||
vb->cfg_table = cfg_table;
|
||||
vb->visual_idx_range = r1u64(0, 8);
|
||||
vb->semantic_idx_range = r1u64(0, 1);
|
||||
df_eval_viz_block_end(out, vb);
|
||||
@@ -507,7 +507,7 @@ DF_CORE_VIEW_RULE_VIZ_BLOCK_PROD_FUNCTION_DEF(text)
|
||||
DF_EvalVizBlock *vb = df_eval_viz_block_begin(arena, DF_EvalVizBlockKind_Canvas, key, df_expand_key_make(df_hash_from_expand_key(key), 1), depth);
|
||||
vb->eval = eval;
|
||||
vb->string = string;
|
||||
vb->cfg_table = *cfg_table;
|
||||
vb->cfg_table = cfg_table;
|
||||
vb->visual_idx_range = r1u64(0, 8);
|
||||
vb->semantic_idx_range = r1u64(0, 1);
|
||||
df_eval_viz_block_end(out, vb);
|
||||
@@ -654,7 +654,7 @@ DF_CORE_VIEW_RULE_VIZ_BLOCK_PROD_FUNCTION_DEF(disasm)
|
||||
DF_EvalVizBlock *vb = df_eval_viz_block_begin(arena, DF_EvalVizBlockKind_Canvas, key, df_expand_key_make(df_hash_from_expand_key(key), 1), depth);
|
||||
vb->eval = eval;
|
||||
vb->string = string;
|
||||
vb->cfg_table = *cfg_table;
|
||||
vb->cfg_table = cfg_table;
|
||||
vb->visual_idx_range = r1u64(0, 8);
|
||||
vb->semantic_idx_range = r1u64(0, 1);
|
||||
df_eval_viz_block_end(out, vb);
|
||||
@@ -776,7 +776,7 @@ DF_CORE_VIEW_RULE_VIZ_BLOCK_PROD_FUNCTION_DEF(graph)
|
||||
DF_EvalVizBlock *vb = df_eval_viz_block_begin(arena, DF_EvalVizBlockKind_Canvas, key, df_expand_key_make(df_hash_from_expand_key(key), 1), depth);
|
||||
vb->eval = eval;
|
||||
vb->string = string;
|
||||
vb->cfg_table = *cfg_table;
|
||||
vb->cfg_table = cfg_table;
|
||||
vb->visual_idx_range = r1u64(0, 8);
|
||||
vb->semantic_idx_range = r1u64(0, 1);
|
||||
df_eval_viz_block_end(out, vb);
|
||||
@@ -918,7 +918,7 @@ DF_CORE_VIEW_RULE_VIZ_BLOCK_PROD_FUNCTION_DEF(bitmap)
|
||||
DF_EvalVizBlock *vb = df_eval_viz_block_begin(arena, DF_EvalVizBlockKind_Canvas, key, df_expand_key_make(df_hash_from_expand_key(key), 1), depth);
|
||||
vb->eval = eval;
|
||||
vb->string = string;
|
||||
vb->cfg_table = *cfg_table;
|
||||
vb->cfg_table = cfg_table;
|
||||
vb->visual_idx_range = r1u64(0, 8);
|
||||
vb->semantic_idx_range = r1u64(0, 1);
|
||||
df_eval_viz_block_end(out, vb);
|
||||
@@ -1328,7 +1328,7 @@ DF_CORE_VIEW_RULE_VIZ_BLOCK_PROD_FUNCTION_DEF(geo)
|
||||
DF_EvalVizBlock *vb = df_eval_viz_block_begin(arena, DF_EvalVizBlockKind_Canvas, key, df_expand_key_make(df_hash_from_expand_key(key), 1), depth);
|
||||
vb->eval = eval;
|
||||
vb->string = string;
|
||||
vb->cfg_table = *cfg_table;
|
||||
vb->cfg_table = cfg_table;
|
||||
vb->visual_idx_range = r1u64(0, 16);
|
||||
vb->semantic_idx_range = r1u64(0, 1);
|
||||
df_eval_viz_block_end(out, vb);
|
||||
|
||||
+83
-58
@@ -1224,7 +1224,7 @@ df_tbl_from_watch_view_point(DF_EvalVizBlockList *blocks, DF_WatchViewPoint pt)
|
||||
//- rjf: table coordinates -> strings
|
||||
|
||||
internal String8
|
||||
df_string_from_eval_viz_row_column(Arena *arena, DF_EvalView *ev, DF_EvalVizRow *row, DF_WatchViewColumn *col, B32 editable)
|
||||
df_string_from_eval_viz_row_column(Arena *arena, DF_EvalView *ev, DF_EvalVizRow *row, DF_WatchViewColumn *col, B32 editable, U32 default_radix, F_Tag font, F32 font_size, F32 max_size_px)
|
||||
{
|
||||
String8 result = {0};
|
||||
switch(col->kind)
|
||||
@@ -1233,11 +1233,11 @@ df_string_from_eval_viz_row_column(Arena *arena, DF_EvalView *ev, DF_EvalVizRow
|
||||
case DF_WatchViewColumnKind_Expr:
|
||||
{
|
||||
result = editable ? row->edit_expr : row->display_expr;
|
||||
if(row->inherited_type_key_chain.first != 0)
|
||||
if(row->member != 0 && row->member->inheritance_key_chain.first != 0)
|
||||
{
|
||||
Temp scratch = scratch_begin(&arena, 1);
|
||||
String8List inheritance_chain_type_names = {0};
|
||||
for(E_TypeKeyNode *n = row->inherited_type_key_chain.first; n != 0; n = n->next)
|
||||
for(E_TypeKeyNode *n = row->member->inheritance_key_chain.first; n != 0; n = n->next)
|
||||
{
|
||||
String8 inherited_type_name = e_type_string_from_key(scratch.arena, n->v);
|
||||
inherited_type_name = str8_skip_chop_whitespace(inherited_type_name);
|
||||
@@ -1255,7 +1255,7 @@ df_string_from_eval_viz_row_column(Arena *arena, DF_EvalView *ev, DF_EvalVizRow
|
||||
}break;
|
||||
case DF_WatchViewColumnKind_Value:
|
||||
{
|
||||
result = editable ? row->edit_value : row->display_value;
|
||||
result = df_value_string_from_eval(arena, !editable * DF_EvalVizStringFlag_ReadOnlyDisplayRules, default_radix, font, font_size, max_size_px, row->eval, row->member, row->cfg_table);
|
||||
}break;
|
||||
case DF_WatchViewColumnKind_Type:
|
||||
{
|
||||
@@ -1272,6 +1272,11 @@ df_string_from_eval_viz_row_column(Arena *arena, DF_EvalView *ev, DF_EvalVizRow
|
||||
DF_Entity *module = df_module_from_process_vaddr(process, row->eval.value.u64);
|
||||
result = df_display_string_from_entity(arena, module);
|
||||
}break;
|
||||
case DF_WatchViewColumnKind_Member:
|
||||
{
|
||||
E_Eval member_eval = e_member_eval_from_eval_member_name(row->eval, str8(col->string_buffer, col->string_size));
|
||||
result = df_value_string_from_eval(arena, !editable * DF_EvalVizStringFlag_ReadOnlyDisplayRules, default_radix, font, font_size, max_size_px, member_eval, row->member, row->cfg_table);
|
||||
}break;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
@@ -1301,7 +1306,7 @@ df_watch_view_text_edit_state_from_pt(DF_WatchViewState *wv, DF_WatchViewPoint p
|
||||
//- rjf: watch view column state mutation
|
||||
|
||||
internal DF_WatchViewColumn *
|
||||
df_watch_view_column_alloc(DF_WatchViewState *wv, DF_WatchViewColumnKind kind, F32 pct)
|
||||
df_watch_view_column_alloc(DF_WatchViewState *wv, DF_WatchViewColumnKind kind, F32 pct, String8 string)
|
||||
{
|
||||
if(!wv->free_column)
|
||||
{
|
||||
@@ -1314,6 +1319,8 @@ df_watch_view_column_alloc(DF_WatchViewState *wv, DF_WatchViewColumnKind kind, F
|
||||
wv->column_count += 1;
|
||||
col->kind = kind;
|
||||
col->pct = pct;
|
||||
col->string_size = Min(sizeof(col->string_buffer), string.size);
|
||||
MemoryCopy(col->string_buffer, string.str, col->string_size);
|
||||
return col;
|
||||
}
|
||||
|
||||
@@ -1400,6 +1407,7 @@ df_watch_view_build(DF_Window *ws, DF_Panel *panel, DF_View *view, DF_WatchViewS
|
||||
F32 row_height_px = floor_f32(ui_top_font_size()*2.5f);
|
||||
S64 num_possible_visible_rows = (S64)(dim_2f32(rect).y/row_height_px);
|
||||
DF_EntityKind mutable_entity_kind = DF_EntityKind_Nil;
|
||||
F32 row_string_max_size_px = dim_2f32(rect).x;
|
||||
|
||||
//////////////////////////////
|
||||
//- rjf: determine autocompletion string
|
||||
@@ -2022,7 +2030,7 @@ df_watch_view_build(DF_Window *ws, DF_Panel *panel, DF_View *view, DF_WatchViewS
|
||||
ewv->text_edit_state_slots_count = u64_up_to_pow2(selection_dim.y+1);
|
||||
ewv->text_edit_state_slots_count = Max(ewv->text_edit_state_slots_count, 64);
|
||||
ewv->text_edit_state_slots = push_array(ewv->text_edit_arena, DF_WatchViewTextEditState*, ewv->text_edit_state_slots_count);
|
||||
DF_EvalVizWindowedRowList rows = df_eval_viz_windowed_row_list_from_viz_block_list(scratch.arena, di_scope, eval_view, default_radix, code_font, ui_top_font_size(),
|
||||
DF_EvalVizWindowedRowList rows = df_eval_viz_windowed_row_list_from_viz_block_list(scratch.arena, eval_view, default_radix, code_font, ui_top_font_size(),
|
||||
r1s64(ui_scroll_list_row_from_item(&row_blocks, selection_tbl.min.y-1),
|
||||
ui_scroll_list_row_from_item(&row_blocks, selection_tbl.max.y-1)+1), &blocks);
|
||||
DF_EvalVizRow *row = rows.first;
|
||||
@@ -2031,7 +2039,7 @@ df_watch_view_build(DF_Window *ws, DF_Panel *panel, DF_View *view, DF_WatchViewS
|
||||
for(S64 x = selection_tbl.min.x; x <= selection_tbl.max.x; x += 1)
|
||||
{
|
||||
DF_WatchViewColumn *col = df_watch_view_column_from_x(ewv, x);
|
||||
String8 string = df_string_from_eval_viz_row_column(scratch.arena, eval_view, row, col, 1);
|
||||
String8 string = df_string_from_eval_viz_row_column(scratch.arena, eval_view, row, col, 1, default_radix, ui_top_font(), ui_top_font_size(), row_string_max_size_px);
|
||||
string.size = Min(string.size, sizeof(ewv->dummy_text_edit_state.input_buffer));
|
||||
DF_WatchViewPoint pt = {x, row->parent_key, row->key};
|
||||
U64 hash = df_hash_from_expand_key(pt.key);
|
||||
@@ -2055,7 +2063,7 @@ df_watch_view_build(DF_Window *ws, DF_Panel *panel, DF_View *view, DF_WatchViewS
|
||||
if(!ewv->text_editing && evt->slot == UI_EventActionSlot_Accept && selection_tbl.min.x <= 0)
|
||||
{
|
||||
taken = 1;
|
||||
DF_EvalVizWindowedRowList rows = df_eval_viz_windowed_row_list_from_viz_block_list(scratch.arena, di_scope, eval_view, default_radix, code_font, ui_top_font_size(),
|
||||
DF_EvalVizWindowedRowList rows = df_eval_viz_windowed_row_list_from_viz_block_list(scratch.arena, eval_view, default_radix, code_font, ui_top_font_size(),
|
||||
r1s64(ui_scroll_list_row_from_item(&row_blocks, selection_tbl.min.y-1),
|
||||
ui_scroll_list_row_from_item(&row_blocks, selection_tbl.max.y-1)+1), &blocks);
|
||||
DF_EvalVizRow *row = rows.first;
|
||||
@@ -2097,7 +2105,7 @@ df_watch_view_build(DF_Window *ws, DF_Panel *panel, DF_View *view, DF_WatchViewS
|
||||
selection_tbl.min.x == 1)
|
||||
{
|
||||
taken = 1;
|
||||
DF_EvalVizWindowedRowList rows = df_eval_viz_windowed_row_list_from_viz_block_list(scratch.arena, di_scope, eval_view, default_radix, code_font, ui_top_font_size(),
|
||||
DF_EvalVizWindowedRowList rows = df_eval_viz_windowed_row_list_from_viz_block_list(scratch.arena, eval_view, default_radix, code_font, ui_top_font_size(),
|
||||
r1s64(ui_scroll_list_row_from_item(&row_blocks, selection_tbl.min.y-1),
|
||||
ui_scroll_list_row_from_item(&row_blocks, selection_tbl.max.y-1)+1), &blocks);
|
||||
DF_EvalVizRow *row = rows.first;
|
||||
@@ -2223,7 +2231,7 @@ df_watch_view_build(DF_Window *ws, DF_Panel *panel, DF_View *view, DF_WatchViewS
|
||||
case DF_WatchViewColumnKind_Value:
|
||||
if(editing_complete && evt->slot != UI_EventActionSlot_Cancel)
|
||||
{
|
||||
DF_EvalVizWindowedRowList rows = df_eval_viz_windowed_row_list_from_viz_block_list(scratch.arena, di_scope, eval_view, default_radix, code_font, ui_top_font_size(),
|
||||
DF_EvalVizWindowedRowList rows = df_eval_viz_windowed_row_list_from_viz_block_list(scratch.arena, eval_view, default_radix, code_font, ui_top_font_size(),
|
||||
r1s64(ui_scroll_list_row_from_item(&row_blocks, y-1),
|
||||
ui_scroll_list_row_from_item(&row_blocks, y-1)+1), &blocks);
|
||||
B32 success = 0;
|
||||
@@ -2263,6 +2271,10 @@ df_watch_view_build(DF_Window *ws, DF_Panel *panel, DF_View *view, DF_WatchViewS
|
||||
state_dirty = 1;
|
||||
snap_to_cursor = 1;
|
||||
}break;
|
||||
case DF_WatchViewColumnKind_Member:
|
||||
{
|
||||
|
||||
}break;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2280,7 +2292,7 @@ df_watch_view_build(DF_Window *ws, DF_Panel *panel, DF_View *view, DF_WatchViewS
|
||||
{
|
||||
taken = 1;
|
||||
String8List strs = {0};
|
||||
DF_EvalVizWindowedRowList rows = df_eval_viz_windowed_row_list_from_viz_block_list(scratch.arena, di_scope, eval_view, default_radix, code_font, ui_top_font_size(),
|
||||
DF_EvalVizWindowedRowList rows = df_eval_viz_windowed_row_list_from_viz_block_list(scratch.arena, eval_view, default_radix, code_font, ui_top_font_size(),
|
||||
r1s64(ui_scroll_list_row_from_item(&row_blocks, selection_tbl.min.y-1),
|
||||
ui_scroll_list_row_from_item(&row_blocks, selection_tbl.max.y-1)+1), &blocks);
|
||||
DF_EvalVizRow *row = rows.first;
|
||||
@@ -2289,7 +2301,7 @@ df_watch_view_build(DF_Window *ws, DF_Panel *panel, DF_View *view, DF_WatchViewS
|
||||
for(S64 x = selection_tbl.min.x; x <= selection_tbl.max.x; x += 1)
|
||||
{
|
||||
DF_WatchViewColumn *col = df_watch_view_column_from_x(ewv, x);
|
||||
String8 cell_string = df_string_from_eval_viz_row_column(scratch.arena, eval_view, row, col, 0);
|
||||
String8 cell_string = df_string_from_eval_viz_row_column(scratch.arena, eval_view, row, col, 0, default_radix, ui_top_font(), ui_top_font_size(), row_string_max_size_px);
|
||||
cell_string = str8_skip_chop_whitespace(cell_string);
|
||||
U64 comma_pos = str8_find_needle(cell_string, 0, str8_lit(","), 0);
|
||||
if(selection_tbl.min.x != selection_tbl.max.x || selection_tbl.min.y != selection_tbl.max.y)
|
||||
@@ -2581,6 +2593,10 @@ df_watch_view_build(DF_Window *ws, DF_Panel *panel, DF_View *view, DF_WatchViewS
|
||||
case DF_WatchViewColumnKind_Type: {name = str8_lit("Type");}break;
|
||||
case DF_WatchViewColumnKind_ViewRule:{name = str8_lit("View Rule");}break;
|
||||
case DF_WatchViewColumnKind_Module: {name = str8_lit("Module");}break;
|
||||
case DF_WatchViewColumnKind_Member:
|
||||
{
|
||||
name = str8(col->string_buffer, col->string_size);
|
||||
}break;
|
||||
}
|
||||
switch(col->kind)
|
||||
{
|
||||
@@ -2633,7 +2649,7 @@ df_watch_view_build(DF_Window *ws, DF_Panel *panel, DF_View *view, DF_WatchViewS
|
||||
//
|
||||
DF_EvalVizWindowedRowList rows = {0};
|
||||
{
|
||||
rows = df_eval_viz_windowed_row_list_from_viz_block_list(scratch.arena, di_scope, eval_view, default_radix, code_font, ui_top_font_size(), r1s64(visible_row_rng.min-1, visible_row_rng.max), &blocks);
|
||||
rows = df_eval_viz_windowed_row_list_from_viz_block_list(scratch.arena, eval_view, default_radix, code_font, ui_top_font_size(), r1s64(visible_row_rng.min-1, visible_row_rng.max), &blocks);
|
||||
}
|
||||
|
||||
////////////////////////////
|
||||
@@ -2648,7 +2664,6 @@ df_watch_view_build(DF_Window *ws, DF_Panel *panel, DF_View *view, DF_WatchViewS
|
||||
//- rjf: unpack row info
|
||||
//
|
||||
U64 row_hash = df_hash_from_expand_key(row->key);
|
||||
B32 row_is_inherited = (row->inherited_type_key_chain.count != 0);
|
||||
B32 row_selected = (selection_tbl.min.y <= (semantic_idx+1) && (semantic_idx+1) <= selection_tbl.max.y);
|
||||
B32 row_expanded = df_expand_key_is_set(&eval_view->expand_tree_table, row->key);
|
||||
B32 next_row_expanded = row_expanded;
|
||||
@@ -2814,9 +2829,10 @@ df_watch_view_build(DF_Window *ws, DF_Panel *panel, DF_View *view, DF_WatchViewS
|
||||
DF_WatchViewPoint cell_pt = {x, row->parent_key, row->key};
|
||||
DF_WatchViewTextEditState *cell_edit_state = df_watch_view_text_edit_state_from_pt(ewv, cell_pt);
|
||||
B32 cell_selected = (row_selected && selection_tbl.min.x <= cell_pt.x && cell_pt.x <= selection_tbl.max.x);
|
||||
String8 cell_pre_edit_string = df_string_from_eval_viz_row_column(scratch.arena, eval_view, row, col, 0);
|
||||
String8 cell_pre_edit_string = df_string_from_eval_viz_row_column(scratch.arena, eval_view, row, col, 0, default_radix, ui_top_font(), ui_top_font_size(), row_string_max_size_px);
|
||||
|
||||
//- rjf: unpack column-kind-specific info
|
||||
E_Eval cell_eval = row->eval;
|
||||
B32 cell_can_edit = 0;
|
||||
FuzzyMatchRangeList cell_matches = {0};
|
||||
String8 cell_error_string = {0};
|
||||
@@ -2839,10 +2855,17 @@ df_watch_view_build(DF_Window *ws, DF_Panel *panel, DF_View *view, DF_WatchViewS
|
||||
}break;
|
||||
case DF_WatchViewColumnKind_Value:
|
||||
{
|
||||
if(row->eval.msgs.max_kind > E_MsgKind_Null)
|
||||
}goto value_cell;
|
||||
case DF_WatchViewColumnKind_Member:
|
||||
{
|
||||
cell_eval = e_member_eval_from_eval_member_name(cell_eval, str8(col->string_buffer, col->string_size));
|
||||
}goto value_cell;
|
||||
value_cell:;
|
||||
{
|
||||
if(cell_eval.msgs.max_kind > E_MsgKind_Null)
|
||||
{
|
||||
String8List strings = {0};
|
||||
for(E_Msg *msg = row->eval.msgs.first; msg != 0; msg = msg->next)
|
||||
for(E_Msg *msg = cell_eval.msgs.first; msg != 0; msg = msg->next)
|
||||
{
|
||||
str8_list_push(scratch.arena, &strings, msg->text);
|
||||
}
|
||||
@@ -2858,7 +2881,7 @@ df_watch_view_build(DF_Window *ws, DF_Panel *panel, DF_View *view, DF_WatchViewS
|
||||
{
|
||||
cell_ui_hook = row->value_ui_rule_spec->info.row_ui;
|
||||
}
|
||||
if(row->eval.space >= E_Space_FIXED_COUNT)
|
||||
if(cell_eval.space >= E_Space_FIXED_COUNT)
|
||||
{
|
||||
cell_base_color = df_rgba_from_theme_color(DF_ThemeColor_CodeSymbol);
|
||||
}
|
||||
@@ -2866,7 +2889,7 @@ df_watch_view_build(DF_Window *ws, DF_Panel *panel, DF_View *view, DF_WatchViewS
|
||||
case DF_WatchViewColumnKind_Type:
|
||||
{
|
||||
cell_can_edit = 0;
|
||||
E_TypeKey key = row->eval.type_key;
|
||||
E_TypeKey key = cell_eval.type_key;
|
||||
cell_base_color = df_rgba_from_theme_color(DF_ThemeColor_CodeType);
|
||||
}break;
|
||||
case DF_WatchViewColumnKind_ViewRule:
|
||||
@@ -2924,7 +2947,7 @@ df_watch_view_build(DF_Window *ws, DF_Panel *panel, DF_View *view, DF_WatchViewS
|
||||
UI_Box *box = ui_build_box_from_stringf(UI_BoxFlag_Clip|UI_BoxFlag_Clickable, "###val_%I64x", row_hash);
|
||||
UI_Parent(box)
|
||||
{
|
||||
cell_ui_hook(ws, row->key, row->eval, row->value_ui_rule_node);
|
||||
cell_ui_hook(ws, row->key, cell_eval, row->value_ui_rule_node);
|
||||
}
|
||||
sig = ui_signal_from_box(box);
|
||||
}
|
||||
@@ -2944,12 +2967,12 @@ df_watch_view_build(DF_Window *ws, DF_Panel *panel, DF_View *view, DF_WatchViewS
|
||||
else
|
||||
{
|
||||
sig = df_line_editf(ws,
|
||||
(DF_LineEditFlag_CodeContents*(!(row->flags & DF_EvalVizRowFlag_ExprIsSpecial))|
|
||||
(DF_LineEditFlag_CodeContents*(!(row->flags & DF_EvalVizRowFlag_ExprIsSpecial) || col->kind != DF_WatchViewColumnKind_Expr)|
|
||||
DF_LineEditFlag_NoBackground|
|
||||
DF_LineEditFlag_DisableEdit*(!cell_can_edit)|
|
||||
DF_LineEditFlag_Expander*!!(x == 0 && row->flags & DF_EvalVizRowFlag_CanExpand)|
|
||||
DF_LineEditFlag_Expander*!!(x == 0 && row->flags & DF_EvalVizRowFlag_CanExpand && col->kind == DF_WatchViewColumnKind_Expr)|
|
||||
DF_LineEditFlag_ExpanderPlaceholder*(x == 0 && row->depth==0 && col->kind == DF_WatchViewColumnKind_Expr)|
|
||||
DF_LineEditFlag_ExpanderSpace*(x == 0 && row->depth!=0)),
|
||||
DF_LineEditFlag_ExpanderSpace*(x == 0 && row->depth!=0 && col->kind == DF_WatchViewColumnKind_Expr)),
|
||||
x == 0 ? row->depth : 0,
|
||||
&cell_matches,
|
||||
&cell_edit_state->cursor, &cell_edit_state->mark, cell_edit_state->input_buffer, sizeof(cell_edit_state->input_buffer), &cell_edit_state->input_size, &next_row_expanded,
|
||||
@@ -2994,7 +3017,7 @@ df_watch_view_build(DF_Window *ws, DF_Panel *panel, DF_View *view, DF_WatchViewS
|
||||
// rjf: double-click, not editable -> go-to-location
|
||||
if(ui_double_clicked(sig) && !cell_can_edit)
|
||||
{
|
||||
U64 vaddr = row->eval.value.u64;
|
||||
U64 vaddr = cell_eval.value.u64;
|
||||
DF_Entity *module = df_module_from_process_vaddr(process, vaddr);
|
||||
DI_Key dbgi_key = df_dbgi_key_from_module(module);
|
||||
U64 voff = df_voff_from_vaddr(module, vaddr);
|
||||
@@ -6341,9 +6364,9 @@ DF_VIEW_SETUP_FUNCTION_DEF(CallStack)
|
||||
{
|
||||
DF_WatchViewState *wv = df_view_user_state(view, DF_WatchViewState);
|
||||
df_watch_view_init(wv, view, DF_WatchViewFillKind_CallStack);
|
||||
df_watch_view_column_alloc(wv, DF_WatchViewColumnKind_FrameSelection, 0.05f);
|
||||
df_watch_view_column_alloc(wv, DF_WatchViewColumnKind_Value, 0.7f);
|
||||
df_watch_view_column_alloc(wv, DF_WatchViewColumnKind_Module, 0.25f);
|
||||
df_watch_view_column_alloc(wv, DF_WatchViewColumnKind_FrameSelection, 0.05f, str8_zero());
|
||||
df_watch_view_column_alloc(wv, DF_WatchViewColumnKind_Value, 0.7f, str8_zero());
|
||||
df_watch_view_column_alloc(wv, DF_WatchViewColumnKind_Module, 0.25f, str8_zero());
|
||||
}
|
||||
DF_VIEW_STRING_FROM_STATE_FUNCTION_DEF(CallStack) {return str8_zero();}
|
||||
DF_VIEW_CMD_FUNCTION_DEF(CallStack){}
|
||||
@@ -7601,10 +7624,10 @@ DF_VIEW_SETUP_FUNCTION_DEF(Watch)
|
||||
{
|
||||
DF_WatchViewState *wv = df_view_user_state(view, DF_WatchViewState);
|
||||
df_watch_view_init(wv, view, DF_WatchViewFillKind_Watch);
|
||||
df_watch_view_column_alloc(wv, DF_WatchViewColumnKind_Expr, 0.25f);
|
||||
df_watch_view_column_alloc(wv, DF_WatchViewColumnKind_Value, 0.3f);
|
||||
df_watch_view_column_alloc(wv, DF_WatchViewColumnKind_Type, 0.15f);
|
||||
df_watch_view_column_alloc(wv, DF_WatchViewColumnKind_ViewRule, 0.30f);
|
||||
df_watch_view_column_alloc(wv, DF_WatchViewColumnKind_Expr, 0.25f, str8_zero());
|
||||
df_watch_view_column_alloc(wv, DF_WatchViewColumnKind_Value, 0.3f, str8_zero());
|
||||
df_watch_view_column_alloc(wv, DF_WatchViewColumnKind_Type, 0.15f, str8_zero());
|
||||
df_watch_view_column_alloc(wv, DF_WatchViewColumnKind_ViewRule, 0.30f, str8_zero());
|
||||
}
|
||||
DF_VIEW_STRING_FROM_STATE_FUNCTION_DEF(Watch) {return str8_zero();}
|
||||
DF_VIEW_CMD_FUNCTION_DEF(Watch)
|
||||
@@ -7627,10 +7650,10 @@ DF_VIEW_SETUP_FUNCTION_DEF(Locals)
|
||||
{
|
||||
DF_WatchViewState *wv = df_view_user_state(view, DF_WatchViewState);
|
||||
df_watch_view_init(wv, view, DF_WatchViewFillKind_Locals);
|
||||
df_watch_view_column_alloc(wv, DF_WatchViewColumnKind_Expr, 0.25f);
|
||||
df_watch_view_column_alloc(wv, DF_WatchViewColumnKind_Value, 0.3f);
|
||||
df_watch_view_column_alloc(wv, DF_WatchViewColumnKind_Type, 0.15f);
|
||||
df_watch_view_column_alloc(wv, DF_WatchViewColumnKind_ViewRule, 0.30f);
|
||||
df_watch_view_column_alloc(wv, DF_WatchViewColumnKind_Expr, 0.25f, str8_zero());
|
||||
df_watch_view_column_alloc(wv, DF_WatchViewColumnKind_Value, 0.3f, str8_zero());
|
||||
df_watch_view_column_alloc(wv, DF_WatchViewColumnKind_Type, 0.15f, str8_zero());
|
||||
df_watch_view_column_alloc(wv, DF_WatchViewColumnKind_ViewRule, 0.30f, str8_zero());
|
||||
}
|
||||
DF_VIEW_STRING_FROM_STATE_FUNCTION_DEF(Locals) { return str8_zero(); }
|
||||
DF_VIEW_CMD_FUNCTION_DEF(Locals) {}
|
||||
@@ -7649,10 +7672,10 @@ DF_VIEW_SETUP_FUNCTION_DEF(Registers)
|
||||
{
|
||||
DF_WatchViewState *wv = df_view_user_state(view, DF_WatchViewState);
|
||||
df_watch_view_init(wv, view, DF_WatchViewFillKind_Registers);
|
||||
df_watch_view_column_alloc(wv, DF_WatchViewColumnKind_Expr, 0.25f);
|
||||
df_watch_view_column_alloc(wv, DF_WatchViewColumnKind_Value, 0.3f);
|
||||
df_watch_view_column_alloc(wv, DF_WatchViewColumnKind_Type, 0.15f);
|
||||
df_watch_view_column_alloc(wv, DF_WatchViewColumnKind_ViewRule, 0.30f);
|
||||
df_watch_view_column_alloc(wv, DF_WatchViewColumnKind_Expr, 0.25f, str8_zero());
|
||||
df_watch_view_column_alloc(wv, DF_WatchViewColumnKind_Value, 0.3f, str8_zero());
|
||||
df_watch_view_column_alloc(wv, DF_WatchViewColumnKind_Type, 0.15f, str8_zero());
|
||||
df_watch_view_column_alloc(wv, DF_WatchViewColumnKind_ViewRule, 0.30f, str8_zero());
|
||||
}
|
||||
DF_VIEW_STRING_FROM_STATE_FUNCTION_DEF(Registers) { return str8_zero(); }
|
||||
DF_VIEW_CMD_FUNCTION_DEF(Registers) {}
|
||||
@@ -7671,10 +7694,10 @@ DF_VIEW_SETUP_FUNCTION_DEF(Globals)
|
||||
{
|
||||
DF_WatchViewState *wv = df_view_user_state(view, DF_WatchViewState);
|
||||
df_watch_view_init(wv, view, DF_WatchViewFillKind_Globals);
|
||||
df_watch_view_column_alloc(wv, DF_WatchViewColumnKind_Expr, 0.25f);
|
||||
df_watch_view_column_alloc(wv, DF_WatchViewColumnKind_Value, 0.3f);
|
||||
df_watch_view_column_alloc(wv, DF_WatchViewColumnKind_Type, 0.15f);
|
||||
df_watch_view_column_alloc(wv, DF_WatchViewColumnKind_ViewRule, 0.30f);
|
||||
df_watch_view_column_alloc(wv, DF_WatchViewColumnKind_Expr, 0.25f, str8_zero());
|
||||
df_watch_view_column_alloc(wv, DF_WatchViewColumnKind_Value, 0.3f, str8_zero());
|
||||
df_watch_view_column_alloc(wv, DF_WatchViewColumnKind_Type, 0.15f, str8_zero());
|
||||
df_watch_view_column_alloc(wv, DF_WatchViewColumnKind_ViewRule, 0.30f, str8_zero());
|
||||
}
|
||||
DF_VIEW_STRING_FROM_STATE_FUNCTION_DEF(Globals) { return str8_zero(); }
|
||||
DF_VIEW_CMD_FUNCTION_DEF(Globals) {}
|
||||
@@ -7693,10 +7716,10 @@ DF_VIEW_SETUP_FUNCTION_DEF(ThreadLocals)
|
||||
{
|
||||
DF_WatchViewState *wv = df_view_user_state(view, DF_WatchViewState);
|
||||
df_watch_view_init(wv, view, DF_WatchViewFillKind_ThreadLocals);
|
||||
df_watch_view_column_alloc(wv, DF_WatchViewColumnKind_Expr, 0.25f);
|
||||
df_watch_view_column_alloc(wv, DF_WatchViewColumnKind_Value, 0.3f);
|
||||
df_watch_view_column_alloc(wv, DF_WatchViewColumnKind_Type, 0.15f);
|
||||
df_watch_view_column_alloc(wv, DF_WatchViewColumnKind_ViewRule, 0.30f);
|
||||
df_watch_view_column_alloc(wv, DF_WatchViewColumnKind_Expr, 0.25f, str8_zero());
|
||||
df_watch_view_column_alloc(wv, DF_WatchViewColumnKind_Value, 0.3f, str8_zero());
|
||||
df_watch_view_column_alloc(wv, DF_WatchViewColumnKind_Type, 0.15f, str8_zero());
|
||||
df_watch_view_column_alloc(wv, DF_WatchViewColumnKind_ViewRule, 0.30f, str8_zero());
|
||||
}
|
||||
DF_VIEW_STRING_FROM_STATE_FUNCTION_DEF(ThreadLocals) { return str8_zero(); }
|
||||
DF_VIEW_CMD_FUNCTION_DEF(ThreadLocals) {}
|
||||
@@ -7715,10 +7738,10 @@ DF_VIEW_SETUP_FUNCTION_DEF(Types)
|
||||
{
|
||||
DF_WatchViewState *wv = df_view_user_state(view, DF_WatchViewState);
|
||||
df_watch_view_init(wv, view, DF_WatchViewFillKind_Types);
|
||||
df_watch_view_column_alloc(wv, DF_WatchViewColumnKind_Expr, 0.25f);
|
||||
df_watch_view_column_alloc(wv, DF_WatchViewColumnKind_Value, 0.3f);
|
||||
df_watch_view_column_alloc(wv, DF_WatchViewColumnKind_Type, 0.15f);
|
||||
df_watch_view_column_alloc(wv, DF_WatchViewColumnKind_ViewRule, 0.30f);
|
||||
df_watch_view_column_alloc(wv, DF_WatchViewColumnKind_Expr, 0.25f, str8_zero());
|
||||
df_watch_view_column_alloc(wv, DF_WatchViewColumnKind_Value, 0.3f, str8_zero());
|
||||
df_watch_view_column_alloc(wv, DF_WatchViewColumnKind_Type, 0.15f, str8_zero());
|
||||
df_watch_view_column_alloc(wv, DF_WatchViewColumnKind_ViewRule, 0.30f, str8_zero());
|
||||
}
|
||||
DF_VIEW_STRING_FROM_STATE_FUNCTION_DEF(Types) { return str8_zero(); }
|
||||
DF_VIEW_CMD_FUNCTION_DEF(Types) {}
|
||||
@@ -7737,9 +7760,9 @@ DF_VIEW_SETUP_FUNCTION_DEF(Procedures)
|
||||
{
|
||||
DF_WatchViewState *wv = df_view_user_state(view, DF_WatchViewState);
|
||||
df_watch_view_init(wv, view, DF_WatchViewFillKind_Procedures);
|
||||
df_watch_view_column_alloc(wv, DF_WatchViewColumnKind_Expr, 0.2f);
|
||||
df_watch_view_column_alloc(wv, DF_WatchViewColumnKind_Value, 0.6f);
|
||||
df_watch_view_column_alloc(wv, DF_WatchViewColumnKind_ViewRule, 0.2f);
|
||||
df_watch_view_column_alloc(wv, DF_WatchViewColumnKind_Expr, 0.2f, str8_zero());
|
||||
df_watch_view_column_alloc(wv, DF_WatchViewColumnKind_Value, 0.6f, str8_zero());
|
||||
df_watch_view_column_alloc(wv, DF_WatchViewColumnKind_ViewRule, 0.2f, str8_zero());
|
||||
}
|
||||
DF_VIEW_STRING_FROM_STATE_FUNCTION_DEF(Procedures) { return str8_zero(); }
|
||||
DF_VIEW_CMD_FUNCTION_DEF(Procedures) {}
|
||||
@@ -8709,8 +8732,10 @@ DF_VIEW_SETUP_FUNCTION_DEF(Breakpoints)
|
||||
{
|
||||
DF_WatchViewState *wv = df_view_user_state(view, DF_WatchViewState);
|
||||
df_watch_view_init(wv, view, DF_WatchViewFillKind_Breakpoints);
|
||||
df_watch_view_column_alloc(wv, DF_WatchViewColumnKind_Expr, 0.5f);
|
||||
df_watch_view_column_alloc(wv, DF_WatchViewColumnKind_Value, 0.5f);
|
||||
df_watch_view_column_alloc(wv, DF_WatchViewColumnKind_Member, 0.25f, str8_lit("Label"));
|
||||
df_watch_view_column_alloc(wv, DF_WatchViewColumnKind_Member, 0.45f, str8_lit("Location"));
|
||||
df_watch_view_column_alloc(wv, DF_WatchViewColumnKind_Member, 0.10f, str8_lit("Enabled"));
|
||||
df_watch_view_column_alloc(wv, DF_WatchViewColumnKind_Member, 0.20f, str8_lit("Hit Count"));
|
||||
}
|
||||
DF_VIEW_STRING_FROM_STATE_FUNCTION_DEF(Breakpoints) {return str8_zero();}
|
||||
DF_VIEW_CMD_FUNCTION_DEF(Breakpoints)
|
||||
@@ -8908,8 +8933,8 @@ DF_VIEW_SETUP_FUNCTION_DEF(WatchPins)
|
||||
{
|
||||
DF_WatchViewState *wv = df_view_user_state(view, DF_WatchViewState);
|
||||
df_watch_view_init(wv, view, DF_WatchViewFillKind_WatchPins);
|
||||
df_watch_view_column_alloc(wv, DF_WatchViewColumnKind_Expr, 0.5f);
|
||||
df_watch_view_column_alloc(wv, DF_WatchViewColumnKind_Value, 0.5f);
|
||||
df_watch_view_column_alloc(wv, DF_WatchViewColumnKind_Expr, 0.5f, str8_zero());
|
||||
df_watch_view_column_alloc(wv, DF_WatchViewColumnKind_Value, 0.5f, str8_zero());
|
||||
}
|
||||
DF_VIEW_STRING_FROM_STATE_FUNCTION_DEF(WatchPins) {return str8_zero();}
|
||||
DF_VIEW_CMD_FUNCTION_DEF(WatchPins)
|
||||
|
||||
@@ -278,6 +278,7 @@ typedef enum DF_WatchViewColumnKind
|
||||
DF_WatchViewColumnKind_ViewRule,
|
||||
DF_WatchViewColumnKind_Module,
|
||||
DF_WatchViewColumnKind_FrameSelection,
|
||||
DF_WatchViewColumnKind_Member,
|
||||
DF_WatchViewColumnKind_COUNT
|
||||
}
|
||||
DF_WatchViewColumnKind;
|
||||
@@ -290,7 +291,7 @@ struct DF_WatchViewColumn
|
||||
DF_WatchViewColumnKind kind;
|
||||
F32 pct;
|
||||
U8 string_buffer[1024];
|
||||
U64 string_buffer_size;
|
||||
U64 string_size;
|
||||
};
|
||||
|
||||
typedef enum DF_WatchViewFillKind
|
||||
@@ -548,13 +549,13 @@ internal DF_WatchViewPoint df_watch_view_point_from_tbl(DF_EvalVizBlockList *blo
|
||||
internal Vec2S64 df_tbl_from_watch_view_point(DF_EvalVizBlockList *blocks, DF_WatchViewPoint pt);
|
||||
|
||||
//- rjf: table coordinates -> strings
|
||||
internal String8 df_string_from_eval_viz_row_column(Arena *arena, DF_EvalView *ev, DF_EvalVizRow *row, DF_WatchViewColumn *col, B32 editable);
|
||||
internal String8 df_string_from_eval_viz_row_column(Arena *arena, DF_EvalView *ev, DF_EvalVizRow *row, DF_WatchViewColumn *col, B32 editable, U32 default_radix, F_Tag font, F32 font_size, F32 max_size_px);
|
||||
|
||||
//- rjf: table coordinates -> text edit state
|
||||
internal DF_WatchViewTextEditState *df_watch_view_text_edit_state_from_pt(DF_WatchViewState *wv, DF_WatchViewPoint pt);
|
||||
|
||||
//- rjf: watch view column state mutation
|
||||
internal DF_WatchViewColumn *df_watch_view_column_alloc(DF_WatchViewState *wv, DF_WatchViewColumnKind kind, F32 pct);
|
||||
internal DF_WatchViewColumn *df_watch_view_column_alloc(DF_WatchViewState *wv, DF_WatchViewColumnKind kind, F32 pct, String8 string);
|
||||
internal void df_watch_view_column_release(DF_WatchViewState *wv, DF_WatchViewColumn *col);
|
||||
|
||||
//- rjf: watch view main hooks
|
||||
|
||||
@@ -282,3 +282,43 @@ e_element_eval_from_array_eval_index(E_Eval eval, U64 index)
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
internal E_Eval
|
||||
e_member_eval_from_eval_member_name(E_Eval eval, String8 member_name)
|
||||
{
|
||||
E_Eval result = {0};
|
||||
{
|
||||
Temp scratch = scratch_begin(0, 0);
|
||||
E_MemberArray members = e_type_data_members_from_key(scratch.arena, eval.type_key);
|
||||
for(U64 member_idx = 0; member_idx < members.count; member_idx += 1)
|
||||
{
|
||||
E_Member *member = &members.v[member_idx];
|
||||
if(str8_match(member->name, member_name, 0))
|
||||
{
|
||||
result.mode = eval.mode;
|
||||
result.space = eval.space;
|
||||
result.type_key = member->type_key;
|
||||
result.code = eval.code;
|
||||
result.msgs = eval.msgs;
|
||||
switch(eval.mode)
|
||||
{
|
||||
default:{}break;
|
||||
case E_Mode_Value:
|
||||
if(member->off < sizeof(eval.value))
|
||||
{
|
||||
U64 member_size = e_type_byte_size_from_key(member->type_key);
|
||||
MemoryCopy((U8 *)(&result.value.u512[0]),
|
||||
(U8 *)(&eval.value.u512[0]) + member->off,
|
||||
Min(member_size, sizeof(eval.value) - member->off));
|
||||
}break;
|
||||
case E_Mode_Offset:
|
||||
{
|
||||
result.value.u64 = eval.value.u64 + member->off;
|
||||
}break;
|
||||
}
|
||||
}
|
||||
}
|
||||
scratch_end(scratch);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -27,5 +27,6 @@ internal E_Eval e_autoresolved_eval_from_eval(E_Eval eval);
|
||||
internal E_Eval e_dynamically_typed_eval_from_eval(E_Eval eval);
|
||||
internal E_Eval e_value_eval_from_eval(E_Eval eval);
|
||||
internal E_Eval e_element_eval_from_array_eval_index(E_Eval eval, U64 index);
|
||||
internal E_Eval e_member_eval_from_eval_member_name(E_Eval eval, String8 member_name);
|
||||
|
||||
#endif // EVAL_BUNDLES_H
|
||||
|
||||
@@ -157,7 +157,7 @@ e_type_kind_is_basic_or_enum(E_TypeKind kind)
|
||||
}
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Member List Building Functions
|
||||
//~ rjf: Member Functions
|
||||
|
||||
internal void
|
||||
e_member_list_push(Arena *arena, E_MemberList *list, E_Member *member)
|
||||
|
||||
@@ -212,7 +212,7 @@ internal B32 e_type_kind_is_signed(E_TypeKind kind);
|
||||
internal B32 e_type_kind_is_basic_or_enum(E_TypeKind kind);
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Member List Building Functions
|
||||
//~ rjf: Member Functions
|
||||
|
||||
internal void e_member_list_push(Arena *arena, E_MemberList *list, E_Member *member);
|
||||
#define e_member_list_push_new(arena, list, ...) e_member_list_push((arena), (list), &(E_Member){.kind = E_MemberKind_DataField, __VA_ARGS__})
|
||||
|
||||
Reference in New Issue
Block a user