checkpoint on eval / eval-viz simplification pass

This commit is contained in:
Ryan Fleury
2024-08-19 11:26:28 -07:00
parent 9f593f9971
commit be2daf570a
11 changed files with 255 additions and 227 deletions
+69 -6
View File
@@ -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;
}
+4 -7
View File
@@ -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
View File
@@ -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
View File
@@ -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
+6 -6
View File
@@ -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
View File
@@ -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)
+4 -3
View File
@@ -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
+40
View File
@@ -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;
}
+1
View File
@@ -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
+1 -1
View File
@@ -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)
+1 -1
View File
@@ -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__})