From 28fdd791ae91f233d980fb2ce1c587bd53cad3e8 Mon Sep 17 00:00:00 2001 From: Ryan Fleury Date: Thu, 1 Feb 2024 10:59:55 -0800 Subject: [PATCH] extend eval viz blocks & windowed row build path with optional member info - use to extend watch type info visualization with size/offset information --- src/df/core/df_core.c | 18 ++++--- src/df/core/df_core.h | 3 +- src/df/gfx/df_gfx.c | 55 +++++++++++++--------- src/df/gfx/df_gfx.h | 2 +- src/df/gfx/df_views.c | 15 ++++-- src/eval/eval_compiler.c | 6 +++ src/eval/eval_machine.c | 2 + src/eval/eval_parser.c | 4 ++ src/type_graph/generated/type_graph.meta.h | 18 +++---- src/type_graph/type_graph.c | 10 ++++ src/type_graph/type_graph.h | 1 + src/type_graph/type_graph.mdesk | 18 +++---- 12 files changed, 99 insertions(+), 53 deletions(-) diff --git a/src/df/core/df_core.c b/src/df/core/df_core.c index 30335d4a..2d1218ba 100644 --- a/src/df/core/df_core.c +++ b/src/df/core/df_core.c @@ -4327,6 +4327,7 @@ df_value_mode_eval_from_eval(TG_Graph *graph, RADDBG_Parsed *rdbg, DF_CtrlCtx *c internal DF_Eval df_dynamically_typed_eval_from_eval(TG_Graph *graph, RADDBG_Parsed *rdbg, DF_CtrlCtx *ctrl_ctx, DF_Eval eval) { + ProfBeginFunction(); Temp scratch = scratch_begin(0, 0); DF_Entity *thread = df_entity_from_handle(ctrl_ctx->thread); Architecture arch = df_architecture_from_entity(thread); @@ -4387,6 +4388,7 @@ df_dynamically_typed_eval_from_eval(TG_Graph *graph, RADDBG_Parsed *rdbg, DF_Ctr } } scratch_end(scratch); + ProfEnd(); return eval; } @@ -5000,7 +5002,7 @@ df_eval_link_base_array_from_chunk_list(Arena *arena, DF_EvalLinkBaseChunkList * //- rjf: watch tree visualization internal void -df_append_viz_blocks_for_parent__rec(Arena *arena, DBGI_Scope *scope, DF_EvalView *eval_view, DF_CtrlCtx *ctrl_ctx, EVAL_ParseCtx *parse_ctx, DF_ExpandKey parent_key, DF_ExpandKey key, String8 string, DF_Eval eval, DF_CfgTable *cfg_table, S32 depth, DF_EvalVizBlockList *list_out) +df_append_viz_blocks_for_parent__rec(Arena *arena, DBGI_Scope *scope, DF_EvalView *eval_view, DF_CtrlCtx *ctrl_ctx, EVAL_ParseCtx *parse_ctx, DF_ExpandKey parent_key, DF_ExpandKey key, String8 string, DF_Eval eval, TG_Member *opt_member, DF_CfgTable *cfg_table, S32 depth, DF_EvalVizBlockList *list_out) { ProfBeginFunction(); Temp scratch = scratch_begin(&arena, 1); @@ -5037,6 +5039,10 @@ df_append_viz_blocks_for_parent__rec(Arena *arena, DBGI_Scope *scope, DF_EvalVie 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); block->depth = depth; + if(opt_member != 0) + { + block->member = tg_member_copy(arena, opt_member); + } SLLQueuePush(list_out->first, list_out->last, block); list_out->count += 1; list_out->total_visual_row_count += 1; @@ -5225,7 +5231,7 @@ df_append_viz_blocks_for_parent__rec(Arena *arena, DBGI_Scope *scope, DF_EvalVie } list_out->total_visual_row_count -= 1; list_out->total_semantic_row_count -= 1; - df_append_viz_blocks_for_parent__rec(arena, scope, eval_view, ctrl_ctx, parse_ctx, key, child->key, member->name, child_eval, &child_cfg, depth+1, list_out); + df_append_viz_blocks_for_parent__rec(arena, scope, eval_view, ctrl_ctx, parse_ctx, key, child->key, member->name, child_eval, member, &child_cfg, depth+1, list_out); } // rjf: make new memblock for remainder of children (if any) @@ -5343,7 +5349,7 @@ df_append_viz_blocks_for_parent__rec(Arena *arena, DBGI_Scope *scope, DF_EvalVie } list_out->total_visual_row_count -= 1; list_out->total_semantic_row_count -= 1; - df_append_viz_blocks_for_parent__rec(arena, scope, eval_view, ctrl_ctx, parse_ctx, key, child->key, push_str8f(arena, "[%I64u]", child_idx), child_eval, &child_cfg, depth+1, list_out); + df_append_viz_blocks_for_parent__rec(arena, scope, eval_view, ctrl_ctx, parse_ctx, key, child->key, push_str8f(arena, "[%I64u]", child_idx), child_eval, 0, &child_cfg, depth+1, list_out); // rjf: make new elemblock for remainder of children (if any) if(child_idx+1 < link_bases.count) @@ -5430,7 +5436,7 @@ df_append_viz_blocks_for_parent__rec(Arena *arena, DBGI_Scope *scope, DF_EvalVie } list_out->total_visual_row_count -= 1; list_out->total_semantic_row_count -= 1; - df_append_viz_blocks_for_parent__rec(arena, scope, eval_view, ctrl_ctx, parse_ctx, key, child->key, push_str8f(arena, "[%I64u]", child_idx), child_eval, &child_cfg, depth+1, list_out); + df_append_viz_blocks_for_parent__rec(arena, scope, eval_view, ctrl_ctx, parse_ctx, key, child->key, push_str8f(arena, "[%I64u]", child_idx), child_eval, 0, &child_cfg, depth+1, list_out); // rjf: make new elemblock for remainder of children (if any) if(child_idx+1 < array_count) @@ -5458,7 +5464,7 @@ df_append_viz_blocks_for_parent__rec(Arena *arena, DBGI_Scope *scope, DF_EvalVie ProfScope("build viz blocks for ptr-to-ptrs") { String8 subexpr = push_str8f(arena, "*(%S)", string); - df_append_viz_blocks_for_parent__rec(arena, scope, eval_view, ctrl_ctx, parse_ctx, key, df_expand_key_make(df_hash_from_expand_key(key), 1), subexpr, ptr_eval, cfg_table, depth+1, list_out); + df_append_viz_blocks_for_parent__rec(arena, scope, eval_view, ctrl_ctx, parse_ctx, key, df_expand_key_make(df_hash_from_expand_key(key), 1), subexpr, ptr_eval, 0, cfg_table, depth+1, list_out); } scratch_end(scratch); @@ -5504,7 +5510,7 @@ df_eval_viz_block_list_from_eval_view_expr_num(Arena *arena, DBGI_Scope *scope, df_cfg_table_push_unparsed_string(arena, &view_rule_table, n->string, DF_CfgSrc_User); } df_cfg_table_push_unparsed_string(arena, &view_rule_table, view_rule_string, DF_CfgSrc_User); - df_append_viz_blocks_for_parent__rec(arena, scope, eval_view, ctrl_ctx, parse_ctx, start_parent_key, start_key, expr, eval, &view_rule_table, 0, &blocks); + df_append_viz_blocks_for_parent__rec(arena, scope, eval_view, ctrl_ctx, parse_ctx, start_parent_key, start_key, expr, eval, 0, &view_rule_table, 0, &blocks); } ProfEnd(); return blocks; diff --git a/src/df/core/df_core.h b/src/df/core/df_core.h index 84dbdbd6..5588bcb5 100644 --- a/src/df/core/df_core.h +++ b/src/df/core/df_core.h @@ -720,6 +720,7 @@ struct DF_EvalVizBlock Rng1U64 visual_idx_range; Rng1U64 semantic_idx_range; DBGI_FuzzySearchItemArray backing_search_items; + TG_Member *member; S32 depth; }; @@ -1557,7 +1558,7 @@ internal DF_EvalLinkBase df_eval_link_base_from_chunk_list_index(DF_EvalLinkBase internal DF_EvalLinkBaseArray df_eval_link_base_array_from_chunk_list(Arena *arena, DF_EvalLinkBaseChunkList *chunks); //- rjf: watch tree visualization -internal void df_append_viz_blocks_for_parent__rec(Arena *arena, DBGI_Scope *scope, DF_EvalView *view, DF_CtrlCtx *ctrl_ctx, EVAL_ParseCtx *parse_ctx, DF_ExpandKey parent_key, DF_ExpandKey key, String8 string, DF_Eval eval, DF_CfgTable *cfg_table, S32 depth, DF_EvalVizBlockList *list_out); +internal void df_append_viz_blocks_for_parent__rec(Arena *arena, DBGI_Scope *scope, DF_EvalView *view, DF_CtrlCtx *ctrl_ctx, EVAL_ParseCtx *parse_ctx, DF_ExpandKey parent_key, DF_ExpandKey key, String8 string, DF_Eval eval, TG_Member *opt_member, DF_CfgTable *cfg_table, S32 depth, DF_EvalVizBlockList *list_out); internal DF_EvalVizBlockList df_eval_viz_block_list_from_eval_view_expr_num(Arena *arena, DBGI_Scope *scope, DF_CtrlCtx *ctrl_ctx, EVAL_ParseCtx *parse_ctx, DF_EvalView *eval_view, String8 expr, U64 num); internal void df_eval_viz_block_list_concat__in_place(DF_EvalVizBlockList *dst, DF_EvalVizBlockList *to_push); diff --git a/src/df/gfx/df_gfx.c b/src/df/gfx/df_gfx.c index a7e5c8b6..0ac72bf3 100644 --- a/src/df/gfx/df_gfx.c +++ b/src/df/gfx/df_gfx.c @@ -6692,7 +6692,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, TG_Graph *graph, RADDBG_Parsed *rdbg, DF_CtrlCtx *ctrl_ctx, U32 default_radix, F_Tag font, F32 font_size, F32 max_size, S32 depth, DF_Eval eval, DF_CfgTable *cfg_table) +df_single_line_eval_value_strings_from_eval(Arena *arena, DF_EvalVizStringFlags flags, TG_Graph *graph, RADDBG_Parsed *rdbg, DF_CtrlCtx *ctrl_ctx, U32 default_radix, F_Tag font, F32 font_size, F32 max_size, S32 depth, DF_Eval eval, TG_Member *opt_member, DF_CfgTable *cfg_table) { ProfBeginFunction(); String8List list = {0}; @@ -6701,7 +6701,16 @@ df_single_line_eval_value_strings_from_eval(Arena *arena, DF_EvalVizStringFlags //- rjf: type path -> empty if(eval.mode == EVAL_EvalMode_NULL && !tg_key_match(tg_key_zero(), eval.type_key)) { - str8_list_push(arena, &list, str8_lit("-")); + if(opt_member != 0) + { + U64 member_byte_size = tg_byte_size_from_graph_raddbg_key(graph, rdbg, opt_member->type_key); + str8_list_pushf(arena, &list, "member (%I64u offset, %I64u bytes)", opt_member->off, member_byte_size); + } + else + { + String8 basic_type_kind_string = tg_kind_basic_string_table[tg_kind_from_key(eval.type_key)]; + str8_list_pushf(arena, &list, "%S (%I64u bytes)", basic_type_kind_string, tg_byte_size_from_graph_raddbg_key(graph, rdbg, eval.type_key)); + } } //- rjf: non-type path: descend recursively & produce single-line value strings @@ -6809,7 +6818,7 @@ df_single_line_eval_value_strings_from_eval(Arena *arena, DF_EvalVizStringFlags pted_eval.type_key = direct_type_key; pted_eval.mode = EVAL_EvalMode_Addr; pted_eval.offset = value_eval.imm_u64; - String8List pted_strs = df_single_line_eval_value_strings_from_eval(arena, flags, graph, rdbg, ctrl_ctx, default_radix, font, font_size, max_size-space_taken, depth+1, pted_eval, cfg_table); + String8List pted_strs = df_single_line_eval_value_strings_from_eval(arena, flags, graph, rdbg, ctrl_ctx, 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("???"); @@ -6887,7 +6896,7 @@ df_single_line_eval_value_strings_from_eval(Arena *arena, DF_EvalVizStringFlags element_eval.mode = eval.mode; element_eval.offset = eval.offset + direct_type_byte_size*idx; MemoryCopyArray(element_eval.imm_u128, eval.imm_u128); - String8List element_strs = df_single_line_eval_value_strings_from_eval(arena, flags, graph, rdbg, ctrl_ctx, default_radix, font, font_size, max_size-space_taken, depth+1, element_eval, cfg_table); + String8List element_strs = df_single_line_eval_value_strings_from_eval(arena, flags, graph, rdbg, ctrl_ctx, 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, element_strs).x; str8_list_concat_in_place(&list, &element_strs); if(idx+1 < array_count) @@ -6945,7 +6954,7 @@ df_single_line_eval_value_strings_from_eval(Arena *arena, DF_EvalVizStringFlags member_eval.mode = eval.mode; member_eval.offset = eval.offset + mem->off; MemoryCopyArray(member_eval.imm_u128, eval.imm_u128); - String8List member_strs = df_single_line_eval_value_strings_from_eval(arena, flags, graph, rdbg, ctrl_ctx, default_radix, font, font_size, max_size-space_taken, depth+1, member_eval, cfg_table); + String8List member_strs = df_single_line_eval_value_strings_from_eval(arena, flags, graph, rdbg, ctrl_ctx, 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, member_strs).x; str8_list_concat_in_place(&list, &member_strs); if(member_idx+1 < filtered_data_members.count) @@ -7098,13 +7107,15 @@ df_eval_viz_windowed_row_list_from_viz_block_list(Arena *arena, DBGI_Scope *scop 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, parse_ctx->type_graph, parse_ctx->rdbg, ctrl_ctx, default_radix, font, font_size, 500, 0, block->eval, &block->cfg_table); - String8List edit_strings = df_single_line_eval_value_strings_from_eval(scratch.arena, 0, parse_ctx->type_graph, parse_ctx->rdbg, ctrl_ctx, default_radix, font, font_size, 500, 0, block->eval, &block->cfg_table); + String8List display_strings = df_single_line_eval_value_strings_from_eval(scratch.arena, DF_EvalVizStringFlag_ReadOnlyDisplayRules, parse_ctx->type_graph, parse_ctx->rdbg, ctrl_ctx, 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, parse_ctx->type_graph, parse_ctx->rdbg, ctrl_ctx, default_radix, font, font_size, 500, 0, block->eval, block->member, &block->cfg_table); + String8 display_string = str8_list_join(arena, &display_strings, 0); + String8 edit_string = str8_list_join(arena, &edit_strings, 0); DF_EvalVizRow *row = push_array(arena, DF_EvalVizRow, 1); row->eval = block->eval; row->expr = block->string; - row->display_value = str8_list_join(arena, &display_strings, 0); - row->edit_value = str8_list_join(arena, &edit_strings, 0); + row->display_value = display_string; + row->edit_value = edit_string; 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; @@ -7185,8 +7196,8 @@ df_eval_viz_windowed_row_list_from_viz_block_list(Arena *arena, DBGI_Scope *scop } // rjf: build & push row - String8List display_strings = df_single_line_eval_value_strings_from_eval(scratch.arena, DF_EvalVizStringFlag_ReadOnlyDisplayRules, parse_ctx->type_graph, parse_ctx->rdbg, ctrl_ctx, default_radix, font, font_size, 500, 0, member_eval, &view_rule_table); - String8List edit_strings = df_single_line_eval_value_strings_from_eval(scratch.arena, 0, parse_ctx->type_graph, parse_ctx->rdbg, ctrl_ctx, default_radix, font, font_size, 500, 0, member_eval, &view_rule_table); + String8List display_strings = df_single_line_eval_value_strings_from_eval(scratch.arena, DF_EvalVizStringFlag_ReadOnlyDisplayRules, parse_ctx->type_graph, parse_ctx->rdbg, ctrl_ctx, 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, parse_ctx->type_graph, parse_ctx->rdbg, ctrl_ctx, default_radix, font, font_size, 500, 0, member_eval, member, &view_rule_table); DF_EvalVizRow *row = push_array(arena, DF_EvalVizRow, 1); row->eval = member_eval; row->expr = push_str8_copy(arena, member->name); @@ -7271,8 +7282,8 @@ df_eval_viz_windowed_row_list_from_viz_block_list(Arena *arena, DBGI_Scope *scop } // rjf: build row - String8List display_strings = df_single_line_eval_value_strings_from_eval(scratch.arena, DF_EvalVizStringFlag_ReadOnlyDisplayRules, parse_ctx->type_graph, parse_ctx->rdbg, ctrl_ctx, default_radix, font, font_size, 500, 0, elem_eval, &view_rule_table); - String8List edit_strings = df_single_line_eval_value_strings_from_eval(scratch.arena, 0, parse_ctx->type_graph, parse_ctx->rdbg, ctrl_ctx, default_radix, font, font_size, 500, 0, elem_eval, &view_rule_table); + String8List display_strings = df_single_line_eval_value_strings_from_eval(scratch.arena, DF_EvalVizStringFlag_ReadOnlyDisplayRules, parse_ctx->type_graph, parse_ctx->rdbg, ctrl_ctx, 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, parse_ctx->type_graph, parse_ctx->rdbg, ctrl_ctx, default_radix, font, font_size, 500, 0, elem_eval, 0, &view_rule_table); DF_EvalVizRow *row = push_array(arena, DF_EvalVizRow, 1); row->eval = elem_eval; row->expr = push_str8f(arena, "[%I64u]", idx); @@ -7356,8 +7367,8 @@ df_eval_viz_windowed_row_list_from_viz_block_list(Arena *arena, DBGI_Scope *scop TG_Kind link_type_kind = tg_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, parse_ctx->type_graph, parse_ctx->rdbg, ctrl_ctx, default_radix, font, font_size, 500, 0, link_eval, &view_rule_table); - String8List edit_strings = df_single_line_eval_value_strings_from_eval(scratch.arena, 0, parse_ctx->type_graph, parse_ctx->rdbg, ctrl_ctx, default_radix, font, font_size, 500, 0, link_eval, &view_rule_table); + String8List display_strings = df_single_line_eval_value_strings_from_eval(scratch.arena, DF_EvalVizStringFlag_ReadOnlyDisplayRules, parse_ctx->type_graph, parse_ctx->rdbg, ctrl_ctx, 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, parse_ctx->type_graph, parse_ctx->rdbg, ctrl_ctx, default_radix, font, font_size, 500, 0, link_eval, 0, &view_rule_table); DF_EvalVizRow *row = push_array(arena, DF_EvalVizRow, 1); row->eval = link_eval; row->expr = push_str8f(arena, "[%I64u]", idx); @@ -7474,8 +7485,8 @@ df_eval_viz_windowed_row_list_from_viz_block_list(Arena *arena, DBGI_Scope *scop } // rjf: build row - String8List display_strings = df_single_line_eval_value_strings_from_eval(scratch.arena, DF_EvalVizStringFlag_ReadOnlyDisplayRules, parse_ctx->type_graph, parse_ctx->rdbg, ctrl_ctx, default_radix, font, font_size, 500, 0, eval, &view_rule_table); - String8List edit_strings = df_single_line_eval_value_strings_from_eval(scratch.arena, 0, parse_ctx->type_graph, parse_ctx->rdbg, ctrl_ctx, default_radix, font, font_size, 500, 0, eval, &view_rule_table); + String8List display_strings = df_single_line_eval_value_strings_from_eval(scratch.arena, DF_EvalVizStringFlag_ReadOnlyDisplayRules, parse_ctx->type_graph, parse_ctx->rdbg, ctrl_ctx, 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, parse_ctx->type_graph, parse_ctx->rdbg, ctrl_ctx, default_radix, font, font_size, 500, 0, eval, 0, &view_rule_table); DF_EvalVizRow *row = push_array(arena, DF_EvalVizRow, 1); row->eval = eval; row->expr = name; @@ -7562,8 +7573,8 @@ df_eval_viz_windowed_row_list_from_viz_block_list(Arena *arena, DBGI_Scope *scop } // rjf: build row - String8List display_strings = df_single_line_eval_value_strings_from_eval(scratch.arena, DF_EvalVizStringFlag_ReadOnlyDisplayRules, parse_ctx->type_graph, parse_ctx->rdbg, ctrl_ctx, default_radix, font, font_size, 500, 0, eval, &view_rule_table); - String8List edit_strings = df_single_line_eval_value_strings_from_eval(scratch.arena, 0, parse_ctx->type_graph, parse_ctx->rdbg, ctrl_ctx, default_radix, font, font_size, 500, 0, eval, &view_rule_table); + String8List display_strings = df_single_line_eval_value_strings_from_eval(scratch.arena, DF_EvalVizStringFlag_ReadOnlyDisplayRules, parse_ctx->type_graph, parse_ctx->rdbg, ctrl_ctx, 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, parse_ctx->type_graph, parse_ctx->rdbg, ctrl_ctx, default_radix, font, font_size, 500, 0, eval, 0, &view_rule_table); DF_EvalVizRow *row = push_array(arena, DF_EvalVizRow, 1); row->eval = eval; row->expr = name; @@ -7650,8 +7661,8 @@ df_eval_viz_windowed_row_list_from_viz_block_list(Arena *arena, DBGI_Scope *scop } // rjf: build row - String8List display_strings = df_single_line_eval_value_strings_from_eval(scratch.arena, DF_EvalVizStringFlag_ReadOnlyDisplayRules, parse_ctx->type_graph, parse_ctx->rdbg, ctrl_ctx, default_radix, font, font_size, 500, 0, eval, &view_rule_table); - String8List edit_strings = df_single_line_eval_value_strings_from_eval(scratch.arena, 0, parse_ctx->type_graph, parse_ctx->rdbg, ctrl_ctx, default_radix, font, font_size, 500, 0, eval, &view_rule_table); + String8List display_strings = df_single_line_eval_value_strings_from_eval(scratch.arena, DF_EvalVizStringFlag_ReadOnlyDisplayRules, parse_ctx->type_graph, parse_ctx->rdbg, ctrl_ctx, 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, parse_ctx->type_graph, parse_ctx->rdbg, ctrl_ctx, default_radix, font, font_size, 500, 0, eval, 0, &view_rule_table); DF_EvalVizRow *row = push_array(arena, DF_EvalVizRow, 1); row->eval = eval; row->expr = name; @@ -9852,7 +9863,7 @@ df_code_slice(DF_Window *ws, DF_CtrlCtx *ctrl_ctx, EVAL_ParseCtx *parse_ctx, DF_ if(!tg_key_match(tg_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, parse_ctx->type_graph, parse_ctx->rdbg, ctrl_ctx, 10, params->font, params->font_size, params->font_size*60.f, 0, eval, &cfg_table); + String8List eval_strings = df_single_line_eval_value_strings_from_eval(scratch.arena, DF_EvalVizStringFlag_ReadOnlyDisplayRules, parse_ctx->type_graph, parse_ctx->rdbg, ctrl_ctx, 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)); diff --git a/src/df/gfx/df_gfx.h b/src/df/gfx/df_gfx.h index 39d6a6f6..75bd2b4b 100644 --- a/src/df/gfx/df_gfx.h +++ b/src/df/gfx/df_gfx.h @@ -960,7 +960,7 @@ internal void df_window_update_and_render(Arena *arena, OS_EventList *events, DF //~ 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, TG_Graph *graph, RADDBG_Parsed *rdbg, DF_CtrlCtx *ctrl_ctx, U32 default_radix, F_Tag font, F32 font_size, F32 max_size, S32 depth, DF_Eval eval, DF_CfgTable *cfg_table); +internal String8List df_single_line_eval_value_strings_from_eval(Arena *arena, DF_EvalVizStringFlags flags, TG_Graph *graph, RADDBG_Parsed *rdbg, DF_CtrlCtx *ctrl_ctx, U32 default_radix, F_Tag font, F32 font_size, F32 max_size, S32 depth, DF_Eval eval, TG_Member *opt_member, DF_CfgTable *cfg_table); internal DF_EvalVizWindowedRowList df_eval_viz_windowed_row_list_from_viz_block_list(Arena *arena, DBGI_Scope *scope, DF_CtrlCtx *ctrl_ctx, EVAL_ParseCtx *parse_ctx, DF_EvalView *eval_view, U32 default_radix, F_Tag font, F32 font_size, Rng1S64 visible_range, DF_EvalVizBlockList *blocks); //////////////////////////////// diff --git a/src/df/gfx/df_views.c b/src/df/gfx/df_views.c index 0b5ff9e0..d027d134 100644 --- a/src/df/gfx/df_views.c +++ b/src/df/gfx/df_views.c @@ -808,7 +808,7 @@ df_eval_viz_block_list_from_watch_view_state(Arena *arena, DBGI_Scope *scope, DF { blocks.total_visual_row_count -= 1; blocks.total_semantic_row_count -= 1; - df_append_viz_blocks_for_parent__rec(arena, scope, eval_view, ctrl_ctx, parse_ctx, parent_key, child->key, name, eval, &child_cfg, 0, &blocks); + df_append_viz_blocks_for_parent__rec(arena, scope, eval_view, ctrl_ctx, parse_ctx, parent_key, child->key, name, eval, 0, &child_cfg, 0, &blocks); } // rjf: make new memblock for remainder of globals (if any) @@ -907,7 +907,7 @@ df_eval_viz_block_list_from_watch_view_state(Arena *arena, DBGI_Scope *scope, DF { blocks.total_visual_row_count -= 1; blocks.total_semantic_row_count -= 1; - df_append_viz_blocks_for_parent__rec(arena, scope, eval_view, ctrl_ctx, parse_ctx, parent_key, child->key, name, eval, &child_cfg, 0, &blocks); + df_append_viz_blocks_for_parent__rec(arena, scope, eval_view, ctrl_ctx, parse_ctx, parent_key, child->key, name, eval, 0, &child_cfg, 0, &blocks); } // rjf: make new memblock for remainder (if any) @@ -1006,7 +1006,7 @@ df_eval_viz_block_list_from_watch_view_state(Arena *arena, DBGI_Scope *scope, DF { blocks.total_visual_row_count -= 1; blocks.total_semantic_row_count -= 1; - df_append_viz_blocks_for_parent__rec(arena, scope, eval_view, ctrl_ctx, parse_ctx, parent_key, child->key, name, eval, &child_cfg, 0, &blocks); + df_append_viz_blocks_for_parent__rec(arena, scope, eval_view, ctrl_ctx, parse_ctx, parent_key, child->key, name, eval, 0, &child_cfg, 0, &blocks); } // rjf: make new memblock for remainder (if any) @@ -1312,6 +1312,7 @@ df_eval_watch_view_build(DF_Window *ws, DF_Panel *panel, DF_View *view, DF_EvalW } //- rjf: build table + ProfScope("build table") { //- rjf: build rows U64 semantic_idx = rows.count_before_semantic; @@ -1351,7 +1352,7 @@ df_eval_watch_view_build(DF_Window *ws, DF_Panel *panel, DF_View *view, DF_EvalW } //- rjf: build canvas row - if(row->flags & DF_EvalVizRowFlag_Canvas) UI_FocusHot(row_selected ? UI_FocusKind_On : UI_FocusKind_Off) + if(row->flags & DF_EvalVizRowFlag_Canvas) UI_FocusHot(row_selected ? UI_FocusKind_On : UI_FocusKind_Off) ProfScope("canvas row") { ui_set_next_flags(disabled_flags); ui_set_next_pref_width(ui_pct(1, 0)); @@ -1383,7 +1384,7 @@ df_eval_watch_view_build(DF_Window *ws, DF_Panel *panel, DF_View *view, DF_EvalW } //- rjf: build normal row - if(!(row->flags & DF_EvalVizRowFlag_Canvas)) + if(!(row->flags & DF_EvalVizRowFlag_Canvas)) ProfScope("row") { ui_set_next_flags(disabled_flags|(row_is_fresh*UI_BoxFlag_DrawOverlay)); if(row_is_fresh) @@ -1393,6 +1394,7 @@ df_eval_watch_view_build(DF_Window *ws, DF_Panel *panel, DF_View *view, DF_EvalW UI_NamedTableVectorF("row_%I64x", row_hash) { //- rjf: expression + ProfScope("expr") { B32 cell_selected = (row_selected && cursor.x == DF_EvalWatchViewColumnKind_Expr); B32 can_edit_expr = !(row->depth > 0 || modifiable == 0); @@ -1548,6 +1550,7 @@ df_eval_watch_view_build(DF_Window *ws, DF_Panel *panel, DF_View *view, DF_EvalW } //- rjf: value + ProfScope("value") { B32 cell_selected = (row_selected && cursor.x == DF_EvalWatchViewColumnKind_Value); B32 value_is_error = (row->errors.count != 0); @@ -1635,6 +1638,7 @@ df_eval_watch_view_build(DF_Window *ws, DF_Panel *panel, DF_View *view, DF_EvalW } //- rjf: type + ProfScope("type") { B32 cell_selected = (row_selected && cursor.x == DF_EvalWatchViewColumnKind_Type); UI_TableCell UI_Font(code_font) @@ -1660,6 +1664,7 @@ df_eval_watch_view_build(DF_Window *ws, DF_Panel *panel, DF_View *view, DF_EvalW } //- rjf: view rule + ProfScope("view rule") { B32 cell_selected = (row_selected && cursor.x == DF_EvalWatchViewColumnKind_ViewRule); String8 view_rule = df_eval_view_rule_from_key(eval_view, row->key); diff --git a/src/eval/eval_compiler.c b/src/eval/eval_compiler.c index a9a70db8..321b3fa4 100644 --- a/src/eval/eval_compiler.c +++ b/src/eval/eval_compiler.c @@ -44,6 +44,7 @@ eval_error_list_concat_in_place(EVAL_ErrorList *dst, EVAL_ErrorList *to_push){ internal String8 eval_bytecode_from_oplist(Arena *arena, EVAL_OpList *list){ + ProfBeginFunction(); // allocate output U64 size = list->encoded_size; U8 *str = push_array_no_zero(arena, U8, size); @@ -94,6 +95,7 @@ eval_bytecode_from_oplist(Arena *arena, EVAL_OpList *list){ String8 result = {0}; result.size = size; result.str = str; + ProfEnd(); return(result); } @@ -761,6 +763,7 @@ eval_type_from_type_expr(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdbg, EVA internal EVAL_IRTreeAndType eval_irtree_and_type_from_expr(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdbg, EVAL_Expr *expr, EVAL_ErrorList *eout) { + ProfBeginFunction(); EVAL_IRTreeAndType result = {0}; result.tree = &eval_irtree_nil; @@ -1535,11 +1538,13 @@ eval_irtree_and_type_from_expr(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdb }break; } + ProfEnd(); return(result); } internal void eval_oplist_from_irtree(Arena *arena, EVAL_IRTree *tree, EVAL_OpList *out){ + ProfBeginFunction(); U32 op = tree->op; switch (op){ case RADDBG_EvalOp_Stop: @@ -1604,4 +1609,5 @@ eval_oplist_from_irtree(Arena *arena, EVAL_IRTree *tree, EVAL_OpList *out){ } }break; } + ProfEnd(); } diff --git a/src/eval/eval_machine.c b/src/eval/eval_machine.c index 8af94237..6afd7e12 100644 --- a/src/eval/eval_machine.c +++ b/src/eval/eval_machine.c @@ -6,6 +6,7 @@ internal EVAL_Result eval_interpret(EVAL_Machine *machine, String8 bytecode){ + ProfBeginFunction(); EVAL_Result result = {0}; // TODO(allen): We could scan the bytecode and figure out the @@ -626,5 +627,6 @@ eval_interpret(EVAL_Machine *machine, String8 bytecode){ } scratch_end(scratch); + ProfEnd(); return(result); } \ No newline at end of file diff --git a/src/eval/eval_parser.c b/src/eval/eval_parser.c index 86f4ee24..10e1cab0 100644 --- a/src/eval/eval_parser.c +++ b/src/eval/eval_parser.c @@ -316,6 +316,7 @@ eval_token_array_from_chunk_list(Arena *arena, EVAL_TokenChunkList *list) internal EVAL_TokenArray eval_token_array_from_text(Arena *arena, String8 text) { + ProfBeginFunction(); Temp scratch = scratch_begin(&arena, 1); //- rjf: lex loop @@ -486,6 +487,7 @@ eval_token_array_from_text(Arena *arena, String8 text) //- rjf: chunk list -> array & return EVAL_TokenArray array = eval_token_array_from_chunk_list(arena, &tokens); scratch_end(scratch); + ProfEnd(); return array; } @@ -663,6 +665,7 @@ eval_parse_type_from_text_tokens(Arena *arena, EVAL_ParseCtx *ctx, String8 text, internal EVAL_ParseResult eval_parse_expr_from_text_tokens__prec(Arena *arena, EVAL_ParseCtx *ctx, String8 text, EVAL_TokenArray *tokens, S64 max_precedence) { + ProfBeginFunction(); Temp scratch = scratch_begin(&arena, 1); EVAL_Token *it = tokens->v; EVAL_Token *it_opl = tokens->v + tokens->count; @@ -1465,6 +1468,7 @@ eval_parse_expr_from_text_tokens__prec(Arena *arena, EVAL_ParseCtx *ctx, String8 result.last_token = it; result.expr = atom; scratch_end(scratch); + ProfEnd(); return result; } diff --git a/src/type_graph/generated/type_graph.meta.h b/src/type_graph/generated/type_graph.meta.h index d869ee04..34bdea1f 100644 --- a/src/type_graph/generated/type_graph.meta.h +++ b/src/type_graph/generated/type_graph.meta.h @@ -178,15 +178,15 @@ str8_lit_comp(""), str8_lit_comp(""), str8_lit_comp(""), str8_lit_comp(""), -str8_lit_comp(""), -str8_lit_comp(""), -str8_lit_comp(""), -str8_lit_comp(""), -str8_lit_comp(""), -str8_lit_comp(""), -str8_lit_comp(""), -str8_lit_comp(""), -str8_lit_comp(""), +str8_lit_comp("struct"), +str8_lit_comp("class"), +str8_lit_comp("union"), +str8_lit_comp("enum"), +str8_lit_comp("typedef"), +str8_lit_comp("struct"), +str8_lit_comp("union"), +str8_lit_comp("class"), +str8_lit_comp("enum"), str8_lit_comp(""), str8_lit_comp(""), }; diff --git a/src/type_graph/type_graph.c b/src/type_graph/type_graph.c index feb1f797..e38222c2 100644 --- a/src/type_graph/type_graph.c +++ b/src/type_graph/type_graph.c @@ -931,6 +931,16 @@ tg_kind_from_key(TG_Key key) return kind; } +internal TG_Member * +tg_member_copy(Arena *arena, TG_Member *src) +{ + TG_Member *dst = push_array(arena, TG_Member, 1); + MemoryCopyStruct(dst, src); + dst->name = push_str8_copy(arena, src->name); + dst->inheritance_key_chain = tg_key_list_copy(arena, &src->inheritance_key_chain); + return dst; +} + internal TG_MemberArray tg_members_from_graph_raddbg_key(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdbg, TG_Key key) { diff --git a/src/type_graph/type_graph.h b/src/type_graph/type_graph.h index 322359ae..05928c32 100644 --- a/src/type_graph/type_graph.h +++ b/src/type_graph/type_graph.h @@ -232,6 +232,7 @@ internal TG_Key tg_ptee_from_graph_raddbg_key(TG_Graph *graph, RADDBG_Parsed *rd internal TG_Key tg_unwrapped_from_graph_raddbg_key(TG_Graph *graph, RADDBG_Parsed *rdbg, TG_Key key); internal U64 tg_byte_size_from_graph_raddbg_key(TG_Graph *graph, RADDBG_Parsed *rdbg, TG_Key key); internal TG_Kind tg_kind_from_key(TG_Key key); +internal TG_Member *tg_member_copy(Arena *arena, TG_Member *src); internal TG_MemberArray tg_members_from_graph_raddbg_key(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdbg, TG_Key key); internal TG_MemberArray tg_data_members_from_graph_raddbg_key(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdbg, TG_Key key); internal void tg_lhs_string_from_key(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdbg, TG_Key key, String8List *out, U32 prec, B32 skip_return); diff --git a/src/type_graph/type_graph.mdesk b/src/type_graph/type_graph.mdesk index 2a22968d..eac88139 100644 --- a/src/type_graph/type_graph.mdesk +++ b/src/type_graph/type_graph.mdesk @@ -51,15 +51,15 @@ TG_KindTable: {Function "" 0 } {Method "" 0 } {MemberPtr "" 0 } - {Struct "" 0 } - {Class "" 0 } - {Union "" 0 } - {Enum "" 0 } - {Alias "" 0 } - {IncompleteStruct "" 0 } - {IncompleteUnion "" 0 } - {IncompleteClass "" 0 } - {IncompleteEnum "" 0 } + {Struct "struct" 0 } + {Class "class" 0 } + {Union "union" 0 } + {Enum "enum" 0 } + {Alias "typedef" 0 } + {IncompleteStruct "struct" 0 } + {IncompleteUnion "union" 0 } + {IncompleteClass "class" 0 } + {IncompleteEnum "enum" 0 } {Bitfield "" 0 } {Variadic "" 0 } }