From 816f94ef7192ccdfec5cbc80e6dafab5e45182de Mon Sep 17 00:00:00 2001 From: Ryan Fleury Date: Tue, 13 Feb 2024 15:56:30 -0800 Subject: [PATCH] further raddbgi -> rdi naming pass --- README.md | 2 +- src/ctrl/ctrl_core.c | 80 +++++------ src/dbgi/dbgi.c | 42 +++--- src/dbgi/dbgi.h | 4 +- src/df/core/df_core.c | 204 +++++++++++++-------------- src/df/core/df_core.h | 10 +- src/df/gfx/df_gfx.c | 82 +++++------ src/df/gfx/df_gfx.h | 2 +- src/df/gfx/df_view_rule_hooks.c | 40 +++--- src/df/gfx/df_views.c | 38 ++--- src/eval/eval_compiler.c | 236 ++++++++++++++++---------------- src/eval/eval_compiler.h | 20 +-- src/eval/eval_parser.c | 162 +++++++++++----------- src/eval/eval_parser.h | 8 +- src/scratch/look_at_raddbg.c | 24 ++-- src/type_graph/type_graph.c | 216 ++++++++++++++--------------- src/type_graph/type_graph.h | 24 ++-- 17 files changed, 597 insertions(+), 597 deletions(-) diff --git a/README.md b/README.md index 35b7a385..13d40cec 100644 --- a/README.md +++ b/README.md @@ -277,7 +277,7 @@ A list of the layers in the codebase and their associated namespaces is below: - `lib_raddbgi_make` (`RDIM_`): Standalone library for constructing RADDBGI debug info data. Does not depend on `base`, and can be independently relocated to other codebases. -- `lib_raddbgi_format` (`RADDBGI_`): Standalone library for defining the core +- `lib_raddbgi_format` (`RDI_`): Standalone library which defines the core RADDBGI types and helper functions for reading and writing the RADDBGI debug info file format. Does not depend on `base`, and can be independently relocated to other codebases. diff --git a/src/ctrl/ctrl_core.c b/src/ctrl/ctrl_core.c index e050523a..41d1cc8f 100644 --- a/src/ctrl/ctrl_core.c +++ b/src/ctrl/ctrl_core.c @@ -204,7 +204,7 @@ ctrl_append_resolved_module_user_bp_traps(Arena *arena, DEMON_Handle process, DE DBGI_Scope *scope = dbgi_scope_open(); String8 exe_path = demon_full_path_from_module(scratch.arena, module); DBGI_Parse *dbgi = dbgi_parse_from_exe_path(scope, exe_path, max_U64); - RDI_Parsed *rdbg = &dbgi->rdbg; + RDI_Parsed *rdi = &dbgi->rdi; U64 base_vaddr = demon_base_vaddr_from_module(module); for(CTRL_UserBreakpointNode *n = user_bps->first; n != 0; n = n->next) { @@ -229,16 +229,16 @@ ctrl_append_resolved_module_user_bp_traps(Arena *arena, DEMON_Handle process, DE // rjf: filename -> src_id U32 src_id = 0; { - RDI_NameMap *mapptr = rdi_name_map_from_kind(rdbg, RDI_NameMapKind_NormalSourcePaths); + RDI_NameMap *mapptr = rdi_name_map_from_kind(rdi, RDI_NameMapKind_NormalSourcePaths); if(mapptr != 0) { RDI_ParsedNameMap map = {0}; - rdi_name_map_parse(rdbg, mapptr, &map); - RDI_NameMapNode *node = rdi_name_map_lookup(rdbg, &map, filename_normalized.str, filename_normalized.size); + rdi_name_map_parse(rdi, mapptr, &map); + RDI_NameMapNode *node = rdi_name_map_lookup(rdi, &map, filename_normalized.str, filename_normalized.size); if(node != 0) { U32 id_count = 0; - U32 *ids = rdi_matches_from_map_node(rdbg, node, &id_count); + U32 *ids = rdi_matches_from_map_node(rdi, node, &id_count); if(id_count > 0) { src_id = ids[0]; @@ -249,9 +249,9 @@ ctrl_append_resolved_module_user_bp_traps(Arena *arena, DEMON_Handle process, DE // rjf: src_id * pt -> push { - RDI_SourceFile *src = rdi_element_from_idx(rdbg, source_files, src_id); + RDI_SourceFile *src = rdi_element_from_idx(rdi, source_files, src_id); RDI_ParsedLineMap line_map = {0}; - rdi_line_map_from_source_file(rdbg, src, &line_map); + rdi_line_map_from_source_file(rdi, src, &line_map); U32 voff_count = 0; U64 *voffs = rdi_line_voffs_from_num(&line_map, pt.line, &voff_count); for(U32 i = 0; i < voff_count; i += 1) @@ -268,21 +268,21 @@ ctrl_append_resolved_module_user_bp_traps(Arena *arena, DEMON_Handle process, DE { String8 symbol_name = bp->string; U64 voff = bp->u64; - if(rdbg != 0 && rdbg->procedures != 0) + if(rdi != 0 && rdi->procedures != 0) { - RDI_NameMap *mapptr = rdi_name_map_from_kind(rdbg, RDI_NameMapKind_Procedures); + RDI_NameMap *mapptr = rdi_name_map_from_kind(rdi, RDI_NameMapKind_Procedures); if(mapptr != 0) { RDI_ParsedNameMap map = {0}; - rdi_name_map_parse(rdbg, mapptr, &map); - RDI_NameMapNode *node = rdi_name_map_lookup(rdbg, &map, symbol_name.str, symbol_name.size); + rdi_name_map_parse(rdi, mapptr, &map); + RDI_NameMapNode *node = rdi_name_map_lookup(rdi, &map, symbol_name.str, symbol_name.size); if(node != 0) { U32 id_count = 0; - U32 *ids = rdi_matches_from_map_node(rdbg, node, &id_count); + U32 *ids = rdi_matches_from_map_node(rdi, node, &id_count); for(U32 match_i = 0; match_i < id_count; match_i += 1) { - U64 proc_voff = rdi_first_voff_from_proc(rdbg, ids[match_i]); + U64 proc_voff = rdi_first_voff_from_proc(rdi, ids[match_i]); U64 proc_vaddr = proc_voff + base_vaddr; DEMON_Trap trap = {process, proc_vaddr + voff, (U64)bp}; demon_trap_chunk_list_push(arena, traps_out, 256, &trap); @@ -1643,21 +1643,21 @@ ctrl_thread__next_demon_event(Arena *arena, CTRL_Msg *msg, DEMON_RunCtrls *run_c CTRL_Handle module = ctrl_handle_from_demon(modules.handles[0]); String8 module_path = demon_full_path_from_module(scratch.arena, ctrl_demon_handle_from_ctrl(module)); DBGI_Parse *dbgi = dbgi_parse_from_exe_path(scope, module_path, max_U64); - RDI_Parsed *rdbg = &dbgi->rdbg; - RDI_NameMap *unparsed_map = rdi_name_map_from_kind(rdbg, RDI_NameMapKind_GlobalVariables); - if(rdbg->global_variables != 0 && unparsed_map != 0) + RDI_Parsed *rdi = &dbgi->rdi; + RDI_NameMap *unparsed_map = rdi_name_map_from_kind(rdi, RDI_NameMapKind_GlobalVariables); + if(rdi->global_variables != 0 && unparsed_map != 0) { RDI_ParsedNameMap map = {0}; - rdi_name_map_parse(rdbg, unparsed_map, &map); + rdi_name_map_parse(rdi, unparsed_map, &map); String8 name = str8_lit("__asan_shadow_memory_dynamic_address"); - RDI_NameMapNode *node = rdi_name_map_lookup(rdbg, &map, name.str, name.size); + RDI_NameMapNode *node = rdi_name_map_lookup(rdi, &map, name.str, name.size); if(node != 0) { U32 id_count = 0; - U32 *ids = rdi_matches_from_map_node(rdbg, node, &id_count); + U32 *ids = rdi_matches_from_map_node(rdi, node, &id_count); if(id_count > 0) { - RDI_GlobalVariable *global_var = rdi_element_from_idx(rdbg, global_variables, ids[0]); + RDI_GlobalVariable *global_var = rdi_element_from_idx(rdi, global_variables, ids[0]); U64 global_var_voff = global_var->voff; U64 global_var_vaddr = global_var->voff + demon_base_vaddr_from_module(ctrl_demon_handle_from_ctrl(module)); Architecture arch = demon_arch_from_object(ev->thread); @@ -2148,10 +2148,10 @@ ctrl_thread__launch_and_init(CTRL_Msg *msg) U64 module_base_vaddr = demon_base_vaddr_from_module(module); String8 exe_path = demon_full_path_from_module(scratch.arena, module); DBGI_Parse *dbgi = dbgi_parse_from_exe_path(scope, exe_path, max_U64); - RDI_Parsed *rdbg = &dbgi->rdbg; - RDI_NameMap *unparsed_map = rdi_name_map_from_kind(rdbg, RDI_NameMapKind_Procedures); + RDI_Parsed *rdi = &dbgi->rdi; + RDI_NameMap *unparsed_map = rdi_name_map_from_kind(rdi, RDI_NameMapKind_Procedures); RDI_ParsedNameMap map = {0}; - rdi_name_map_parse(rdbg, unparsed_map, &map); + rdi_name_map_parse(rdi, unparsed_map, &map); //- rjf: add trap for user-specified entry point, if specified B32 entries_found = 0; @@ -2162,15 +2162,15 @@ ctrl_thread__launch_and_init(CTRL_Msg *msg) U32 procedure_id = 0; { String8 name = n->string; - RDI_NameMapNode *node = rdi_name_map_lookup(rdbg, &map, name.str, name.size); + RDI_NameMapNode *node = rdi_name_map_lookup(rdi, &map, name.str, name.size); U32 id_count = 0; - U32 *ids = rdi_matches_from_map_node(rdbg, node, &id_count); + U32 *ids = rdi_matches_from_map_node(rdi, node, &id_count); if(id_count > 0) { procedure_id = ids[0]; } } - U64 voff = rdi_first_voff_from_proc(rdbg, procedure_id); + U64 voff = rdi_first_voff_from_proc(rdi, procedure_id); if(voff != 0) { entries_found = 1; @@ -2188,15 +2188,15 @@ ctrl_thread__launch_and_init(CTRL_Msg *msg) U32 procedure_id = 0; { String8 name = n->string; - RDI_NameMapNode *node = rdi_name_map_lookup(rdbg, &map, name.str, name.size); + RDI_NameMapNode *node = rdi_name_map_lookup(rdi, &map, name.str, name.size); U32 id_count = 0; - U32 *ids = rdi_matches_from_map_node(rdbg, node, &id_count); + U32 *ids = rdi_matches_from_map_node(rdi, node, &id_count); if(id_count > 0) { procedure_id = ids[0]; } } - U64 voff = rdi_first_voff_from_proc(rdbg, procedure_id); + U64 voff = rdi_first_voff_from_proc(rdi, procedure_id); if(voff != 0) { DEMON_Trap trap = {run_ctrls.run_entities[process_idx], module_base_vaddr + voff}; @@ -2221,15 +2221,15 @@ ctrl_thread__launch_and_init(CTRL_Msg *msg) U32 procedure_id = 0; { String8 name = hi_entry_points[idx]; - RDI_NameMapNode *node = rdi_name_map_lookup(rdbg, &map, name.str, name.size); + RDI_NameMapNode *node = rdi_name_map_lookup(rdi, &map, name.str, name.size); U32 id_count = 0; - U32 *ids = rdi_matches_from_map_node(rdbg, node, &id_count); + U32 *ids = rdi_matches_from_map_node(rdi, node, &id_count); if(id_count > 0) { procedure_id = ids[0]; } } - U64 voff = rdi_first_voff_from_proc(rdbg, procedure_id); + U64 voff = rdi_first_voff_from_proc(rdi, procedure_id); if(voff != 0) { entries_found = 1; @@ -2265,15 +2265,15 @@ ctrl_thread__launch_and_init(CTRL_Msg *msg) U32 procedure_id = 0; { String8 name = lo_entry_points[idx]; - RDI_NameMapNode *node = rdi_name_map_lookup(rdbg, &map, name.str, name.size); + RDI_NameMapNode *node = rdi_name_map_lookup(rdi, &map, name.str, name.size); U32 id_count = 0; - U32 *ids = rdi_matches_from_map_node(rdbg, node, &id_count); + U32 *ids = rdi_matches_from_map_node(rdi, node, &id_count); if(id_count > 0) { procedure_id = ids[0]; } } - U64 voff = rdi_first_voff_from_proc(rdbg, procedure_id); + U64 voff = rdi_first_voff_from_proc(rdi, procedure_id); if(voff != 0) { entries_found = 1; @@ -2871,7 +2871,7 @@ ctrl_thread__run(CTRL_Msg *msg) { String8 exe_path = demon_full_path_from_module(temp.arena, module); DBGI_Parse *dbgi = dbgi_parse_from_exe_path(scope, exe_path, max_U64); - RDI_Parsed *rdbg = &dbgi->rdbg; + RDI_Parsed *rdi = &dbgi->rdi; for(String8Node *condition_n = conditions.first; condition_n != 0; condition_n = condition_n->next) { String8 string = condition_n->string; @@ -2879,12 +2879,12 @@ ctrl_thread__run(CTRL_Msg *msg) { parse_ctx.arch = arch; parse_ctx.ip_voff = thread_rip_voff; - parse_ctx.rdbg = rdbg; + parse_ctx.rdi = rdi; parse_ctx.type_graph = tg_graph_begin(bit_size_from_arch(arch)/8, 256); parse_ctx.regs_map = ctrl_string2reg_from_arch(arch); parse_ctx.reg_alias_map = ctrl_string2alias_from_arch(arch); - parse_ctx.locals_map = eval_push_locals_map_from_rdi_voff(temp.arena, rdbg, thread_rip_voff); - parse_ctx.member_map = eval_push_member_map_from_rdi_voff(temp.arena, rdbg, thread_rip_voff); + parse_ctx.locals_map = eval_push_locals_map_from_rdi_voff(temp.arena, rdi, thread_rip_voff); + parse_ctx.member_map = eval_push_member_map_from_rdi_voff(temp.arena, rdi, thread_rip_voff); } EVAL_TokenArray tokens = eval_token_array_from_text(temp.arena, string); EVAL_ParseResult parse = eval_parse_expr_from_text_tokens(temp.arena, &parse_ctx, string, &tokens); @@ -2894,7 +2894,7 @@ ctrl_thread__run(CTRL_Msg *msg) EVAL_IRTreeAndType ir_tree_and_type = {&eval_irtree_nil}; if(parse_has_expr && errors.count == 0) { - ir_tree_and_type = eval_irtree_and_type_from_expr(temp.arena, parse_ctx.type_graph, rdbg, &eval_string2expr_map_nil, parse.expr, &errors); + ir_tree_and_type = eval_irtree_and_type_from_expr(temp.arena, parse_ctx.type_graph, rdi, &eval_string2expr_map_nil, parse.expr, &errors); } EVAL_OpList op_list = {0}; if(parse_has_expr && ir_tree_and_type.tree != &eval_irtree_nil) diff --git a/src/dbgi/dbgi.c b/src/dbgi/dbgi.c index e34dcf39..3b0c5980 100644 --- a/src/dbgi/dbgi.c +++ b/src/dbgi/dbgi.c @@ -111,7 +111,7 @@ dbgi_fuzzy_item_num_from_array_element_idx__linear_search(DBGI_FuzzySearchItemAr } internal String8 -dbgi_fuzzy_item_string_from_rdbg_target_element_idx(RDI_Parsed *rdbg, DBGI_FuzzySearchTarget target, U64 element_idx) +dbgi_fuzzy_item_string_from_rdi_target_element_idx(RDI_Parsed *rdi, DBGI_FuzzySearchTarget target, U64 element_idx) { String8 result = {0}; switch(target) @@ -119,31 +119,31 @@ dbgi_fuzzy_item_string_from_rdbg_target_element_idx(RDI_Parsed *rdbg, DBGI_Fuzzy // NOTE(rjf): no default - warn if we miss a case case DBGI_FuzzySearchTarget_Procedures: { - RDI_Procedure *proc = rdi_element_from_idx(rdbg, procedures, element_idx); + RDI_Procedure *proc = rdi_element_from_idx(rdi, procedures, element_idx); U64 name_size = 0; - U8 *name_base = rdi_string_from_idx(rdbg, proc->name_string_idx, &name_size); + U8 *name_base = rdi_string_from_idx(rdi, proc->name_string_idx, &name_size); result = str8(name_base, name_size); }break; case DBGI_FuzzySearchTarget_GlobalVariables: { - RDI_GlobalVariable *gvar = rdi_element_from_idx(rdbg, global_variables, element_idx); + RDI_GlobalVariable *gvar = rdi_element_from_idx(rdi, global_variables, element_idx); U64 name_size = 0; - U8 *name_base = rdi_string_from_idx(rdbg, gvar->name_string_idx, &name_size); + U8 *name_base = rdi_string_from_idx(rdi, gvar->name_string_idx, &name_size); result = str8(name_base, name_size); }break; case DBGI_FuzzySearchTarget_ThreadVariables: { - RDI_ThreadVariable *tvar = rdi_element_from_idx(rdbg, thread_variables, element_idx); + RDI_ThreadVariable *tvar = rdi_element_from_idx(rdi, thread_variables, element_idx); U64 name_size = 0; - U8 *name_base = rdi_string_from_idx(rdbg, tvar->name_string_idx, &name_size); + U8 *name_base = rdi_string_from_idx(rdi, tvar->name_string_idx, &name_size); result = str8(name_base, name_size); }break; case DBGI_FuzzySearchTarget_UDTs: { - RDI_UDT *udt = rdi_element_from_idx(rdbg, udts, element_idx); - RDI_TypeNode *type_node = rdi_element_from_idx(rdbg, type_nodes, udt->self_type_idx); + RDI_UDT *udt = rdi_element_from_idx(rdi, udts, element_idx); + RDI_TypeNode *type_node = rdi_element_from_idx(rdi, type_nodes, udt->self_type_idx); U64 name_size = 0; - U8 *name_base = rdi_string_from_idx(rdbg, type_node->user_defined.name_string_idx, &name_size); + U8 *name_base = rdi_string_from_idx(rdi, type_node->user_defined.name_string_idx, &name_size); result = str8(name_base, name_size); }break; case DBGI_FuzzySearchTarget_COUNT:{}break; @@ -1017,7 +1017,7 @@ dbgi_parse_thread_entry_point(void *p) } //- rjf: parse raddbg info - RDI_Parsed rdi_parsed = dbgi_parse_nil.rdbg; + RDI_Parsed rdi_parsed = dbgi_parse_nil.rdi; U64 arch_addr_size = 8; if(do_task) { @@ -1053,7 +1053,7 @@ dbgi_parse_thread_entry_point(void *p) bin->parse.arena = parse_arena; bin->parse.dbg_path = push_str8_copy(parse_arena, dbg_path); MemoryCopyStruct(&bin->parse.pe, &exe_pe_info); - MemoryCopyStruct(&bin->parse.rdbg, &rdi_parsed); + MemoryCopyStruct(&bin->parse.rdi, &rdi_parsed); bin->parse.gen = bin->gen; break; } @@ -1197,9 +1197,9 @@ dbgi_fuzzy_thread__entry_point(void *p) //- rjf: exe_path -> dbgi_parse, raddbg DBGI_Parse *dbgi = dbgi_parse_from_exe_path(scope, exe_path, max_U64); - RDI_Parsed *rdbg = &dbgi->rdbg; + RDI_Parsed *rdi = &dbgi->rdi; - //- rjf: rdbg * query -> item list + //- rjf: rdi * query -> item list U64 table_ptr_off = 0; U64 element_name_idx_off = 0; U64 element_count = 0; @@ -1212,34 +1212,34 @@ dbgi_fuzzy_thread__entry_point(void *p) { table_ptr_off = OffsetOf(RDI_Parsed, procedures); element_name_idx_off = OffsetOf(RDI_Procedure, name_string_idx); - element_count = rdbg->procedures_count; + element_count = rdi->procedures_count; element_size = sizeof(RDI_Procedure); }break; case DBGI_FuzzySearchTarget_GlobalVariables: { table_ptr_off = OffsetOf(RDI_Parsed, global_variables); element_name_idx_off = OffsetOf(RDI_GlobalVariable, name_string_idx); - element_count = rdbg->global_variables_count; + element_count = rdi->global_variables_count; element_size = sizeof(RDI_GlobalVariable); }break; case DBGI_FuzzySearchTarget_ThreadVariables: { table_ptr_off = OffsetOf(RDI_Parsed, thread_variables); element_name_idx_off = OffsetOf(RDI_ThreadVariable, name_string_idx); - element_count = rdbg->thread_variables_count; + element_count = rdi->thread_variables_count; element_size = sizeof(RDI_ThreadVariable); }break; case DBGI_FuzzySearchTarget_UDTs: { table_ptr_off = OffsetOf(RDI_Parsed, udts); - element_count = rdbg->udts_count; + element_count = rdi->udts_count; element_size = sizeof(RDI_UDT); }break; } DBGI_FuzzySearchItemChunkList items_list = {0}; if(task_is_good) { - void *table_base = (U8*)rdbg + table_ptr_off; + void *table_base = (U8*)rdi + table_ptr_off; for(U64 idx = 1; task_is_good && idx < element_count; idx += 1) { void *element = (U8 *)(*(void **)table_base) + element_size*idx; @@ -1247,12 +1247,12 @@ dbgi_fuzzy_thread__entry_point(void *p) if(target == DBGI_FuzzySearchTarget_UDTs) { RDI_UDT *udt = (RDI_UDT *)element; - RDI_TypeNode *type_node = rdi_element_from_idx(rdbg, type_nodes, udt->self_type_idx); + RDI_TypeNode *type_node = rdi_element_from_idx(rdi, type_nodes, udt->self_type_idx); name_idx_ptr = &type_node->user_defined.name_string_idx; } U32 name_idx = *name_idx_ptr; U64 name_size = 0; - U8 *name_base = rdi_string_from_idx(rdbg, name_idx, &name_size); + U8 *name_base = rdi_string_from_idx(rdi, name_idx, &name_size); String8 name = str8(name_base, name_size); if(name.size == 0) { continue; } FuzzyMatchRangeList matches = fuzzy_match_find(task_arena, query, name); diff --git a/src/dbgi/dbgi.h b/src/dbgi/dbgi.h index 0ba0f35b..80c01841 100644 --- a/src/dbgi/dbgi.h +++ b/src/dbgi/dbgi.h @@ -18,7 +18,7 @@ struct DBGI_Parse void *dbg_base; FileProperties dbg_props; PE_BinInfo pe; - RDI_Parsed rdbg; + RDI_Parsed rdi; }; //////////////////////////////// @@ -379,7 +379,7 @@ internal void dbgi_ensure_tctx_inited(void); internal U64 dbgi_hash_from_string(String8 string); internal U64 dbgi_fuzzy_item_num_from_array_element_idx__linear_search(DBGI_FuzzySearchItemArray *array, U64 element_idx); -internal String8 dbgi_fuzzy_item_string_from_rdbg_target_element_idx(RDI_Parsed *rdbg, DBGI_FuzzySearchTarget target, U64 element_idx); +internal String8 dbgi_fuzzy_item_string_from_rdi_target_element_idx(RDI_Parsed *rdi, DBGI_FuzzySearchTarget target, U64 element_idx); //////////////////////////////// //~ rjf: Forced Override Cache Functions diff --git a/src/df/core/df_core.c b/src/df/core/df_core.c index 24f23489..664516fd 100644 --- a/src/df/core/df_core.c +++ b/src/df/core/df_core.c @@ -1085,10 +1085,10 @@ df_cmd_params_apply_spec_query(Arena *arena, DF_CtrlCtx *ctrl_ctx, DF_CmdParams DF_Eval eval = df_eval_from_string(scratch.arena, scope, ctrl_ctx, &parse_ctx, &eval_string2expr_map_nil, query); if(eval.errors.count == 0) { - TG_Kind eval_type_kind = tg_kind_from_key(tg_unwrapped_from_graph_rdi_key(parse_ctx.type_graph, parse_ctx.rdbg, eval.type_key)); + TG_Kind eval_type_kind = tg_kind_from_key(tg_unwrapped_from_graph_rdi_key(parse_ctx.type_graph, parse_ctx.rdi, eval.type_key)); if(eval_type_kind == TG_Kind_Ptr || eval_type_kind == TG_Kind_LRef || eval_type_kind == TG_Kind_RRef) { - eval = df_value_mode_eval_from_eval(parse_ctx.type_graph, parse_ctx.rdbg, ctrl_ctx, eval); + eval = df_value_mode_eval_from_eval(parse_ctx.type_graph, parse_ctx.rdi, ctrl_ctx, eval); prefer_imm = 1; } U64 u64 = !prefer_imm && eval.offset ? eval.offset : eval.imm_u64; @@ -3196,23 +3196,23 @@ df_symbol_name_from_binary_voff(Arena *arena, DF_Entity *binary, U64 voff) DBGI_Scope *scope = dbgi_scope_open(); String8 path = df_full_path_from_entity(scratch.arena, binary); DBGI_Parse *dbgi = dbgi_parse_from_exe_path(scope, path, 0); - RDI_Parsed *rdbg = &dbgi->rdbg; - if(result.size == 0 && rdbg->scope_vmap != 0) + RDI_Parsed *rdi = &dbgi->rdi; + if(result.size == 0 && rdi->scope_vmap != 0) { - U64 scope_idx = rdi_vmap_idx_from_voff(rdbg->scope_vmap, rdbg->scope_vmap_count, voff); - RDI_Scope *scope = &rdbg->scopes[scope_idx]; + U64 scope_idx = rdi_vmap_idx_from_voff(rdi->scope_vmap, rdi->scope_vmap_count, voff); + RDI_Scope *scope = &rdi->scopes[scope_idx]; U64 proc_idx = scope->proc_idx; - RDI_Procedure *procedure = &rdbg->procedures[proc_idx]; + RDI_Procedure *procedure = &rdi->procedures[proc_idx]; U64 name_size = 0; - U8 *name_ptr = rdi_string_from_idx(rdbg, procedure->name_string_idx, &name_size); + U8 *name_ptr = rdi_string_from_idx(rdi, procedure->name_string_idx, &name_size); result = push_str8_copy(arena, str8(name_ptr, name_size)); } - if(result.size == 0 && rdbg->global_vmap != 0) + if(result.size == 0 && rdi->global_vmap != 0) { - U64 global_idx = rdi_vmap_idx_from_voff(rdbg->global_vmap, rdbg->global_vmap_count, voff); - RDI_GlobalVariable *global_var = &rdbg->global_variables[global_idx]; + U64 global_idx = rdi_vmap_idx_from_voff(rdi->global_vmap, rdi->global_vmap_count, voff); + RDI_GlobalVariable *global_var = &rdi->global_variables[global_idx]; U64 name_size = 0; - U8 *name_ptr = rdi_string_from_idx(rdbg, global_var->name_string_idx, &name_size); + U8 *name_ptr = rdi_string_from_idx(rdi, global_var->name_string_idx, &name_size); result = push_str8_copy(arena, str8(name_ptr, name_size)); } dbgi_scope_close(scope); @@ -3259,27 +3259,27 @@ df_text_line_src2dasm_info_list_array_from_src_line_range(Arena *arena, DF_Entit binary_n != 0; binary_n = binary_n->next) { - // rjf: binary -> rdbg + // rjf: binary -> rdi DF_Entity *binary = binary_n->entity; String8 binary_path = df_full_path_from_entity(scratch.arena, binary); DBGI_Parse *dbgi = dbgi_parse_from_exe_path(scope, binary_path, 0); - RDI_Parsed *rdbg = &dbgi->rdbg; + RDI_Parsed *rdi = &dbgi->rdi; - // rjf: file_path_normalized * rdbg -> src_id + // rjf: file_path_normalized * rdi -> src_id B32 good_src_id = 0; U32 src_id = 0; if(dbgi != &dbgi_parse_nil) { - RDI_NameMap *mapptr = rdi_name_map_from_kind(rdbg, RDI_NameMapKind_NormalSourcePaths); + RDI_NameMap *mapptr = rdi_name_map_from_kind(rdi, RDI_NameMapKind_NormalSourcePaths); if(mapptr != 0) { RDI_ParsedNameMap map = {0}; - rdi_name_map_parse(rdbg, mapptr, &map); - RDI_NameMapNode *node = rdi_name_map_lookup(rdbg, &map, file_path_normalized.str, file_path_normalized.size); + rdi_name_map_parse(rdi, mapptr, &map); + RDI_NameMapNode *node = rdi_name_map_lookup(rdi, &map, file_path_normalized.str, file_path_normalized.size); if(node != 0) { U32 id_count = 0; - U32 *ids = rdi_matches_from_map_node(rdbg, node, &id_count); + U32 *ids = rdi_matches_from_map_node(rdi, node, &id_count); if(id_count > 0) { good_src_id = 1; @@ -3292,9 +3292,9 @@ df_text_line_src2dasm_info_list_array_from_src_line_range(Arena *arena, DF_Entit // rjf: good src-id -> look up line info for visible range if(good_src_id) { - RDI_SourceFile *src = rdbg->source_files+src_id; + RDI_SourceFile *src = rdi->source_files+src_id; RDI_ParsedLineMap line_map = {0}; - rdi_line_map_from_source_file(rdbg, src, &line_map); + rdi_line_map_from_source_file(rdi, src, &line_map); U64 line_idx = 0; for(S64 line_num = line_num_range.min; line_num <= line_num_range.max; @@ -3306,10 +3306,10 @@ df_text_line_src2dasm_info_list_array_from_src_line_range(Arena *arena, DF_Entit for(U64 idx = 0; idx < voff_count; idx += 1) { U64 base_voff = voffs[idx]; - U64 unit_idx = rdi_vmap_idx_from_voff(rdbg->unit_vmap, rdbg->unit_vmap_count, base_voff); - RDI_Unit *unit = &rdbg->units[unit_idx]; + U64 unit_idx = rdi_vmap_idx_from_voff(rdi->unit_vmap, rdi->unit_vmap_count, base_voff); + RDI_Unit *unit = &rdi->units[unit_idx]; RDI_ParsedLineInfo unit_line_info = {0}; - rdi_line_info_from_unit(rdbg, unit, &unit_line_info); + rdi_line_info_from_unit(rdi, unit, &unit_line_info); U64 line_info_idx = rdi_line_info_idx_from_voff(&unit_line_info, base_voff); if(unit_line_info.voffs != 0) { @@ -3347,23 +3347,23 @@ df_text_line_dasm2src_info_from_binary_voff(DF_Entity *binary, U64 voff) DBGI_Scope *scope = dbgi_scope_open(); String8 path = df_full_path_from_entity(scratch.arena, binary); DBGI_Parse *dbgi = dbgi_parse_from_exe_path(scope, path, 0); - RDI_Parsed *rdbg = &dbgi->rdbg; + RDI_Parsed *rdi = &dbgi->rdi; DF_TextLineDasm2SrcInfo result = {0}; result.file = result.binary = &df_g_nil_entity; - if(rdbg->unit_vmap != 0 && rdbg->units != 0 && rdbg->source_files != 0) + if(rdi->unit_vmap != 0 && rdi->units != 0 && rdi->source_files != 0) { - U64 unit_idx = rdi_vmap_idx_from_voff(rdbg->unit_vmap, rdbg->unit_vmap_count, voff); - RDI_Unit *unit = &rdbg->units[unit_idx]; + U64 unit_idx = rdi_vmap_idx_from_voff(rdi->unit_vmap, rdi->unit_vmap_count, voff); + RDI_Unit *unit = &rdi->units[unit_idx]; RDI_ParsedLineInfo unit_line_info = {0}; - rdi_line_info_from_unit(rdbg, unit, &unit_line_info); + rdi_line_info_from_unit(rdi, unit, &unit_line_info); U64 line_info_idx = rdi_line_info_idx_from_voff(&unit_line_info, voff); if(line_info_idx < unit_line_info.count) { RDI_Line *line = &unit_line_info.lines[line_info_idx]; RDI_Column *column = (line_info_idx < unit_line_info.col_count) ? &unit_line_info.cols[line_info_idx] : 0; - RDI_SourceFile *file = &rdbg->source_files[line->file_idx]; + RDI_SourceFile *file = &rdi->source_files[line->file_idx]; String8 file_normalized_full_path = {0}; - file_normalized_full_path.str = rdi_string_from_idx(rdbg, file->normal_full_path_string_idx, &file_normalized_full_path.size); + file_normalized_full_path.str = rdi_string_from_idx(rdi, file->normal_full_path_string_idx, &file_normalized_full_path.size); result.binary = binary; if(line->file_idx != 0 && file_normalized_full_path.size != 0) { @@ -3412,7 +3412,7 @@ df_voff_from_binary_symbol_name(DF_Entity *binary, String8 symbol_name) { String8 binary_path = df_full_path_from_entity(scratch.arena, binary); DBGI_Parse *dbgi = dbgi_parse_from_exe_path(scope, binary_path, 0); - RDI_Parsed *rdbg = &dbgi->rdbg; + RDI_Parsed *rdi = &dbgi->rdi; RDI_NameMapKind name_map_kinds[] = { RDI_NameMapKind_GlobalVariables, @@ -3425,10 +3425,10 @@ df_voff_from_binary_symbol_name(DF_Entity *binary, String8 symbol_name) name_map_kind_idx += 1) { RDI_NameMapKind name_map_kind = name_map_kinds[name_map_kind_idx]; - RDI_NameMap *name_map = rdi_name_map_from_kind(rdbg, name_map_kind); + RDI_NameMap *name_map = rdi_name_map_from_kind(rdi, name_map_kind); RDI_ParsedNameMap parsed_name_map = {0}; - rdi_name_map_parse(rdbg, name_map, &parsed_name_map); - RDI_NameMapNode *node = rdi_name_map_lookup(rdbg, &parsed_name_map, symbol_name.str, symbol_name.size); + rdi_name_map_parse(rdi, name_map, &parsed_name_map); + RDI_NameMapNode *node = rdi_name_map_lookup(rdi, &parsed_name_map, symbol_name.str, symbol_name.size); // rjf: node -> num U64 entity_num = 0; @@ -3443,7 +3443,7 @@ df_voff_from_binary_symbol_name(DF_Entity *binary, String8 symbol_name) default: { U32 num = 0; - U32 *run = rdi_matches_from_map_node(rdbg, node, &num); + U32 *run = rdi_matches_from_map_node(rdi, node, &num); if(num != 0) { entity_num = run[0]+1; @@ -3459,14 +3459,14 @@ df_voff_from_binary_symbol_name(DF_Entity *binary, String8 symbol_name) default:{}break; case RDI_NameMapKind_GlobalVariables: { - RDI_GlobalVariable *global_var = rdi_element_from_idx(rdbg, global_variables, entity_num-1); + RDI_GlobalVariable *global_var = rdi_element_from_idx(rdi, global_variables, entity_num-1); voff = global_var->voff; }break; case RDI_NameMapKind_Procedures: { - RDI_Procedure *procedure = rdi_element_from_idx(rdbg, procedures, entity_num-1); - RDI_Scope *scope = rdi_element_from_idx(rdbg, scopes, procedure->root_scope_idx); - voff = rdbg->scope_voffs[scope->voff_range_first]; + RDI_Procedure *procedure = rdi_element_from_idx(rdi, procedures, entity_num-1); + RDI_Scope *scope = rdi_element_from_idx(rdi, scopes, procedure->root_scope_idx); + voff = rdi->scope_voffs[scope->voff_range_first]; }break; } @@ -3495,11 +3495,11 @@ df_type_num_from_binary_name(DF_Entity *binary, String8 name) { String8 binary_path = df_full_path_from_entity(scratch.arena, binary); DBGI_Parse *dbgi = dbgi_parse_from_exe_path(scope, binary_path, 0); - RDI_Parsed *rdbg = &dbgi->rdbg; - RDI_NameMap *name_map = rdi_name_map_from_kind(rdbg, RDI_NameMapKind_Types); + RDI_Parsed *rdi = &dbgi->rdi; + RDI_NameMap *name_map = rdi_name_map_from_kind(rdi, RDI_NameMapKind_Types); RDI_ParsedNameMap parsed_name_map = {0}; - rdi_name_map_parse(rdbg, name_map, &parsed_name_map); - RDI_NameMapNode *node = rdi_name_map_lookup(rdbg, &parsed_name_map, name.str, name.size); + rdi_name_map_parse(rdi, name_map, &parsed_name_map); + RDI_NameMapNode *node = rdi_name_map_lookup(rdi, &parsed_name_map, name.str, name.size); U64 entity_num = 0; if(node != 0) { @@ -3512,7 +3512,7 @@ df_type_num_from_binary_name(DF_Entity *binary, String8 name) default: { U32 num = 0; - U32 *run = rdi_matches_from_map_node(rdbg, node, &num); + U32 *run = rdi_matches_from_map_node(rdi, node, &num); if(num != 0) { entity_num = run[0]+1; @@ -3697,8 +3697,8 @@ df_push_locals_map_from_binary_voff(Arena *arena, DBGI_Scope *scope, DF_Entity * Temp scratch = scratch_begin(&arena, 1); String8 binary_path = df_full_path_from_entity(scratch.arena, binary); DBGI_Parse *dbgi = dbgi_parse_from_exe_path(scope, binary_path, 0); - RDI_Parsed *rdbg = &dbgi->rdbg; - EVAL_String2NumMap *result = eval_push_locals_map_from_rdi_voff(arena, rdbg, voff); + RDI_Parsed *rdi = &dbgi->rdi; + EVAL_String2NumMap *result = eval_push_locals_map_from_rdi_voff(arena, rdi, voff); scratch_end(scratch); return result; } @@ -3709,8 +3709,8 @@ df_push_member_map_from_binary_voff(Arena *arena, DBGI_Scope *scope, DF_Entity * Temp scratch = scratch_begin(&arena, 1); String8 binary_path = df_full_path_from_entity(scratch.arena, binary); DBGI_Parse *dbgi = dbgi_parse_from_exe_path(scope, binary_path, 0); - RDI_Parsed *rdbg = &dbgi->rdbg; - EVAL_String2NumMap *result = eval_push_member_map_from_rdi_voff(arena, rdbg, voff); + RDI_Parsed *rdi = &dbgi->rdi; + EVAL_String2NumMap *result = eval_push_member_map_from_rdi_voff(arena, rdi, voff); scratch_end(scratch); return result; } @@ -3987,7 +3987,7 @@ df_eval_parse_ctx_from_process_vaddr(DBGI_Scope *scope, DF_Entity *process, U64 DF_Entity *binary = df_binary_file_from_module(module); String8 binary_path = df_full_path_from_entity(scratch.arena, binary); DBGI_Parse *dbgi = dbgi_parse_from_exe_path(scope, binary_path, 0); - RDI_Parsed *rdbg = &dbgi->rdbg; + RDI_Parsed *rdi = &dbgi->rdi; Architecture arch = df_architecture_from_entity(process); EVAL_String2NumMap *reg_map = ctrl_string2reg_from_arch(arch); EVAL_String2NumMap *reg_alias_map = ctrl_string2alias_from_arch(arch); @@ -3999,7 +3999,7 @@ df_eval_parse_ctx_from_process_vaddr(DBGI_Scope *scope, DF_Entity *process, U64 { ctx.arch = arch; ctx.ip_voff = voff; - ctx.rdbg = rdbg; + ctx.rdi = rdi; ctx.type_graph = tg_graph_begin(bit_size_from_arch(arch)/8, 256); ctx.regs_map = reg_map; ctx.reg_alias_map = reg_alias_map; @@ -4031,26 +4031,26 @@ df_eval_parse_ctx_from_src_loc(DBGI_Scope *scope, DF_Entity *file, TxtPt pt) binary_n != 0; binary_n = binary_n->next) { - // rjf: binary -> rdbg + // rjf: binary -> rdi DF_Entity *binary = binary_n->entity; String8 binary_path = df_full_path_from_entity(scratch.arena, binary); DBGI_Parse *dbgi = dbgi_parse_from_exe_path(scope, binary_path, 0); - RDI_Parsed *rdbg = &dbgi->rdbg; + RDI_Parsed *rdi = &dbgi->rdi; - // rjf: file_path_normalized * rdbg -> src_id + // rjf: file_path_normalized * rdi -> src_id B32 good_src_id = 0; U32 src_id = 0; { - RDI_NameMap *mapptr = rdi_name_map_from_kind(rdbg, RDI_NameMapKind_NormalSourcePaths); + RDI_NameMap *mapptr = rdi_name_map_from_kind(rdi, RDI_NameMapKind_NormalSourcePaths); if(mapptr != 0) { RDI_ParsedNameMap map = {0}; - rdi_name_map_parse(rdbg, mapptr, &map); - RDI_NameMapNode *node = rdi_name_map_lookup(rdbg, &map, file_path_normalized.str, file_path_normalized.size); + rdi_name_map_parse(rdi, mapptr, &map); + RDI_NameMapNode *node = rdi_name_map_lookup(rdi, &map, file_path_normalized.str, file_path_normalized.size); if(node != 0) { U32 id_count = 0; - U32 *ids = rdi_matches_from_map_node(rdbg, node, &id_count); + U32 *ids = rdi_matches_from_map_node(rdi, node, &id_count); if(id_count > 0) { good_src_id = 1; @@ -4063,18 +4063,18 @@ df_eval_parse_ctx_from_src_loc(DBGI_Scope *scope, DF_Entity *file, TxtPt pt) // rjf: good src-id -> look up line info for visible range if(good_src_id) { - RDI_SourceFile *src = rdbg->source_files+src_id; + RDI_SourceFile *src = rdi->source_files+src_id; RDI_ParsedLineMap line_map = {0}; - rdi_line_map_from_source_file(rdbg, src, &line_map); + rdi_line_map_from_source_file(rdi, src, &line_map); U32 voff_count = 0; U64 *voffs = rdi_line_voffs_from_num(&line_map, (U32)pt.line, &voff_count); for(U64 idx = 0; idx < voff_count; idx += 1) { U64 base_voff = voffs[idx]; - U64 unit_idx = rdi_vmap_idx_from_voff(rdbg->unit_vmap, rdbg->unit_vmap_count, base_voff); - RDI_Unit *unit = &rdbg->units[unit_idx]; + U64 unit_idx = rdi_vmap_idx_from_voff(rdi->unit_vmap, rdi->unit_vmap_count, base_voff); + RDI_Unit *unit = &rdi->units[unit_idx]; RDI_ParsedLineInfo unit_line_info = {0}; - rdi_line_info_from_unit(rdbg, unit, &unit_line_info); + rdi_line_info_from_unit(rdi, unit, &unit_line_info); U64 line_info_idx = rdi_line_info_idx_from_voff(&unit_line_info, base_voff); Rng1U64 range = r1u64(base_voff, unit_line_info.voffs[line_info_idx+1]); S64 actual_line = (S64)unit_line_info.lines[line_info_idx].line_num; @@ -4113,7 +4113,7 @@ df_eval_parse_ctx_from_src_loc(DBGI_Scope *scope, DF_Entity *file, TxtPt pt) //- rjf: bad ctx -> reset with graceful defaults if(good_ctx == 0) { - ctx.rdbg = &dbgi_parse_nil.rdbg; + ctx.rdi = &dbgi_parse_nil.rdi; ctx.type_graph = tg_graph_begin(8, 256); ctx.regs_map = &eval_string2num_map_nil; ctx.regs_map = &eval_string2num_map_nil; @@ -4179,7 +4179,7 @@ df_eval_from_string(Arena *arena, DBGI_Scope *scope, DF_CtrlCtx *ctrl_ctx, EVAL_ EVAL_IRTreeAndType ir_tree_and_type = {&eval_irtree_nil}; if(parse_has_expr && errors.count == 0) { - ir_tree_and_type = eval_irtree_and_type_from_expr(arena, parse_ctx->type_graph, parse_ctx->rdbg, macro_map, parse.expr, &errors); + ir_tree_and_type = eval_irtree_and_type_from_expr(arena, parse_ctx->type_graph, parse_ctx->rdi, macro_map, parse.expr, &errors); } //- rjf: get list of ops @@ -4237,7 +4237,7 @@ df_eval_from_string(Arena *arena, DBGI_Scope *scope, DF_CtrlCtx *ctrl_ctx, EVAL_ //- rjf: apply dynamic type overrides if(parse.expr != 0 && parse.expr->kind != EVAL_ExprKind_Cast) { - result = df_dynamically_typed_eval_from_eval(parse_ctx->type_graph, parse_ctx->rdbg, ctrl_ctx, result); + result = df_dynamically_typed_eval_from_eval(parse_ctx->type_graph, parse_ctx->rdi, ctrl_ctx, result); } scratch_end(scratch); @@ -4246,7 +4246,7 @@ df_eval_from_string(Arena *arena, DBGI_Scope *scope, DF_CtrlCtx *ctrl_ctx, EVAL_ } internal DF_Eval -df_value_mode_eval_from_eval(TG_Graph *graph, RDI_Parsed *rdbg, DF_CtrlCtx *ctrl_ctx, DF_Eval eval) +df_value_mode_eval_from_eval(TG_Graph *graph, RDI_Parsed *rdi, DF_CtrlCtx *ctrl_ctx, DF_Eval eval) { ProfBeginFunction(); DF_Entity *thread = df_entity_from_handle(ctrl_ctx->thread); @@ -4262,7 +4262,7 @@ df_value_mode_eval_from_eval(TG_Graph *graph, RDI_Parsed *rdbg, DF_CtrlCtx *ctrl { TG_Key type_key = eval.type_key; TG_Kind type_kind = tg_kind_from_key(type_key); - U64 type_byte_size = tg_byte_size_from_graph_rdi_key(graph, rdbg, type_key); + U64 type_byte_size = tg_byte_size_from_graph_rdi_key(graph, rdi, type_key); if(!tg_key_match(type_key, tg_key_zero()) && type_byte_size <= 8) { Temp scratch = scratch_begin(0, 0); @@ -4292,7 +4292,7 @@ df_value_mode_eval_from_eval(TG_Graph *graph, RDI_Parsed *rdbg, DF_CtrlCtx *ctrl case EVAL_EvalMode_Reg: { TG_Key type_key = eval.type_key; - U64 type_byte_size = tg_byte_size_from_graph_rdi_key(graph, rdbg, type_key); + U64 type_byte_size = tg_byte_size_from_graph_rdi_key(graph, rdi, type_key); U64 reg_off = eval.offset; CTRL_Unwind unwind = df_query_cached_unwind_from_thread(thread); if(unwind.first != 0) @@ -4316,7 +4316,7 @@ df_value_mode_eval_from_eval(TG_Graph *graph, RDI_Parsed *rdbg, DF_CtrlCtx *ctrl } internal DF_Eval -df_dynamically_typed_eval_from_eval(TG_Graph *graph, RDI_Parsed *rdbg, DF_CtrlCtx *ctrl_ctx, DF_Eval eval) +df_dynamically_typed_eval_from_eval(TG_Graph *graph, RDI_Parsed *rdi, DF_CtrlCtx *ctrl_ctx, DF_Eval eval) { ProfBeginFunction(); Temp scratch = scratch_begin(0, 0); @@ -4330,11 +4330,11 @@ df_dynamically_typed_eval_from_eval(TG_Graph *graph, RDI_Parsed *rdbg, DF_CtrlCt TG_Kind type_kind = tg_kind_from_key(type_key); if(type_kind == TG_Kind_Ptr) { - TG_Key ptee_type_key = tg_unwrapped_direct_from_graph_rdi_key(graph, rdbg, type_key); + TG_Key ptee_type_key = tg_unwrapped_direct_from_graph_rdi_key(graph, rdi, type_key); TG_Kind ptee_type_kind = tg_kind_from_key(ptee_type_key); if(ptee_type_kind == TG_Kind_Struct || ptee_type_kind == TG_Kind_Class) { - TG_Type *ptee_type = tg_type_from_graph_rdi_key(scratch.arena, graph, rdbg, ptee_type_key); + TG_Type *ptee_type = tg_type_from_graph_rdi_key(scratch.arena, graph, rdi, ptee_type_key); B32 has_vtable = 0; for(U64 idx = 0; idx < ptee_type->count; idx += 1) { @@ -4363,12 +4363,12 @@ df_dynamically_typed_eval_from_eval(TG_Graph *graph, RDI_Parsed *rdbg, DF_CtrlCt U64 vtable_vaddr = 0; MemoryCopy(&vtable_vaddr, vtable_base_ptr_memory.str, addr_size); U64 vtable_voff = df_voff_from_vaddr(module, vtable_vaddr); - U64 global_idx = rdi_vmap_idx_from_voff(rdbg->global_vmap, rdbg->global_vmap_count, vtable_voff); - RDI_GlobalVariable *global_var = rdi_element_from_idx(rdbg, global_variables, global_idx); + U64 global_idx = rdi_vmap_idx_from_voff(rdi->global_vmap, rdi->global_vmap_count, vtable_voff); + RDI_GlobalVariable *global_var = rdi_element_from_idx(rdi, global_variables, global_idx); if(global_var->link_flags & RDI_LinkFlag_TypeScoped) { - RDI_UDT *udt = rdi_element_from_idx(rdbg, udts, global_var->container_idx); - RDI_TypeNode *type = rdi_element_from_idx(rdbg, type_nodes, udt->self_type_idx); + RDI_UDT *udt = rdi_element_from_idx(rdi, udts, global_var->container_idx); + RDI_TypeNode *type = rdi_element_from_idx(rdi, type_nodes, udt->self_type_idx); TG_Key derived_type_key = tg_key_ext(tg_kind_from_rdi_type_kind(type->kind), (U64)udt->self_type_idx); TG_Key ptr_to_derived_type_key = tg_cons_type_make(graph, TG_Kind_Ptr, derived_type_key, 0); eval.type_key = ptr_to_derived_type_key; @@ -4579,13 +4579,13 @@ df_string_from_ascii_value(Arena *arena, U8 val) } internal String8 -df_string_from_simple_typed_eval(Arena *arena, TG_Graph *graph, RDI_Parsed *rdbg, DF_EvalVizStringFlags flags, U32 radix, DF_Eval eval) +df_string_from_simple_typed_eval(Arena *arena, TG_Graph *graph, RDI_Parsed *rdi, DF_EvalVizStringFlags flags, U32 radix, DF_Eval eval) { ProfBeginFunction(); String8 result = {0}; - TG_Key type_key = tg_unwrapped_from_graph_rdi_key(graph, rdbg, eval.type_key); + TG_Key type_key = tg_unwrapped_from_graph_rdi_key(graph, rdi, eval.type_key); TG_Kind type_kind = tg_kind_from_key(type_key); - U64 type_byte_size = tg_byte_size_from_graph_rdi_key(graph, rdbg, type_key); + U64 type_byte_size = tg_byte_size_from_graph_rdi_key(graph, rdi, type_key); U8 digit_group_separator = 0; if(!(flags & DF_EvalVizStringFlag_ReadOnlyDisplayRules)) { @@ -4653,7 +4653,7 @@ df_string_from_simple_typed_eval(Arena *arena, TG_Graph *graph, RDI_Parsed *rdbg case TG_Kind_Enum: { Temp scratch = scratch_begin(&arena, 1); - TG_Type *type = tg_type_from_graph_rdi_key(scratch.arena, graph, rdbg, type_key); + TG_Type *type = tg_type_from_graph_rdi_key(scratch.arena, graph, rdi, type_key); String8 constant_name = {0}; for(U64 val_idx = 0; val_idx < type->count; val_idx += 1) { @@ -4693,7 +4693,7 @@ df_string_from_simple_typed_eval(Arena *arena, TG_Graph *graph, RDI_Parsed *rdbg //- rjf: writing values back to child processes internal B32 -df_commit_eval_value(TG_Graph *graph, RDI_Parsed *rdbg, DF_CtrlCtx *ctrl_ctx, DF_Eval dst_eval, DF_Eval src_eval) +df_commit_eval_value(TG_Graph *graph, RDI_Parsed *rdi, DF_CtrlCtx *ctrl_ctx, DF_Eval dst_eval, DF_Eval src_eval) { B32 result = 0; Temp scratch = scratch_begin(0, 0); @@ -4705,8 +4705,8 @@ df_commit_eval_value(TG_Graph *graph, RDI_Parsed *rdbg, DF_CtrlCtx *ctrl_ctx, DF TG_Key src_type_key = src_eval.type_key; TG_Kind dst_type_kind = tg_kind_from_key(dst_type_key); TG_Kind src_type_kind = tg_kind_from_key(src_type_key); - U64 dst_type_byte_size = tg_byte_size_from_graph_rdi_key(graph, rdbg, dst_type_key); - U64 src_type_byte_size = tg_byte_size_from_graph_rdi_key(graph, rdbg, src_type_key); + U64 dst_type_byte_size = tg_byte_size_from_graph_rdi_key(graph, rdi, dst_type_key); + U64 src_type_byte_size = tg_byte_size_from_graph_rdi_key(graph, rdi, src_type_key); //- rjf: get commit data based on destination type String8 commit_data = {0}; @@ -4726,7 +4726,7 @@ df_commit_eval_value(TG_Graph *graph, RDI_Parsed *rdbg, DF_CtrlCtx *ctrl_ctx, DF case TG_Kind_LRef: if((TG_Kind_Char8 <= src_type_kind && src_type_kind <= TG_Kind_Bool) || src_type_kind == TG_Kind_Ptr) { - DF_Eval value_eval = df_value_mode_eval_from_eval(graph, rdbg, ctrl_ctx, src_eval); + DF_Eval value_eval = df_value_mode_eval_from_eval(graph, rdi, ctrl_ctx, src_eval); commit_data = str8((U8 *)&value_eval.imm_u64, dst_type_byte_size); commit_data = push_str8_copy(scratch.arena, commit_data); }break; @@ -4749,7 +4749,7 @@ df_commit_eval_value(TG_Graph *graph, RDI_Parsed *rdbg, DF_CtrlCtx *ctrl_ctx, DF case TG_Kind_Bool: if(TG_Kind_Char8 <= src_type_kind && src_type_kind <= TG_Kind_Bool) { - DF_Eval value_eval = df_value_mode_eval_from_eval(graph, rdbg, ctrl_ctx, src_eval); + DF_Eval value_eval = df_value_mode_eval_from_eval(graph, rdi, ctrl_ctx, src_eval); commit_data = str8((U8 *)&value_eval.imm_u64, dst_type_byte_size); commit_data = push_str8_copy(scratch.arena, commit_data); }break; @@ -4761,7 +4761,7 @@ df_commit_eval_value(TG_Graph *graph, RDI_Parsed *rdbg, DF_CtrlCtx *ctrl_ctx, DF src_type_kind == TG_Kind_F64) { F32 value = 0; - DF_Eval value_eval = df_value_mode_eval_from_eval(graph, rdbg, ctrl_ctx, src_eval); + DF_Eval value_eval = df_value_mode_eval_from_eval(graph, rdi, ctrl_ctx, src_eval); switch(src_type_kind) { case TG_Kind_F32:{value = value_eval.imm_f32;}break; @@ -4779,7 +4779,7 @@ df_commit_eval_value(TG_Graph *graph, RDI_Parsed *rdbg, DF_CtrlCtx *ctrl_ctx, DF src_type_kind == TG_Kind_F64) { F64 value = 0; - DF_Eval value_eval = df_value_mode_eval_from_eval(graph, rdbg, ctrl_ctx, src_eval); + DF_Eval value_eval = df_value_mode_eval_from_eval(graph, rdi, ctrl_ctx, src_eval); switch(src_type_kind) { case TG_Kind_F32:{value = (F64)value_eval.imm_f32;}break; @@ -4794,7 +4794,7 @@ df_commit_eval_value(TG_Graph *graph, RDI_Parsed *rdbg, DF_CtrlCtx *ctrl_ctx, DF case TG_Kind_Enum: if(TG_Kind_Char8 <= src_type_kind && src_type_kind <= TG_Kind_Bool) { - DF_Eval value_eval = df_value_mode_eval_from_eval(graph, rdbg, ctrl_ctx, src_eval); + DF_Eval value_eval = df_value_mode_eval_from_eval(graph, rdi, ctrl_ctx, src_eval); commit_data = str8((U8 *)&value_eval.imm_u64, dst_type_byte_size); commit_data = push_str8_copy(scratch.arena, commit_data); }break; @@ -4914,7 +4914,7 @@ df_filtered_data_members_from_members_cfg_table(Arena *arena, TG_MemberArray mem } internal DF_EvalLinkBaseChunkList -df_eval_link_base_chunk_list_from_eval(Arena *arena, TG_Graph *graph, RDI_Parsed *rdbg, TG_Key link_member_type_key, U64 link_member_off, DF_CtrlCtx *ctrl_ctx, DF_Eval eval, U64 cap) +df_eval_link_base_chunk_list_from_eval(Arena *arena, TG_Graph *graph, RDI_Parsed *rdi, TG_Key link_member_type_key, U64 link_member_off, DF_CtrlCtx *ctrl_ctx, DF_Eval eval, U64 cap) { DF_EvalLinkBaseChunkList list = {0}; for(DF_Eval base_eval = eval, last_eval = zero_struct; list.count < cap;) @@ -4948,7 +4948,7 @@ df_eval_link_base_chunk_list_from_eval(Arena *arena, TG_Graph *graph, RDI_Parsed base_eval.mode, base_eval.offset + link_member_off, }; - DF_Eval link_member_value_eval = df_value_mode_eval_from_eval(graph, rdbg, ctrl_ctx, link_member_eval); + DF_Eval link_member_value_eval = df_value_mode_eval_from_eval(graph, rdi, ctrl_ctx, link_member_eval); // rjf: advance to next link last_eval = base_eval; @@ -5047,13 +5047,13 @@ df_append_viz_blocks_for_parent__rec(Arena *arena, DBGI_Scope *scope, DF_EvalVie ////////////////////////////// //- rjf: apply view rules & resolve eval // - eval = df_dynamically_typed_eval_from_eval(parse_ctx->type_graph, parse_ctx->rdbg, ctrl_ctx, eval); + eval = df_dynamically_typed_eval_from_eval(parse_ctx->type_graph, parse_ctx->rdi, ctrl_ctx, eval); eval = df_eval_from_eval_cfg_table(arena, scope, ctrl_ctx, parse_ctx, macro_map, eval, cfg_table); ////////////////////////////// //- rjf: unpack eval // - TG_Key eval_type_key = tg_unwrapped_from_graph_rdi_key(parse_ctx->type_graph, parse_ctx->rdbg, eval.type_key); + TG_Key eval_type_key = tg_unwrapped_from_graph_rdi_key(parse_ctx->type_graph, parse_ctx->rdi, eval.type_key); TG_Kind eval_type_kind = tg_kind_from_key(eval_type_key); ////////////////////////////// @@ -5084,9 +5084,9 @@ df_append_viz_blocks_for_parent__rec(Arena *arena, DBGI_Scope *scope, DF_EvalVie TG_Kind ptr_type_kind = TG_Kind_Null; if(eval_type_kind == TG_Kind_Ptr || eval_type_kind == TG_Kind_LRef || eval_type_kind == TG_Kind_RRef) { - TG_Key direct_type_key = tg_ptee_from_graph_rdi_key(parse_ctx->type_graph, parse_ctx->rdbg, eval_type_key); + TG_Key direct_type_key = tg_ptee_from_graph_rdi_key(parse_ctx->type_graph, parse_ctx->rdi, eval_type_key); TG_Kind direct_type_kind = tg_kind_from_key(direct_type_key); - DF_Eval ptr_val_eval = df_value_mode_eval_from_eval(parse_ctx->type_graph, parse_ctx->rdbg, ctrl_ctx, eval); + DF_Eval ptr_val_eval = df_value_mode_eval_from_eval(parse_ctx->type_graph, parse_ctx->rdi, ctrl_ctx, eval); // rjf: ptrs to udts if(parent_is_expanded && @@ -5199,7 +5199,7 @@ df_append_viz_blocks_for_parent__rec(Arena *arena, DBGI_Scope *scope, DF_EvalVie ProfScope("build viz blocks for UDT members") { //- rjf: type -> filtered data members - TG_MemberArray data_members = tg_data_members_from_graph_rdi_key(scratch.arena, parse_ctx->type_graph, parse_ctx->rdbg, udt_eval.type_key); + TG_MemberArray data_members = tg_data_members_from_graph_rdi_key(scratch.arena, parse_ctx->type_graph, parse_ctx->rdi, udt_eval.type_key); TG_MemberArray filtered_data_members = df_filtered_data_members_from_members_cfg_table(scratch.arena, data_members, cfg_table); //- rjf: build blocks for all members, split by sub-expansions @@ -5255,7 +5255,7 @@ df_append_viz_blocks_for_parent__rec(Arena *arena, DBGI_Scope *scope, DF_EvalVie ProfScope("build viz blocks for UDT type-eval enums") { //- rjf: type -> full type info - TG_Type *type = tg_type_from_graph_rdi_key(scratch.arena, parse_ctx->type_graph, parse_ctx->rdbg, udt_eval.type_key); + TG_Type *type = tg_type_from_graph_rdi_key(scratch.arena, parse_ctx->type_graph, parse_ctx->rdi, udt_eval.type_key); //- rjf: build block for all members (cannot be expanded) DF_EvalVizBlock *last_vb = df_eval_viz_block_begin(arena, DF_EvalVizBlockKind_EnumMembers, key, df_expand_key_make(df_hash_from_expand_key(key), 0), depth+1); @@ -5277,7 +5277,7 @@ df_append_viz_blocks_for_parent__rec(Arena *arena, DBGI_Scope *scope, DF_EvalVie ProfScope("(structs, unions, classes) descend to members & make block(s), with linked list view") { //- rjf: type -> data members - TG_MemberArray data_members = tg_data_members_from_graph_rdi_key(scratch.arena, parse_ctx->type_graph, parse_ctx->rdbg, udt_eval.type_key); + TG_MemberArray data_members = tg_data_members_from_graph_rdi_key(scratch.arena, parse_ctx->type_graph, parse_ctx->rdi, udt_eval.type_key); //- rjf: find link member TG_Member *link_member = 0; @@ -5290,7 +5290,7 @@ df_append_viz_blocks_for_parent__rec(Arena *arena, DBGI_Scope *scope, DF_EvalVie { link_member = mem; link_member_type_kind = tg_kind_from_key(link_member->type_key); - link_member_ptee_type_key = tg_ptee_from_graph_rdi_key(parse_ctx->type_graph, parse_ctx->rdbg, link_member->type_key); + link_member_ptee_type_key = tg_ptee_from_graph_rdi_key(parse_ctx->type_graph, parse_ctx->rdi, link_member->type_key); break; } } @@ -5308,7 +5308,7 @@ df_append_viz_blocks_for_parent__rec(Arena *arena, DBGI_Scope *scope, DF_EvalVie DF_EvalLinkBaseChunkList link_bases = {0}; if(link_member_is_good) { - link_bases = df_eval_link_base_chunk_list_from_eval(scratch.arena, parse_ctx->type_graph, parse_ctx->rdbg, link_member->type_key, link_member->off, ctrl_ctx, udt_eval, 512); + link_bases = df_eval_link_base_chunk_list_from_eval(scratch.arena, parse_ctx->type_graph, parse_ctx->rdi, link_member->type_key, link_member->off, ctrl_ctx, udt_eval, 512); } //- rjf: build blocks for all links, split by sub-expansions @@ -5371,10 +5371,10 @@ df_append_viz_blocks_for_parent__rec(Arena *arena, DBGI_Scope *scope, DF_EvalVie ProfScope("(arrays) descend to elements & make block(s)") { //- rjf: unpack array type info - TG_Type *array_type = tg_type_from_graph_rdi_key(scratch.arena, parse_ctx->type_graph, parse_ctx->rdbg, arr_eval.type_key); + TG_Type *array_type = tg_type_from_graph_rdi_key(scratch.arena, parse_ctx->type_graph, parse_ctx->rdi, arr_eval.type_key); U64 array_count = array_type->count; TG_Key element_type_key = array_type->direct_type_key; - U64 element_type_byte_size = tg_byte_size_from_graph_rdi_key(parse_ctx->type_graph, parse_ctx->rdbg, element_type_key); + U64 element_type_byte_size = tg_byte_size_from_graph_rdi_key(parse_ctx->type_graph, parse_ctx->rdi, element_type_key); //- rjf: build blocks for all elements, split by sub-expansions DF_EvalVizBlock *last_vb = df_eval_viz_block_begin(arena, DF_EvalVizBlockKind_Elements, key, df_expand_key_make(df_hash_from_expand_key(key), 0), depth+1); @@ -5612,7 +5612,7 @@ df_eval_viz_row_list_push_new(Arena *arena, EVAL_ParseCtx *parse_ctx, DF_EvalViz // rjf: determine exandability, editability if(tg_kind_from_key(eval.type_key) != TG_Kind_Null) { - for(TG_Key t = eval.type_key;; t = tg_unwrapped_direct_from_graph_rdi_key(parse_ctx->type_graph, parse_ctx->rdbg, t)) + for(TG_Key t = eval.type_key;; t = tg_unwrapped_direct_from_graph_rdi_key(parse_ctx->type_graph, parse_ctx->rdi, t)) { TG_Kind kind = tg_kind_from_key(t); if(kind == TG_Kind_Null) diff --git a/src/df/core/df_core.h b/src/df/core/df_core.h index e2d24277..3c39e548 100644 --- a/src/df/core/df_core.h +++ b/src/df/core/df_core.h @@ -1579,8 +1579,8 @@ internal B32 df_eval_memory_read(void *u, void *out, U64 addr, U64 size); internal EVAL_ParseCtx df_eval_parse_ctx_from_process_vaddr(DBGI_Scope *scope, DF_Entity *process, U64 vaddr); internal EVAL_ParseCtx df_eval_parse_ctx_from_src_loc(DBGI_Scope *scope, DF_Entity *file, TxtPt pt); internal DF_Eval df_eval_from_string(Arena *arena, DBGI_Scope *scope, DF_CtrlCtx *ctrl_ctx, EVAL_ParseCtx *parse_ctx, EVAL_String2ExprMap *macro_map, String8 string); -internal DF_Eval df_value_mode_eval_from_eval(TG_Graph *graph, RDI_Parsed *rdbg, DF_CtrlCtx *ctrl_ctx, DF_Eval eval); -internal DF_Eval df_dynamically_typed_eval_from_eval(TG_Graph *graph, RDI_Parsed *rdbg, DF_CtrlCtx *ctrl_ctx, DF_Eval eval); +internal DF_Eval df_value_mode_eval_from_eval(TG_Graph *graph, RDI_Parsed *rdi, DF_CtrlCtx *ctrl_ctx, DF_Eval eval); +internal DF_Eval df_dynamically_typed_eval_from_eval(TG_Graph *graph, RDI_Parsed *rdi, DF_CtrlCtx *ctrl_ctx, DF_Eval eval); internal DF_Eval df_eval_from_eval_cfg_table(Arena *arena, DBGI_Scope *scope, DF_CtrlCtx *ctrl_ctx, EVAL_ParseCtx *parse_ctx, EVAL_String2ExprMap *macro_map, DF_Eval eval, DF_CfgTable *cfg); //////////////////////////////// @@ -1604,14 +1604,14 @@ internal String8 df_eval_view_rule_from_key(DF_EvalView *eval_view, DF_ExpandKey //- rjf: evaluation value string builder helpers internal String8 df_string_from_ascii_value(Arena *arena, U8 val); -internal String8 df_string_from_simple_typed_eval(Arena *arena, TG_Graph *graph, RDI_Parsed *rdbg, DF_EvalVizStringFlags flags, U32 radix, DF_Eval eval); +internal String8 df_string_from_simple_typed_eval(Arena *arena, TG_Graph *graph, RDI_Parsed *rdi, DF_EvalVizStringFlags flags, U32 radix, DF_Eval eval); //- rjf: writing values back to child processes -internal B32 df_commit_eval_value(TG_Graph *graph, RDI_Parsed *rdbg, DF_CtrlCtx *ctrl_ctx, DF_Eval dst_eval, DF_Eval src_eval); +internal B32 df_commit_eval_value(TG_Graph *graph, RDI_Parsed *rdi, DF_CtrlCtx *ctrl_ctx, DF_Eval dst_eval, DF_Eval src_eval); //- rjf: type helpers internal TG_MemberArray df_filtered_data_members_from_members_cfg_table(Arena *arena, TG_MemberArray members, DF_CfgTable *cfg); -internal DF_EvalLinkBaseChunkList df_eval_link_base_chunk_list_from_eval(Arena *arena, TG_Graph *graph, RDI_Parsed *rdbg, TG_Key link_member_type_key, U64 link_member_off, DF_CtrlCtx *ctrl_ctx, DF_Eval eval, U64 cap); +internal DF_EvalLinkBaseChunkList df_eval_link_base_chunk_list_from_eval(Arena *arena, TG_Graph *graph, RDI_Parsed *rdi, TG_Key link_member_type_key, U64 link_member_off, DF_CtrlCtx *ctrl_ctx, DF_Eval eval, U64 cap); internal DF_EvalLinkBase df_eval_link_base_from_chunk_list_index(DF_EvalLinkBaseChunkList *list, U64 idx); internal DF_EvalLinkBaseArray df_eval_link_base_array_from_chunk_list(Arena *arena, DF_EvalLinkBaseChunkList *chunks); diff --git a/src/df/gfx/df_gfx.c b/src/df/gfx/df_gfx.c index 7c3d640d..4123f686 100644 --- a/src/df/gfx/df_gfx.c +++ b/src/df/gfx/df_gfx.c @@ -5232,7 +5232,7 @@ df_window_update_and_render(Arena *arena, OS_EventList *events, DF_Window *ws, D default:{}break; case EVAL_EvalMode_Addr: { - U64 size = tg_byte_size_from_graph_rdi_key(parse_ctx.type_graph, parse_ctx.rdbg, row->eval.type_key); + U64 size = tg_byte_size_from_graph_rdi_key(parse_ctx.type_graph, parse_ctx.rdi, row->eval.type_key); size = Min(size, 64); Rng1U64 vaddr_rng = r1u64(row->eval.offset, row->eval.offset+size); CTRL_ProcessMemorySlice slice = ctrl_query_cached_data_from_process_vaddr_range(scratch.arena, process->ctrl_machine_id, process->ctrl_handle, vaddr_rng, 0); @@ -5289,7 +5289,7 @@ df_window_update_and_render(Arena *arena, OS_EventList *events, DF_Window *ws, D { String8 commit_string = str8(ws->hover_eval_txt_buffer, ws->hover_eval_txt_size); DF_Eval write_eval = df_eval_from_string(scratch.arena, scope, &ctrl_ctx, &parse_ctx, &eval_string2expr_map_nil, commit_string); - B32 success = df_commit_eval_value(parse_ctx.type_graph, parse_ctx.rdbg, &ctrl_ctx, row->eval, write_eval); + B32 success = df_commit_eval_value(parse_ctx.type_graph, parse_ctx.rdi, &ctrl_ctx, row->eval, write_eval); if(success == 0) { DF_CmdParams params = df_cmd_params_from_window(ws); @@ -6858,7 +6858,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, RDI_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) +df_single_line_eval_value_strings_from_eval(Arena *arena, DF_EvalVizStringFlags flags, TG_Graph *graph, RDI_Parsed *rdi, 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}; @@ -6869,13 +6869,13 @@ df_single_line_eval_value_strings_from_eval(Arena *arena, DF_EvalVizStringFlags { if(opt_member != 0) { - U64 member_byte_size = tg_byte_size_from_graph_rdi_key(graph, rdbg, opt_member->type_key); + U64 member_byte_size = tg_byte_size_from_graph_rdi_key(graph, rdi, opt_member->type_key); str8_list_pushf(arena, &list, "member (%I64u offset, %I64u byte%s)", opt_member->off, member_byte_size, member_byte_size > 1 ? "s" : ""); } else { String8 basic_type_kind_string = tg_kind_basic_string_table[tg_kind_from_key(eval.type_key)]; - U64 byte_size = tg_byte_size_from_graph_rdi_key(graph, rdbg, eval.type_key); + U64 byte_size = tg_byte_size_from_graph_rdi_key(graph, rdi, eval.type_key); str8_list_pushf(arena, &list, "%S (%I64u byte%s)", basic_type_kind_string, byte_size, byte_size > 1 ? "s" : ""); } } @@ -6883,7 +6883,7 @@ df_single_line_eval_value_strings_from_eval(Arena *arena, DF_EvalVizStringFlags //- rjf: non-type path: descend recursively & produce single-line value strings else if(max_size > 0) { - TG_Kind eval_type_kind = tg_kind_from_key(tg_unwrapped_from_graph_rdi_key(graph, rdbg, eval.type_key)); + TG_Kind eval_type_kind = tg_kind_from_key(tg_unwrapped_from_graph_rdi_key(graph, rdi, eval.type_key)); U32 radix = default_radix; DF_CfgVal *dec_cfg = df_cfg_val_from_string(cfg_table, str8_lit("dec")); DF_CfgVal *hex_cfg = df_cfg_val_from_string(cfg_table, str8_lit("hex")); @@ -6899,8 +6899,8 @@ df_single_line_eval_value_strings_from_eval(Arena *arena, DF_EvalVizStringFlags //- rjf: default - leaf cases default: { - DF_Eval value_eval = df_value_mode_eval_from_eval(graph, rdbg, ctrl_ctx, eval); - String8 string = df_string_from_simple_typed_eval(arena, graph, rdbg, flags, radix, value_eval); + DF_Eval value_eval = df_value_mode_eval_from_eval(graph, rdi, ctrl_ctx, eval); + String8 string = df_string_from_simple_typed_eval(arena, graph, rdi, flags, radix, value_eval); space_taken += f_dim_from_tag_size_string(font, font_size, string).x; str8_list_push(arena, &list, string); }break; @@ -6920,11 +6920,11 @@ df_single_line_eval_value_strings_from_eval(Arena *arena, DF_EvalVizStringFlags B32 has_array = (array_cfg != &df_g_nil_cfg_val); // rjf: get ptr value - DF_Eval value_eval = df_value_mode_eval_from_eval(graph, rdbg, ctrl_ctx, eval); + DF_Eval value_eval = df_value_mode_eval_from_eval(graph, rdi, ctrl_ctx, eval); // rjf: get pointed-at info TG_Kind type_kind = tg_kind_from_key(eval.type_key); - TG_Key direct_type_key = tg_ptee_from_graph_rdi_key(graph, rdbg, eval.type_key); + TG_Key direct_type_key = tg_ptee_from_graph_rdi_key(graph, rdi, eval.type_key); TG_Kind direct_type_kind = tg_kind_from_key(direct_type_key); B32 direct_type_has_content = (direct_type_kind != TG_Kind_Null && direct_type_kind != TG_Kind_Void && value_eval.imm_u64 != 0); B32 direct_type_is_string = (direct_type_kind != TG_Kind_Null && value_eval.imm_u64 != 0 && @@ -6940,7 +6940,7 @@ df_single_line_eval_value_strings_from_eval(Arena *arena, DF_EvalVizStringFlags if(!no_addr || (direct_type_has_content == 0 && direct_type_is_string == 0)) { did_ptr_value = 1; - String8 string = df_string_from_simple_typed_eval(arena, graph, rdbg, flags, radix, value_eval); + String8 string = df_string_from_simple_typed_eval(arena, graph, rdi, flags, radix, value_eval); space_taken += f_dim_from_tag_size_string(font, font_size, string).x; str8_list_push(arena, &list, string); } @@ -6985,7 +6985,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, opt_member, cfg_table); + String8List pted_strs = df_single_line_eval_value_strings_from_eval(arena, flags, graph, rdi, 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("???"); @@ -7011,7 +7011,7 @@ df_single_line_eval_value_strings_from_eval(Arena *arena, DF_EvalVizStringFlags case TG_Kind_Array: { Temp scratch = scratch_begin(&arena, 1); - TG_Type *eval_type = tg_type_from_graph_rdi_key(scratch.arena, graph, rdbg, eval.type_key); + TG_Type *eval_type = tg_type_from_graph_rdi_key(scratch.arena, graph, rdi, eval.type_key); TG_Key direct_type_key = eval_type->direct_type_key; TG_Kind direct_type_kind = tg_kind_from_key(direct_type_key); U64 array_count = eval_type->count; @@ -7055,7 +7055,7 @@ df_single_line_eval_value_strings_from_eval(Arena *arena, DF_EvalVizStringFlags { if(depth < 3) { - U64 direct_type_byte_size = tg_byte_size_from_graph_rdi_key(graph, rdbg, direct_type_key); + U64 direct_type_byte_size = tg_byte_size_from_graph_rdi_key(graph, rdi, direct_type_key); for(U64 idx = 0; idx < array_count && max_size > space_taken; idx += 1) { DF_Eval element_eval = zero_struct; @@ -7063,7 +7063,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, opt_member, cfg_table); + String8List element_strs = df_single_line_eval_value_strings_from_eval(arena, flags, graph, rdi, 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) @@ -7111,7 +7111,7 @@ df_single_line_eval_value_strings_from_eval(Arena *arena, DF_EvalVizStringFlags if(depth < 4) { Temp scratch = scratch_begin(&arena, 1); - TG_MemberArray data_members = tg_data_members_from_graph_rdi_key(scratch.arena, graph, rdbg, eval.type_key); + TG_MemberArray data_members = tg_data_members_from_graph_rdi_key(scratch.arena, graph, rdi, eval.type_key); TG_MemberArray filtered_data_members = df_filtered_data_members_from_members_cfg_table(scratch.arena, data_members, cfg_table); for(U64 member_idx = 0; member_idx < filtered_data_members.count && max_size > space_taken; member_idx += 1) { @@ -7121,7 +7121,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, opt_member, cfg_table); + String8List member_strs = df_single_line_eval_value_strings_from_eval(arena, flags, graph, rdi, 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) @@ -7286,8 +7286,8 @@ 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->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); + String8List display_strings = df_single_line_eval_value_strings_from_eval(scratch.arena, DF_EvalVizStringFlag_ReadOnlyDisplayRules, parse_ctx->type_graph, parse_ctx->rdi, 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->rdi, ctrl_ctx, 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, parse_ctx, &list, block, block->key, block->eval); row->expr = block->string; row->display_value = str8_list_join(arena, &display_strings, 0); @@ -7312,7 +7312,7 @@ df_eval_viz_windowed_row_list_from_viz_block_list(Arena *arena, DBGI_Scope *scop case DF_EvalVizBlockKind_Members: if(block_type_kind != TG_Kind_Null) { - TG_MemberArray data_members = tg_data_members_from_graph_rdi_key(scratch.arena, parse_ctx->type_graph, parse_ctx->rdbg, block->eval.type_key); + TG_MemberArray data_members = tg_data_members_from_graph_rdi_key(scratch.arena, parse_ctx->type_graph, parse_ctx->rdi, block->eval.type_key); TG_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) { @@ -7337,13 +7337,13 @@ df_eval_viz_windowed_row_list_from_viz_block_list(Arena *arena, DBGI_Scope *scop // rjf: apply view rules to eval { - member_eval = df_dynamically_typed_eval_from_eval(parse_ctx->type_graph, parse_ctx->rdbg, ctrl_ctx, member_eval); + member_eval = df_dynamically_typed_eval_from_eval(parse_ctx->type_graph, parse_ctx->rdi, ctrl_ctx, member_eval); member_eval = df_eval_from_eval_cfg_table(arena, scope, ctrl_ctx, parse_ctx, macro_map, member_eval, &view_rule_table); } // 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, 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); + String8List display_strings = df_single_line_eval_value_strings_from_eval(scratch.arena, DF_EvalVizStringFlag_ReadOnlyDisplayRules, parse_ctx->type_graph, parse_ctx->rdi, 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->rdi, ctrl_ctx, default_radix, font, font_size, 500, 0, member_eval, member, &view_rule_table); DF_EvalVizRow *row = df_eval_viz_row_list_push_new(arena, parse_ctx, &list, block, key, member_eval); if(member->kind == TG_MemberKind_Padding) { @@ -7370,7 +7370,7 @@ df_eval_viz_windowed_row_list_from_viz_block_list(Arena *arena, DBGI_Scope *scop case DF_EvalVizBlockKind_EnumMembers: if(block_type_kind == TG_Kind_Enum) { - TG_Type *type = tg_type_from_graph_rdi_key(scratch.arena, parse_ctx->type_graph, parse_ctx->rdbg, block->eval.type_key); + TG_Type *type = tg_type_from_graph_rdi_key(scratch.arena, parse_ctx->type_graph, parse_ctx->rdi, block->eval.type_key); for(U64 idx = visible_idx_range.min; idx < visible_idx_range.max && idx < type->count; idx += 1) { TG_EnumVal *enum_val = &type->enum_vals[idx]; @@ -7391,13 +7391,13 @@ df_eval_viz_windowed_row_list_from_viz_block_list(Arena *arena, DBGI_Scope *scop // rjf: apply view rules to eval { - eval = df_dynamically_typed_eval_from_eval(parse_ctx->type_graph, parse_ctx->rdbg, ctrl_ctx, eval); + eval = df_dynamically_typed_eval_from_eval(parse_ctx->type_graph, parse_ctx->rdi, ctrl_ctx, eval); eval = df_eval_from_eval_cfg_table(arena, scope, ctrl_ctx, parse_ctx, macro_map, eval, &view_rule_table); } // 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, 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); + String8List display_strings = df_single_line_eval_value_strings_from_eval(scratch.arena, DF_EvalVizStringFlag_ReadOnlyDisplayRules, parse_ctx->type_graph, parse_ctx->rdi, 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->rdi, ctrl_ctx, default_radix, font, font_size, 500, 0, eval, 0, &view_rule_table); DF_EvalVizRow *row = df_eval_viz_row_list_push_new(arena, parse_ctx, &list, block, key, eval); row->expr = push_str8_copy(arena, enum_val->name); row->display_value = str8_list_join(arena, &display_strings, 0); @@ -7414,9 +7414,9 @@ df_eval_viz_windowed_row_list_from_viz_block_list(Arena *arena, DBGI_Scope *scop // case DF_EvalVizBlockKind_Elements: { - TG_Key direct_type_key = tg_unwrapped_direct_from_graph_rdi_key(parse_ctx->type_graph, parse_ctx->rdbg, block->eval.type_key); + TG_Key direct_type_key = tg_unwrapped_direct_from_graph_rdi_key(parse_ctx->type_graph, parse_ctx->rdi, block->eval.type_key); TG_Kind direct_type_kind = tg_kind_from_key(direct_type_key); - U64 direct_type_key_byte_size = tg_byte_size_from_graph_rdi_key(parse_ctx->type_graph, parse_ctx->rdbg, direct_type_key); + U64 direct_type_key_byte_size = tg_byte_size_from_graph_rdi_key(parse_ctx->type_graph, parse_ctx->rdi, direct_type_key); for(U64 idx = visible_idx_range.min; idx < visible_idx_range.max; idx += 1) { // rjf: get keys for this row @@ -7438,13 +7438,13 @@ df_eval_viz_windowed_row_list_from_viz_block_list(Arena *arena, DBGI_Scope *scop // rjf: apply view rules to eval { - elem_eval = df_dynamically_typed_eval_from_eval(parse_ctx->type_graph, parse_ctx->rdbg, ctrl_ctx, elem_eval); + elem_eval = df_dynamically_typed_eval_from_eval(parse_ctx->type_graph, parse_ctx->rdi, ctrl_ctx, elem_eval); elem_eval = df_eval_from_eval_cfg_table(arena, scope, ctrl_ctx, parse_ctx, macro_map, elem_eval, &view_rule_table); } // 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, 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); + String8List display_strings = df_single_line_eval_value_strings_from_eval(scratch.arena, DF_EvalVizStringFlag_ReadOnlyDisplayRules, parse_ctx->type_graph, parse_ctx->rdi, 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->rdi, ctrl_ctx, default_radix, font, font_size, 500, 0, elem_eval, 0, &view_rule_table); DF_EvalVizRow *row = df_eval_viz_row_list_push_new(arena, parse_ctx, &list, block, key, elem_eval); row->expr = push_str8f(arena, "[%I64u]", idx); row->display_value = str8_list_join(arena, &display_strings, 0); @@ -7465,7 +7465,7 @@ df_eval_viz_windowed_row_list_from_viz_block_list(Arena *arena, DBGI_Scope *scop // case DF_EvalVizBlockKind_Links: { - DF_EvalLinkBaseChunkList link_base_chunks = df_eval_link_base_chunk_list_from_eval(scratch.arena, parse_ctx->type_graph, parse_ctx->rdbg, block->link_member_type_key, block->link_member_off, ctrl_ctx, block->eval, 512); + DF_EvalLinkBaseChunkList link_base_chunks = df_eval_link_base_chunk_list_from_eval(scratch.arena, parse_ctx->type_graph, parse_ctx->rdi, block->link_member_type_key, block->link_member_off, ctrl_ctx, block->eval, 512); DF_EvalLinkBaseArray link_bases = df_eval_link_base_array_from_chunk_list(scratch.arena, &link_base_chunks); for(U64 idx = visible_idx_range.min; idx < visible_idx_range.max; idx += 1) { @@ -7489,13 +7489,13 @@ df_eval_viz_windowed_row_list_from_viz_block_list(Arena *arena, DBGI_Scope *scop df_cfg_table_push_unparsed_string(scratch.arena, &view_rule_table, view_rule_string, DF_CfgSrc_User); // rjf: apply view rules to eval - link_eval = df_dynamically_typed_eval_from_eval(parse_ctx->type_graph, parse_ctx->rdbg, ctrl_ctx, link_eval); + link_eval = df_dynamically_typed_eval_from_eval(parse_ctx->type_graph, parse_ctx->rdi, ctrl_ctx, link_eval); link_eval = df_eval_from_eval_cfg_table(arena, scope, ctrl_ctx, parse_ctx, macro_map, link_eval, &view_rule_table); 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, 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); + String8List display_strings = df_single_line_eval_value_strings_from_eval(scratch.arena, DF_EvalVizStringFlag_ReadOnlyDisplayRules, parse_ctx->type_graph, parse_ctx->rdi, 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->rdi, ctrl_ctx, default_radix, font, font_size, 500, 0, link_eval, 0, &view_rule_table); DF_EvalVizRow *row = df_eval_viz_row_list_push_new(arena, parse_ctx, &list, block, key, link_eval); row->expr = push_str8f(arena, "[%I64u]", idx); row->display_value = str8_list_join(arena, &display_strings, 0); @@ -7534,7 +7534,7 @@ df_eval_viz_windowed_row_list_from_viz_block_list(Arena *arena, DBGI_Scope *scop for(U64 idx = visible_idx_range.min; idx < visible_idx_range.max; idx += 1) { // rjf: unpack info about this row - String8 name = dbgi_fuzzy_item_string_from_rdbg_target_element_idx(parse_ctx->rdbg, block->dbgi_target, block->backing_search_items.v[idx].idx); + String8 name = dbgi_fuzzy_item_string_from_rdi_target_element_idx(parse_ctx->rdi, block->dbgi_target, block->backing_search_items.v[idx].idx); // rjf: get keys for this row DF_ExpandKey parent_key = block->parent_key; @@ -7551,13 +7551,13 @@ df_eval_viz_windowed_row_list_from_viz_block_list(Arena *arena, DBGI_Scope *scop // rjf: apply view rules to eval { - eval = df_dynamically_typed_eval_from_eval(parse_ctx->type_graph, parse_ctx->rdbg, ctrl_ctx, eval); + eval = df_dynamically_typed_eval_from_eval(parse_ctx->type_graph, parse_ctx->rdi, ctrl_ctx, eval); eval = df_eval_from_eval_cfg_table(arena, scope, ctrl_ctx, parse_ctx, macro_map, eval, &view_rule_table); } // 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, 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); + String8List display_strings = df_single_line_eval_value_strings_from_eval(scratch.arena, DF_EvalVizStringFlag_ReadOnlyDisplayRules, parse_ctx->type_graph, parse_ctx->rdi, 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->rdi, ctrl_ctx, default_radix, font, font_size, 500, 0, eval, 0, &view_rule_table); DF_EvalVizRow *row = df_eval_viz_row_list_push_new(arena, parse_ctx, &list, block, key, eval); row->expr = name; row->display_value = str8_list_join(arena, &display_strings, 0); @@ -9735,7 +9735,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, 0, &cfg_table); + String8List eval_strings = df_single_line_eval_value_strings_from_eval(scratch.arena, DF_EvalVizStringFlag_ReadOnlyDisplayRules, parse_ctx->type_graph, parse_ctx->rdi, 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 cb2637d9..c8399b4e 100644 --- a/src/df/gfx/df_gfx.h +++ b/src/df/gfx/df_gfx.h @@ -961,7 +961,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, RDI_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 String8List df_single_line_eval_value_strings_from_eval(Arena *arena, DF_EvalVizStringFlags flags, TG_Graph *graph, RDI_Parsed *rdi, 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, EVAL_String2ExprMap *macro_map, 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_view_rule_hooks.c b/src/df/gfx/df_view_rule_hooks.c index cb43eda3..fd772b5f 100644 --- a/src/df/gfx/df_view_rule_hooks.c +++ b/src/df/gfx/df_view_rule_hooks.c @@ -223,10 +223,10 @@ df_view_rule_hooks__bitmap_topology_info_from_cfg(DBGI_Scope *scope, DF_CtrlCtx String8 height_expr = str8_list_join(scratch.arena, &height_expr_strs, 0); String8 fmt_string = fmt_cfg->first->string; DF_Eval width_eval = df_eval_from_string(scratch.arena, scope, ctrl_ctx, parse_ctx, macro_map, width_expr); - DF_Eval width_eval_value = df_value_mode_eval_from_eval(parse_ctx->type_graph, parse_ctx->rdbg, ctrl_ctx, width_eval); + DF_Eval width_eval_value = df_value_mode_eval_from_eval(parse_ctx->type_graph, parse_ctx->rdi, ctrl_ctx, width_eval); info.width = width_eval_value.imm_u64; DF_Eval height_eval = df_eval_from_string(scratch.arena, scope, ctrl_ctx, parse_ctx, macro_map, height_expr); - DF_Eval height_eval_value = df_value_mode_eval_from_eval(parse_ctx->type_graph, parse_ctx->rdbg, ctrl_ctx, height_eval); + DF_Eval height_eval_value = df_value_mode_eval_from_eval(parse_ctx->type_graph, parse_ctx->rdi, ctrl_ctx, height_eval); info.height = height_eval_value.imm_u64; if(fmt_string.size != 0) { @@ -276,9 +276,9 @@ df_view_rule_hooks__geo_topology_info_from_cfg(DBGI_Scope *scope, DF_CtrlCtx *ct DF_Eval count_eval = df_eval_from_string(scratch.arena, scope, ctrl_ctx, parse_ctx, macro_map, count_expr); DF_Eval vertices_base_eval = df_eval_from_string(scratch.arena, scope, ctrl_ctx, parse_ctx, macro_map, vertices_base_expr); DF_Eval vertices_size_eval = df_eval_from_string(scratch.arena, scope, ctrl_ctx, parse_ctx, macro_map, vertices_size_expr); - DF_Eval count_val_eval = df_value_mode_eval_from_eval(parse_ctx->type_graph, parse_ctx->rdbg, ctrl_ctx, count_eval); - DF_Eval vertices_base_val_eval = df_value_mode_eval_from_eval(parse_ctx->type_graph, parse_ctx->rdbg, ctrl_ctx, vertices_base_eval); - DF_Eval vertices_size_val_eval = df_value_mode_eval_from_eval(parse_ctx->type_graph, parse_ctx->rdbg, ctrl_ctx, vertices_size_eval); + DF_Eval count_val_eval = df_value_mode_eval_from_eval(parse_ctx->type_graph, parse_ctx->rdi, ctrl_ctx, count_eval); + DF_Eval vertices_base_val_eval = df_value_mode_eval_from_eval(parse_ctx->type_graph, parse_ctx->rdi, ctrl_ctx, vertices_base_eval); + DF_Eval vertices_size_val_eval = df_value_mode_eval_from_eval(parse_ctx->type_graph, parse_ctx->rdi, ctrl_ctx, vertices_size_eval); U64 vertices_base_vaddr = vertices_base_val_eval.imm_u64 ? vertices_base_val_eval.imm_u64 : vertices_base_val_eval.offset; result.index_count = count_val_eval.imm_u64; result.vertices_vaddr_range = r1u64(vertices_base_vaddr, vertices_base_vaddr+vertices_size_val_eval.imm_u64); @@ -306,7 +306,7 @@ df_view_rule_hooks__txt_topology_info_from_cfg(DBGI_Scope *scope, DF_CtrlCtx *ct lang_string = lang_cfg->first->string; String8 size_expr = str8_list_join(scratch.arena, &size_expr_strs, &join); DF_Eval size_eval = df_eval_from_string(scratch.arena, scope, ctrl_ctx, parse_ctx, macro_map, size_expr); - DF_Eval size_val_eval = df_value_mode_eval_from_eval(parse_ctx->type_graph, parse_ctx->rdbg, ctrl_ctx, size_eval); + DF_Eval size_val_eval = df_value_mode_eval_from_eval(parse_ctx->type_graph, parse_ctx->rdi, ctrl_ctx, size_eval); result.lang = txt_lang_kind_from_extension(lang_string); result.size_cap = size_val_eval.imm_u64; } @@ -337,13 +337,13 @@ DF_CORE_VIEW_RULE_EVAL_RESOLUTION_FUNCTION_DEF(array) } String8 array_size_expr = str8_list_join(scratch.arena, &array_size_expr_strs, 0); DF_Eval array_size_eval = df_eval_from_string(arena, dbgi_scope, ctrl_ctx, parse_ctx, macro_map, array_size_expr); - DF_Eval array_size_eval_value = df_value_mode_eval_from_eval(parse_ctx->type_graph, parse_ctx->rdbg, ctrl_ctx, array_size_eval); + DF_Eval array_size_eval_value = df_value_mode_eval_from_eval(parse_ctx->type_graph, parse_ctx->rdi, ctrl_ctx, array_size_eval); eval_error_list_concat_in_place(&eval.errors, &array_size_eval.errors); array_size = array_size_eval_value.imm_u64; } // rjf: apply array size to type - TG_Key pointee = tg_ptee_from_graph_rdi_key(parse_ctx->type_graph, parse_ctx->rdbg, type_key); + TG_Key pointee = tg_ptee_from_graph_rdi_key(parse_ctx->type_graph, parse_ctx->rdi, type_key); TG_Key array_type = tg_cons_type_make(parse_ctx->type_graph, TG_Kind_Array, pointee, array_size); eval.type_key = tg_cons_type_make(parse_ctx->type_graph, TG_Kind_Ptr, array_type, 0); } @@ -373,13 +373,13 @@ DF_CORE_VIEW_RULE_EVAL_RESOLUTION_FUNCTION_DEF(bswap) Temp scratch = scratch_begin(&arena, 1); TG_Key type_key = eval.type_key; TG_Kind type_kind = tg_kind_from_key(type_key); - U64 type_size_bytes = tg_byte_size_from_graph_rdi_key(parse_ctx->type_graph, parse_ctx->rdbg, type_key); + U64 type_size_bytes = tg_byte_size_from_graph_rdi_key(parse_ctx->type_graph, parse_ctx->rdi, type_key); if(TG_Kind_Char8 <= type_kind && type_kind <= TG_Kind_S256 && (type_size_bytes == 2 || type_size_bytes == 4 || type_size_bytes == 8)) { - DF_Eval value_eval = df_value_mode_eval_from_eval(parse_ctx->type_graph, parse_ctx->rdbg, ctrl_ctx, eval); + DF_Eval value_eval = df_value_mode_eval_from_eval(parse_ctx->type_graph, parse_ctx->rdi, ctrl_ctx, eval); if(value_eval.mode == EVAL_EvalMode_Value) { switch(type_size_bytes) @@ -498,8 +498,8 @@ DF_GFX_VIEW_RULE_ROW_UI_FUNCTION_DEF(rgba) DF_Entity *process = df_entity_ancestor_from_kind(thread, DF_EntityKind_Process); //- rjf: grab hsva - DF_Eval value_eval = df_value_mode_eval_from_eval(parse_ctx->type_graph, parse_ctx->rdbg, ctrl_ctx, eval); - Vec4F32 rgba = df_view_rule_hooks__rgba_from_eval(value_eval, parse_ctx->type_graph, parse_ctx->rdbg, process); + DF_Eval value_eval = df_value_mode_eval_from_eval(parse_ctx->type_graph, parse_ctx->rdi, ctrl_ctx, eval); + Vec4F32 rgba = df_view_rule_hooks__rgba_from_eval(value_eval, parse_ctx->type_graph, parse_ctx->rdi, process); Vec4F32 hsva = hsva_from_rgba(rgba); //- rjf: build text box @@ -572,8 +572,8 @@ DF_GFX_VIEW_RULE_BLOCK_UI_FUNCTION_DEF(rgba) } else { - DF_Eval value_eval = df_value_mode_eval_from_eval(parse_ctx->type_graph, parse_ctx->rdbg, ctrl_ctx, eval); - rgba = df_view_rule_hooks__rgba_from_eval(value_eval, parse_ctx->type_graph, parse_ctx->rdbg, process); + DF_Eval value_eval = df_value_mode_eval_from_eval(parse_ctx->type_graph, parse_ctx->rdi, ctrl_ctx, eval); + rgba = df_view_rule_hooks__rgba_from_eval(value_eval, parse_ctx->type_graph, parse_ctx->rdi, process); state->hsva = hsva = hsva_from_rgba(rgba); state->memgen_idx = ctrl_memgen_idx(); } @@ -623,7 +623,7 @@ DF_GFX_VIEW_RULE_BLOCK_UI_FUNCTION_DEF(rgba) if(commit) { Vec4F32 rgba = rgba_from_hsva(hsva); - df_view_rule_hooks__eval_commit_rgba(eval, parse_ctx->type_graph, parse_ctx->rdbg, ctrl_ctx, rgba); + df_view_rule_hooks__eval_commit_rgba(eval, parse_ctx->type_graph, parse_ctx->rdi, ctrl_ctx, rgba); state->memgen_idx = ctrl_memgen_idx(); } @@ -678,7 +678,7 @@ DF_GFX_VIEW_RULE_BLOCK_UI_FUNCTION_DEF(text) DF_TxtTopologyInfo top = df_view_rule_hooks__txt_topology_info_from_cfg(dbgi_scope, ctrl_ctx, parse_ctx, macro_map, cfg); //- rjf: resolve to address value & range - DF_Eval value_eval = df_value_mode_eval_from_eval(parse_ctx->type_graph, parse_ctx->rdbg, ctrl_ctx, eval); + DF_Eval value_eval = df_value_mode_eval_from_eval(parse_ctx->type_graph, parse_ctx->rdi, ctrl_ctx, eval); U64 base_vaddr = value_eval.imm_u64 ? value_eval.imm_u64 : value_eval.offset; Rng1U64 vaddr_range = r1u64(base_vaddr, base_vaddr + (top.size_cap ? top.size_cap : 2048)); @@ -844,7 +844,7 @@ DF_CORE_VIEW_RULE_VIZ_BLOCK_PROD_FUNCTION_DEF(bitmap) DF_GFX_VIEW_RULE_ROW_UI_FUNCTION_DEF(bitmap) { - DF_Eval value_eval = df_value_mode_eval_from_eval(parse_ctx->type_graph, parse_ctx->rdbg, ctrl_ctx, eval); + DF_Eval value_eval = df_value_mode_eval_from_eval(parse_ctx->type_graph, parse_ctx->rdi, ctrl_ctx, eval); U64 base_vaddr = value_eval.imm_u64 ? value_eval.imm_u64 : value_eval.offset; DF_BitmapTopologyInfo topology = df_view_rule_hooks__bitmap_topology_info_from_cfg(scope, ctrl_ctx, parse_ctx, macro_map, cfg); U64 expected_size = topology.width*topology.height*r_tex2d_format_bytes_per_pixel_table[topology.fmt]; @@ -865,7 +865,7 @@ DF_GFX_VIEW_RULE_BLOCK_UI_FUNCTION_DEF(bitmap) state->last_open_frame_idx = df_frame_index(); //- rjf: resolve to address value - DF_Eval value_eval = df_value_mode_eval_from_eval(parse_ctx->type_graph, parse_ctx->rdbg, ctrl_ctx, eval); + DF_Eval value_eval = df_value_mode_eval_from_eval(parse_ctx->type_graph, parse_ctx->rdi, ctrl_ctx, eval); U64 base_vaddr = value_eval.imm_u64 ? value_eval.imm_u64 : value_eval.offset; //- rjf: unpack thread/process of eval @@ -1087,7 +1087,7 @@ DF_CORE_VIEW_RULE_VIZ_BLOCK_PROD_FUNCTION_DEF(geo) DF_GFX_VIEW_RULE_ROW_UI_FUNCTION_DEF(geo) { - DF_Eval value_eval = df_value_mode_eval_from_eval(parse_ctx->type_graph, parse_ctx->rdbg, ctrl_ctx, eval); + DF_Eval value_eval = df_value_mode_eval_from_eval(parse_ctx->type_graph, parse_ctx->rdi, ctrl_ctx, eval); U64 base_vaddr = value_eval.imm_u64 ? value_eval.imm_u64 : value_eval.offset; UI_Font(df_font_from_slot(DF_FontSlot_Code)) UI_TextColor(df_rgba_from_theme_color(DF_ThemeColor_WeakText)) ui_labelf("0x%I64x -> Geometry", base_vaddr); @@ -1112,7 +1112,7 @@ DF_GFX_VIEW_RULE_BLOCK_UI_FUNCTION_DEF(geo) state->last_open_frame_idx = df_frame_index(); //- rjf: resolve to address value - DF_Eval value_eval = df_value_mode_eval_from_eval(parse_ctx->type_graph, parse_ctx->rdbg, ctrl_ctx, eval); + DF_Eval value_eval = df_value_mode_eval_from_eval(parse_ctx->type_graph, parse_ctx->rdi, ctrl_ctx, eval); U64 base_vaddr = value_eval.imm_u64 ? value_eval.imm_u64 : value_eval.offset; //- rjf: extract extra geo topology info from view rule diff --git a/src/df/gfx/df_views.c b/src/df/gfx/df_views.c index c6424a10..a93de0d0 100644 --- a/src/df/gfx/df_views.c +++ b/src/df/gfx/df_views.c @@ -751,7 +751,7 @@ df_eval_viz_block_list_from_watch_view_state(Arena *arena, DBGI_Scope *scope, DF DF_Entity *binary = df_binary_file_from_module(module); String8 exe_path = df_full_path_from_entity(scratch.arena, binary); DBGI_Parse *dbgi = dbgi_parse_from_exe_path(scope, exe_path, os_now_microseconds()+100); - RDI_Parsed *rdbg = &dbgi->rdbg; + RDI_Parsed *rdi = &dbgi->rdi; //- rjf: calculate top-level keys, expand root-level, grab root expansion node DF_ExpandKey parent_key = df_expand_key_make(5381, 0); @@ -842,7 +842,7 @@ df_eval_viz_block_list_from_watch_view_state(Arena *arena, DBGI_Scope *scope, DF last_vb = df_eval_viz_block_split_and_continue(arena, &blocks, last_vb, sub_expand_item_idxs[sub_expand_idx]); // rjf: grab name for the expanded row - String8 name = dbgi_fuzzy_item_string_from_rdbg_target_element_idx(&dbgi->rdbg, dbgi_target, sub_expand_keys[sub_expand_idx].child_num); + String8 name = dbgi_fuzzy_item_string_from_rdi_target_element_idx(&dbgi->rdi, dbgi_target, sub_expand_keys[sub_expand_idx].child_num); // rjf: recurse for sub-expansion { @@ -1180,7 +1180,7 @@ df_eval_watch_view_build(DF_Window *ws, DF_Panel *panel, DF_View *view, DF_EvalW default:{}break; case EVAL_EvalMode_Addr: { - U64 size = tg_byte_size_from_graph_rdi_key(parse_ctx.type_graph, parse_ctx.rdbg, row->eval.type_key); + U64 size = tg_byte_size_from_graph_rdi_key(parse_ctx.type_graph, parse_ctx.rdi, row->eval.type_key); size = Min(size, 64); Rng1U64 vaddr_rng = r1u64(row->eval.offset, row->eval.offset+size); CTRL_ProcessMemorySlice slice = ctrl_query_cached_data_from_process_vaddr_range(scratch.arena, process->ctrl_machine_id, process->ctrl_handle, vaddr_rng, 0); @@ -1270,7 +1270,7 @@ df_eval_watch_view_build(DF_Window *ws, DF_Panel *panel, DF_View *view, DF_EvalW row->depth > 0 && !row_expanded) { - U64 next_off = (row->eval.offset + tg_byte_size_from_graph_rdi_key(parse_ctx.type_graph, parse_ctx.rdbg, row->eval.type_key)); + U64 next_off = (row->eval.offset + tg_byte_size_from_graph_rdi_key(parse_ctx.type_graph, parse_ctx.rdi, row->eval.type_key)); if(next_off%64 != 0 && row->eval.offset/64 < next_off/64) { ui_set_next_fixed_x(0); @@ -1346,7 +1346,7 @@ df_eval_watch_view_build(DF_Window *ws, DF_Panel *panel, DF_View *view, DF_EvalW String8List inheritance_chain_type_names = {0}; for(TG_KeyNode *n = row->inherited_type_key_chain.first; n != 0; n = n->next) { - String8 inherited_type_name = tg_string_from_key(scratch.arena, parse_ctx.type_graph, parse_ctx.rdbg, n->v); + String8 inherited_type_name = tg_string_from_key(scratch.arena, parse_ctx.type_graph, parse_ctx.rdi, n->v); inherited_type_name = str8_skip_chop_whitespace(inherited_type_name); str8_list_push(scratch.arena, &inheritance_chain_type_names, inherited_type_name); } @@ -1399,9 +1399,9 @@ df_eval_watch_view_build(DF_Window *ws, DF_Panel *panel, DF_View *view, DF_EvalW if(parse.expr != &eval_expr_nil && errors.count == 0) { ui_labelf("Type:"); - ir_tree_and_type = eval_irtree_and_type_from_expr(scratch.arena, parse_ctx.type_graph, parse_ctx.rdbg, &eval_string2expr_map_nil, parse.expr, &errors); + ir_tree_and_type = eval_irtree_and_type_from_expr(scratch.arena, parse_ctx.type_graph, parse_ctx.rdi, &eval_string2expr_map_nil, parse.expr, &errors); TG_Key type_key = ir_tree_and_type.type_key; - String8 type_string = tg_string_from_key(scratch.arena, parse_ctx.type_graph, parse_ctx.rdbg, type_key); + String8 type_string = tg_string_from_key(scratch.arena, parse_ctx.type_graph, parse_ctx.rdi, type_key); UI_TextColor(df_rgba_from_theme_color(DF_ThemeColor_WeakText)) ui_label(type_string); } @@ -1554,7 +1554,7 @@ df_eval_watch_view_build(DF_Window *ws, DF_Panel *panel, DF_View *view, DF_EvalW UI_FocusActive((cell_selected && ewv->input_editing) ? UI_FocusKind_On : UI_FocusKind_Off) { TG_Key key = row->eval.type_key; - String8 string = tg_string_from_key(scratch.arena, parse_ctx.type_graph, parse_ctx.rdbg, key); + String8 string = tg_string_from_key(scratch.arena, parse_ctx.type_graph, parse_ctx.rdi, key); string = str8_skip_chop_whitespace(string); UI_Box *box = ui_build_box_from_stringf(UI_BoxFlag_Clip|UI_BoxFlag_Clickable, "###type_%I64x", row_hash); if(!tg_key_match(key, tg_key_zero())) UI_Parent(box) @@ -1691,7 +1691,7 @@ df_eval_watch_view_build(DF_Window *ws, DF_Panel *panel, DF_View *view, DF_EvalW { Temp scratch = scratch_begin(0, 0); DF_Eval write_eval = df_eval_from_string(scratch.arena, scope, &ctrl_ctx, &parse_ctx, ¯o_map, commit_string); - B32 success = df_commit_eval_value(parse_ctx.type_graph, parse_ctx.rdbg, &ctrl_ctx, commit_row->eval, write_eval); + B32 success = df_commit_eval_value(parse_ctx.type_graph, parse_ctx.rdi, &ctrl_ctx, commit_row->eval, write_eval); if(success == 0) { DF_CmdParams params = df_cmd_params_from_view(ws, panel, view); @@ -2918,7 +2918,7 @@ DF_VIEW_UI_FUNCTION_DEF(SymbolLister) //- rjf: query -> raddbg, filtered items U128 fuzzy_search_key = {(U64)view, df_hash_from_string(str8_struct(&view))}; DBGI_Parse *dbgi = dbgi_parse_from_exe_path(scope, exe_path, os_now_microseconds()+100); - RDI_Parsed *rdbg = &dbgi->rdbg; + RDI_Parsed *rdi = &dbgi->rdi; B32 items_stale = 0; DBGI_FuzzySearchItemArray items = dbgi_fuzzy_search_items_from_key_exe_query(scope, fuzzy_search_key, exe_path, query, DBGI_FuzzySearchTarget_Procedures, os_now_microseconds()+100, &items_stale); if(items_stale) @@ -2929,9 +2929,9 @@ DF_VIEW_UI_FUNCTION_DEF(SymbolLister) //- rjf: submit best match when hitting enter w/ no selection if(slv->cursor.y == 0 && items.count != 0 && os_key_press(ui_events(), ui_window(), 0, OS_Key_Return)) { - RDI_Procedure *procedure = rdi_element_from_idx(rdbg, procedures, items.v[0].idx); + RDI_Procedure *procedure = rdi_element_from_idx(rdi, procedures, items.v[0].idx); U64 name_size = 0; - U8 *name_base = rdi_string_from_idx(rdbg, procedure->name_string_idx, &name_size); + U8 *name_base = rdi_string_from_idx(rdi, procedure->name_string_idx, &name_size); String8 name = str8(name_base, name_size); if(name.size != 0) { @@ -2967,11 +2967,11 @@ DF_VIEW_UI_FUNCTION_DEF(SymbolLister) UI_Focus((slv->cursor.y == idx+1) ? UI_FocusKind_On : UI_FocusKind_Off) { DBGI_FuzzySearchItem *item = &items.v[idx]; - RDI_Procedure *procedure = rdi_element_from_idx(rdbg, procedures, item->idx); + RDI_Procedure *procedure = rdi_element_from_idx(rdi, procedures, item->idx); U64 name_size = 0; - U8 *name_base = rdi_string_from_idx(rdbg, procedure->name_string_idx, &name_size); + U8 *name_base = rdi_string_from_idx(rdi, procedure->name_string_idx, &name_size); String8 name = str8(name_base, name_size); - RDI_TypeNode *type_node = rdi_element_from_idx(rdbg, type_nodes, procedure->type_idx); + RDI_TypeNode *type_node = rdi_element_from_idx(rdi, type_nodes, procedure->type_idx); TG_Key type_key = tg_key_ext(tg_kind_from_rdi_type_kind(type_node->kind), procedure->type_idx); ui_set_next_hover_cursor(OS_Cursor_HandPoint); UI_Box *box = ui_build_box_from_stringf(UI_BoxFlag_Clickable| @@ -2987,7 +2987,7 @@ DF_VIEW_UI_FUNCTION_DEF(SymbolLister) ui_box_equip_fuzzy_match_ranges(box, &item->match_ranges); if(!tg_key_match(tg_key_zero(), type_key)) { - String8 type_string = tg_string_from_key(scratch.arena, graph, rdbg, type_key); + String8 type_string = tg_string_from_key(scratch.arena, graph, rdi, type_key); df_code_label(0.5f, 0, df_rgba_from_theme_color(DF_ThemeColor_WeakText), type_string); } } @@ -7902,7 +7902,7 @@ DF_VIEW_UI_FUNCTION_DEF(Memory) DBGI_Scope *scope = dbgi_scope_open(); U64 thread_rip_vaddr = df_query_cached_rip_from_thread_unwind(thread, ctrl_ctx.unwind_count); EVAL_ParseCtx parse_ctx = df_eval_parse_ctx_from_process_vaddr(scope, process, thread_rip_vaddr); - RDI_Parsed *rdbg = parse_ctx.rdbg; + RDI_Parsed *rdi = parse_ctx.rdi; for(EVAL_String2NumMapNode *n = parse_ctx.locals_map->first; n != 0; n = n->order_next) { String8 local_name = n->string; @@ -7910,7 +7910,7 @@ DF_VIEW_UI_FUNCTION_DEF(Memory) if(local_eval.mode == EVAL_EvalMode_Addr) { TG_Kind local_eval_type_kind = tg_kind_from_key(local_eval.type_key); - U64 local_eval_type_size = tg_byte_size_from_graph_rdi_key(parse_ctx.type_graph, rdbg, local_eval.type_key); + U64 local_eval_type_size = tg_byte_size_from_graph_rdi_key(parse_ctx.type_graph, rdi, local_eval.type_key); Rng1U64 vaddr_rng = r1u64(local_eval.offset, local_eval.offset+local_eval_type_size); Rng1U64 vaddr_rng_in_visible = intersect_1u64(viz_range_bytes, vaddr_rng); if(vaddr_rng_in_visible.max != vaddr_rng_in_visible.min) @@ -7919,7 +7919,7 @@ DF_VIEW_UI_FUNCTION_DEF(Memory) { annotation->name_string = push_str8_copy(scratch.arena, local_name); annotation->kind_string = str8_lit("Local"); - annotation->type_string = tg_string_from_key(scratch.arena, parse_ctx.type_graph, parse_ctx.rdbg, local_eval.type_key); + annotation->type_string = tg_string_from_key(scratch.arena, parse_ctx.type_graph, parse_ctx.rdi, local_eval.type_key); annotation->color = color_gen_table[(vaddr_rng.min/8)%ArrayCount(color_gen_table)]; annotation->vaddr_range = vaddr_rng; } diff --git a/src/eval/eval_compiler.c b/src/eval/eval_compiler.c index afcd9812..792d1cb9 100644 --- a/src/eval/eval_compiler.c +++ b/src/eval/eval_compiler.c @@ -331,7 +331,7 @@ eval_type_group_from_kind(TG_Kind kind){ } internal TG_Key -eval_type_unwrap_enum(TG_Graph *graph, RDI_Parsed *rdbg, TG_Key key) +eval_type_unwrap_enum(TG_Graph *graph, RDI_Parsed *rdi, TG_Key key) { TG_Key result = key; for(B32 good = 1; good;) @@ -339,7 +339,7 @@ eval_type_unwrap_enum(TG_Graph *graph, RDI_Parsed *rdbg, TG_Key key) TG_Kind kind = tg_kind_from_key(key); if(kind == TG_Kind_Enum) { - result = tg_direct_from_graph_rdi_key(graph, rdbg, result); + result = tg_direct_from_graph_rdi_key(graph, rdi, result); } else { @@ -350,7 +350,7 @@ eval_type_unwrap_enum(TG_Graph *graph, RDI_Parsed *rdbg, TG_Key key) } internal TG_Key -eval_type_promote(TG_Graph *graph, RDI_Parsed *rdbg, TG_Key key){ +eval_type_promote(TG_Graph *graph, RDI_Parsed *rdi, TG_Key key){ TG_Key result = key; TG_Kind kind = tg_kind_from_key(key); if(kind == TG_Kind_Bool || @@ -365,17 +365,17 @@ eval_type_promote(TG_Graph *graph, RDI_Parsed *rdbg, TG_Key key){ } internal TG_Key -eval_type_coerce(TG_Graph *graph, RDI_Parsed *rdbg, TG_Key l, TG_Key r){ +eval_type_coerce(TG_Graph *graph, RDI_Parsed *rdi, TG_Key l, TG_Key r){ Assert(eval_kind_is_basic_or_enum(tg_kind_from_key(l)) && eval_kind_is_basic_or_enum(tg_kind_from_key(r))); // replace enums with corresponding ints - TG_Key lt = eval_type_unwrap_enum(graph, rdbg, l); - TG_Key rt = eval_type_unwrap_enum(graph, rdbg, r); + TG_Key lt = eval_type_unwrap_enum(graph, rdi, l); + TG_Key rt = eval_type_unwrap_enum(graph, rdi, r); // first promote each - TG_Key lp = eval_type_promote(graph, rdbg, lt); - TG_Key rp = eval_type_promote(graph, rdbg, rt); + TG_Key lp = eval_type_promote(graph, rdi, lt); + TG_Key rp = eval_type_promote(graph, rdi, rt); TG_Kind lk = tg_kind_from_key(lp); TG_Kind rk = tg_kind_from_key(rp); @@ -384,12 +384,12 @@ eval_type_coerce(TG_Graph *graph, RDI_Parsed *rdbg, TG_Key l, TG_Key r){ } internal B32 -eval_type_match(TG_Graph *graph, RDI_Parsed *rdbg, TG_Key l, TG_Key r){ +eval_type_match(TG_Graph *graph, RDI_Parsed *rdi, TG_Key l, TG_Key r){ B32 result = 0; // unwrap - TG_Key lu = tg_unwrapped_from_graph_rdi_key(graph, rdbg, l); - TG_Key ru = tg_unwrapped_from_graph_rdi_key(graph, rdbg, r); + TG_Key lu = tg_unwrapped_from_graph_rdi_key(graph, rdi, l); + TG_Key ru = tg_unwrapped_from_graph_rdi_key(graph, rdi, r); if (tg_key_match(lu, ru)){ result = 1; @@ -408,21 +408,21 @@ eval_type_match(TG_Graph *graph, RDI_Parsed *rdbg, TG_Key l, TG_Key r){ case TG_Kind_LRef: case TG_Kind_RRef: { - TG_Key lud = tg_direct_from_graph_rdi_key(graph, rdbg, lu); - TG_Key rud = tg_direct_from_graph_rdi_key(graph, rdbg, ru); - if (eval_type_match(graph, rdbg, lud, rud)){ + TG_Key lud = tg_direct_from_graph_rdi_key(graph, rdi, lu); + TG_Key rud = tg_direct_from_graph_rdi_key(graph, rdi, ru); + if (eval_type_match(graph, rdi, lud, rud)){ result = 1; } }break; case TG_Kind_MemberPtr: { - TG_Key lud = tg_direct_from_graph_rdi_key(graph, rdbg, lu); - TG_Key rud = tg_direct_from_graph_rdi_key(graph, rdbg, ru); - TG_Key luo = tg_owner_from_graph_rdi_key(graph, rdbg, lu); - TG_Key ruo = tg_owner_from_graph_rdi_key(graph, rdbg, ru); - if (eval_type_match(graph, rdbg, lud, rud) && - eval_type_match(graph, rdbg, luo, ruo)){ + TG_Key lud = tg_direct_from_graph_rdi_key(graph, rdi, lu); + TG_Key rud = tg_direct_from_graph_rdi_key(graph, rdi, ru); + TG_Key luo = tg_owner_from_graph_rdi_key(graph, rdi, lu); + TG_Key ruo = tg_owner_from_graph_rdi_key(graph, rdi, ru); + if (eval_type_match(graph, rdi, lud, rud) && + eval_type_match(graph, rdi, luo, ruo)){ result = 1; } }break; @@ -430,9 +430,9 @@ eval_type_match(TG_Graph *graph, RDI_Parsed *rdbg, TG_Key l, TG_Key r){ case TG_Kind_Array: { Temp scratch = scratch_begin(0, 0); - TG_Type *lt = tg_type_from_graph_rdi_key(scratch.arena, graph, rdbg, l); - TG_Type *rt = tg_type_from_graph_rdi_key(scratch.arena, graph, rdbg, r); - if(lt->count == rt->count && eval_type_match(graph, rdbg, lt->direct_type_key, rt->direct_type_key)) + TG_Type *lt = tg_type_from_graph_rdi_key(scratch.arena, graph, rdi, l); + TG_Type *rt = tg_type_from_graph_rdi_key(scratch.arena, graph, rdi, r); + if(lt->count == rt->count && eval_type_match(graph, rdi, lt->direct_type_key, rt->direct_type_key)) { result = 1; } @@ -442,9 +442,9 @@ eval_type_match(TG_Graph *graph, RDI_Parsed *rdbg, TG_Key l, TG_Key r){ case TG_Kind_Function: { Temp scratch = scratch_begin(0, 0); - TG_Type *lt = tg_type_from_graph_rdi_key(scratch.arena, graph, rdbg, l); - TG_Type *rt = tg_type_from_graph_rdi_key(scratch.arena, graph, rdbg, r); - if (lt->count == rt->count && eval_type_match(graph, rdbg, lt->direct_type_key, rt->direct_type_key)) + TG_Type *lt = tg_type_from_graph_rdi_key(scratch.arena, graph, rdi, l); + TG_Type *rt = tg_type_from_graph_rdi_key(scratch.arena, graph, rdi, r); + if (lt->count == rt->count && eval_type_match(graph, rdi, lt->direct_type_key, rt->direct_type_key)) { B32 params_match = 1; TG_Key *lp = lt->param_type_keys; @@ -452,7 +452,7 @@ eval_type_match(TG_Graph *graph, RDI_Parsed *rdbg, TG_Key l, TG_Key r){ U64 count = lt->count; for(U64 i = 0; i < count; i += 1, lp += 1, rp += 1) { - if(!eval_type_match(graph, rdbg, *lp, *rp)) + if(!eval_type_match(graph, rdi, *lp, *rp)) { params_match = 0; break; @@ -466,11 +466,11 @@ eval_type_match(TG_Graph *graph, RDI_Parsed *rdbg, TG_Key l, TG_Key r){ case TG_Kind_Method: { Temp scratch = scratch_begin(0, 0); - TG_Type *lt = tg_type_from_graph_rdi_key(scratch.arena, graph, rdbg, l); - TG_Type *rt = tg_type_from_graph_rdi_key(scratch.arena, graph, rdbg, r); + TG_Type *lt = tg_type_from_graph_rdi_key(scratch.arena, graph, rdi, l); + TG_Type *rt = tg_type_from_graph_rdi_key(scratch.arena, graph, rdi, r); if (lt->count == rt->count && - eval_type_match(graph, rdbg, lt->direct_type_key, rt->direct_type_key) && - eval_type_match(graph, rdbg, lt->owner_type_key, rt->owner_type_key)) + eval_type_match(graph, rdi, lt->direct_type_key, rt->direct_type_key) && + eval_type_match(graph, rdi, lt->owner_type_key, rt->owner_type_key)) { B32 params_match = 1; TG_Key *lp = lt->param_type_keys; @@ -478,7 +478,7 @@ eval_type_match(TG_Graph *graph, RDI_Parsed *rdbg, TG_Key l, TG_Key r){ U64 count = lt->count; for(U64 i = 0; i < count; i += 1, lp += 1, rp += 1) { - if(!eval_type_match(graph, rdbg, *lp, *rp)) + if(!eval_type_match(graph, rdi, *lp, *rp)) { params_match = 0; break; @@ -589,8 +589,8 @@ eval_irtree_bytecode_no_copy(Arena *arena, String8 bytecode){ //~ allen: EVAL IR-Tree High Level Helpers internal EVAL_IRTree* -eval_irtree_mem_read_type(Arena *arena, TG_Graph *graph, RDI_Parsed *rdbg, EVAL_IRTree *c, TG_Key type_key){ - U64 byte_size = tg_byte_size_from_graph_rdi_key(graph, rdbg, type_key); +eval_irtree_mem_read_type(Arena *arena, TG_Graph *graph, RDI_Parsed *rdi, EVAL_IRTree *c, TG_Key type_key){ + U64 byte_size = tg_byte_size_from_graph_rdi_key(graph, rdi, type_key); EVAL_IRTree *result = &eval_irtree_nil; if (0 < byte_size && byte_size <= 8){ // build the read node @@ -629,9 +629,9 @@ eval_irtree_convert_lo(Arena *arena, EVAL_IRTree *c, RDI_EvalTypeGroup out, RDI_ } internal EVAL_IRTree* -eval_irtree_trunc(Arena *arena, TG_Graph *graph, RDI_Parsed *rdbg, EVAL_IRTree *c, TG_Key type_key){ +eval_irtree_trunc(Arena *arena, TG_Graph *graph, RDI_Parsed *rdi, EVAL_IRTree *c, TG_Key type_key){ EVAL_IRTree *result = c; - U64 byte_size = tg_byte_size_from_graph_rdi_key(graph, rdbg, type_key); + U64 byte_size = tg_byte_size_from_graph_rdi_key(graph, rdi, type_key); if (byte_size < 64){ RDI_EvalOp op = RDI_EvalOp_Trunc; TG_Kind kind = tg_kind_from_key(type_key); @@ -648,7 +648,7 @@ eval_irtree_trunc(Arena *arena, TG_Graph *graph, RDI_Parsed *rdbg, EVAL_IRTree * } internal EVAL_IRTree* -eval_irtree_convert_hi(Arena *arena, TG_Graph *graph, RDI_Parsed *rdbg, EVAL_IRTree *c, TG_Key out, TG_Key in){ +eval_irtree_convert_hi(Arena *arena, TG_Graph *graph, RDI_Parsed *rdi, EVAL_IRTree *c, TG_Key out, TG_Key in){ EVAL_IRTree *result = c; TG_Kind in_kind = tg_kind_from_key(in); TG_Kind out_kind = tg_kind_from_key(out); @@ -659,24 +659,24 @@ eval_irtree_convert_hi(Arena *arena, TG_Graph *graph, RDI_Parsed *rdbg, EVAL_IRT { result = eval_irtree_convert_lo(arena, result, out_group, in_group); } - U64 in_byte_size = tg_byte_size_from_graph_rdi_key(graph, rdbg, in); - U64 out_byte_size = tg_byte_size_from_graph_rdi_key(graph, rdbg, out); + U64 in_byte_size = tg_byte_size_from_graph_rdi_key(graph, rdi, in); + U64 out_byte_size = tg_byte_size_from_graph_rdi_key(graph, rdi, out); if(out_byte_size < in_byte_size && eval_kind_is_integer(out_kind)) { - result = eval_irtree_trunc(arena, graph, rdbg, result, out); + result = eval_irtree_trunc(arena, graph, rdi, result, out); } return(result); } internal EVAL_IRTree* -eval_irtree_resolve_to_value(Arena *arena, TG_Graph *graph, RDI_Parsed *rdbg, EVAL_EvalMode from_mode, +eval_irtree_resolve_to_value(Arena *arena, TG_Graph *graph, RDI_Parsed *rdi, EVAL_EvalMode from_mode, EVAL_IRTree *tree, TG_Key type_key){ EVAL_IRTree *result = tree; switch (from_mode){ default:{}break; case EVAL_EvalMode_Addr: { - result = eval_irtree_mem_read_type(arena, graph, rdbg, tree, type_key); + result = eval_irtree_mem_read_type(arena, graph, rdi, tree, type_key); }break; case EVAL_EvalMode_Reg: { @@ -715,7 +715,7 @@ eval_push_leaf_ident_exprs_from_expr__in_place(Arena *arena, EVAL_String2ExprMap } internal TG_Key -eval_type_from_type_expr(Arena *arena, TG_Graph *graph, RDI_Parsed *rdbg, EVAL_Expr *expr, EVAL_ErrorList *eout){ +eval_type_from_type_expr(Arena *arena, TG_Graph *graph, RDI_Parsed *rdi, EVAL_Expr *expr, EVAL_ErrorList *eout){ TG_Key result = zero_struct; EVAL_ExprKind kind = expr->kind; @@ -732,14 +732,14 @@ eval_type_from_type_expr(Arena *arena, TG_Graph *graph, RDI_Parsed *rdbg, EVAL_E case EVAL_ExprKind_Ptr: { - TG_Key direct_type_key = eval_type_from_type_expr(arena, graph, rdbg, expr->children[0], eout); + TG_Key direct_type_key = eval_type_from_type_expr(arena, graph, rdi, expr->children[0], eout); result = tg_cons_type_make(graph, TG_Kind_Ptr, direct_type_key, 0); }break; case EVAL_ExprKind_Array: { EVAL_Expr *child_expr = expr->child_and_constant.child; - TG_Key direct_type_key = eval_type_from_type_expr(arena, graph, rdbg, child_expr, eout); + TG_Key direct_type_key = eval_type_from_type_expr(arena, graph, rdi, child_expr, eout); result = tg_cons_type_make(graph, TG_Kind_Array, direct_type_key, expr->child_and_constant.u64); }break; @@ -758,7 +758,7 @@ eval_type_from_type_expr(Arena *arena, TG_Graph *graph, RDI_Parsed *rdbg, EVAL_E } internal EVAL_IRTreeAndType -eval_irtree_and_type_from_expr(Arena *arena, TG_Graph *graph, RDI_Parsed *rdbg, EVAL_String2ExprMap *leaf_ident_expr_map, EVAL_Expr *expr, EVAL_ErrorList *eout) +eval_irtree_and_type_from_expr(Arena *arena, TG_Graph *graph, RDI_Parsed *rdi, EVAL_String2ExprMap *leaf_ident_expr_map, EVAL_Expr *expr, EVAL_ErrorList *eout) { ProfBeginFunction(); EVAL_IRTreeAndType result = {0}; @@ -777,12 +777,12 @@ eval_irtree_and_type_from_expr(Arena *arena, TG_Graph *graph, RDI_Parsed *rdbg, EVAL_Expr *exprl = expr->children[0]; EVAL_Expr *exprr = expr->children[1]; - EVAL_IRTreeAndType l = eval_irtree_and_type_from_expr(arena, graph, rdbg, leaf_ident_expr_map, exprl, eout); - EVAL_IRTreeAndType r = eval_irtree_and_type_from_expr(arena, graph, rdbg, leaf_ident_expr_map, exprr, eout); + EVAL_IRTreeAndType l = eval_irtree_and_type_from_expr(arena, graph, rdi, leaf_ident_expr_map, exprl, eout); + EVAL_IRTreeAndType r = eval_irtree_and_type_from_expr(arena, graph, rdi, leaf_ident_expr_map, exprr, eout); if (l.tree->op != 0 && r.tree->op != 0){ - TG_Key l_restype = tg_unwrapped_from_graph_rdi_key(graph, rdbg, l.type_key); - TG_Key r_restype = tg_unwrapped_from_graph_rdi_key(graph, rdbg, r.type_key); + TG_Key l_restype = tg_unwrapped_from_graph_rdi_key(graph, rdi, l.type_key); + TG_Key r_restype = tg_unwrapped_from_graph_rdi_key(graph, rdi, r.type_key); TG_Kind l_restype_kind = tg_kind_from_key(l_restype); TG_Kind r_restype_kind = tg_kind_from_key(r_restype); @@ -795,8 +795,8 @@ eval_irtree_and_type_from_expr(Arena *arena, TG_Graph *graph, RDI_Parsed *rdbg, eval_errorf(arena, eout, EVAL_ErrorKind_MalformedInput, exprr->location, "Cannot index with this type."); } else{ - direct_type = tg_unwrapped_direct_from_graph_rdi_key(graph, rdbg, l_restype); - direct_type_size = tg_byte_size_from_graph_rdi_key(graph, rdbg, direct_type); + direct_type = tg_unwrapped_direct_from_graph_rdi_key(graph, rdi, l_restype); + direct_type_size = tg_byte_size_from_graph_rdi_key(graph, rdi, direct_type); if (l_restype_kind == TG_Kind_Ptr){ if (direct_type_size == 0){ eval_errorf(arena, eout, EVAL_ErrorKind_MalformedInput, exprr->location, "Cannot index into pointers of zero-sized types."); @@ -829,7 +829,7 @@ eval_irtree_and_type_from_expr(Arena *arena, TG_Graph *graph, RDI_Parsed *rdbg, // generate ir tree if (can_generate){ // how to compute the index - EVAL_IRTree *index_tree = eval_irtree_resolve_to_value(arena, graph, rdbg, r.mode, r.tree, r_restype); + EVAL_IRTree *index_tree = eval_irtree_resolve_to_value(arena, graph, rdi, r.mode, r.tree, r_restype); if (direct_type_size > 1){ EVAL_IRTree *const_tree = eval_irtree_const_u(arena, direct_type_size); index_tree = eval_irtree_binary_op_u(arena, RDI_EvalOp_Mul, index_tree, const_tree); @@ -838,7 +838,7 @@ eval_irtree_and_type_from_expr(Arena *arena, TG_Graph *graph, RDI_Parsed *rdbg, // how to compute the base address EVAL_IRTree *base_tree = l.tree; if (l_resolve){ - base_tree = eval_irtree_resolve_to_value(arena, graph, rdbg, l.mode, base_tree, l_restype); + base_tree = eval_irtree_resolve_to_value(arena, graph, rdi, l.mode, base_tree, l_restype); } // how to compute the final address @@ -857,17 +857,17 @@ eval_irtree_and_type_from_expr(Arena *arena, TG_Graph *graph, RDI_Parsed *rdbg, EVAL_Expr *exprl = expr->children[0]; EVAL_Expr *exprr = expr->children[1]; - EVAL_IRTreeAndType l = eval_irtree_and_type_from_expr(arena, graph, rdbg, leaf_ident_expr_map, exprl, eout); + EVAL_IRTreeAndType l = eval_irtree_and_type_from_expr(arena, graph, rdi, leaf_ident_expr_map, exprl, eout); if (l.tree->op != 0 && !tg_key_match(tg_key_zero(), l.type_key)){ - TG_Key l_restype = tg_unwrapped_from_graph_rdi_key(graph, rdbg, l.type_key); + TG_Key l_restype = tg_unwrapped_from_graph_rdi_key(graph, rdi, l.type_key); TG_Kind l_restype_kind = tg_kind_from_key(l_restype); // determine which type to use TG_Key check_type_key = l_restype; TG_Kind check_type_kind = l_restype_kind; if (l_restype_kind == TG_Kind_Ptr || l_restype_kind == TG_Kind_LRef || l_restype_kind == TG_Kind_RRef){ - check_type_key = tg_unwrapped_direct_from_graph_rdi_key(graph, rdbg, l_restype); + check_type_key = tg_unwrapped_direct_from_graph_rdi_key(graph, rdi, l_restype); check_type_kind = tg_kind_from_key(check_type_key); } @@ -921,7 +921,7 @@ eval_irtree_and_type_from_expr(Arena *arena, TG_Graph *graph, RDI_Parsed *rdbg, if (l_good && r_good){ Temp scratch = scratch_begin(&arena, 1); - TG_MemberArray check_type_members = tg_data_members_from_graph_rdi_key(scratch.arena, graph, rdbg, check_type_key); + TG_MemberArray check_type_members = tg_data_members_from_graph_rdi_key(scratch.arena, graph, rdi, check_type_key); // lookup member String8 member_name = exprr->name; @@ -953,7 +953,7 @@ eval_irtree_and_type_from_expr(Arena *arena, TG_Graph *graph, RDI_Parsed *rdbg, if (can_generate){ EVAL_IRTree *new_tree = l.tree; if (l_resolve){ - new_tree = eval_irtree_resolve_to_value(arena, graph, rdbg, l.mode, new_tree, l_restype); + new_tree = eval_irtree_resolve_to_value(arena, graph, rdi, l.mode, new_tree, l_restype); } if (r_off != 0){ EVAL_IRTree *const_tree = eval_irtree_const_u(arena, r_off); @@ -975,13 +975,13 @@ eval_irtree_and_type_from_expr(Arena *arena, TG_Graph *graph, RDI_Parsed *rdbg, { EVAL_Expr *exprc = expr->children[0]; - EVAL_IRTreeAndType c = eval_irtree_and_type_from_expr(arena, graph, rdbg, leaf_ident_expr_map, exprc, eout); + EVAL_IRTreeAndType c = eval_irtree_and_type_from_expr(arena, graph, rdi, leaf_ident_expr_map, exprc, eout); if (c.tree->op != 0){ - TG_Key c_restype = tg_unwrapped_from_graph_rdi_key(graph, rdbg, c.type_key); + TG_Key c_restype = tg_unwrapped_from_graph_rdi_key(graph, rdi, c.type_key); TG_Kind c_restype_kind = tg_kind_from_key(c_restype); - TG_Key c_restype_direct = tg_unwrapped_direct_from_graph_rdi_key(graph, rdbg, c_restype); - U64 c_restype_direct_size = tg_byte_size_from_graph_rdi_key(graph, rdbg, c_restype_direct); + TG_Key c_restype_direct = tg_unwrapped_direct_from_graph_rdi_key(graph, rdi, c_restype); + U64 c_restype_direct_size = tg_byte_size_from_graph_rdi_key(graph, rdi, c_restype_direct); // analyze situation B32 can_generate = 0; @@ -1018,7 +1018,7 @@ eval_irtree_and_type_from_expr(Arena *arena, TG_Graph *graph, RDI_Parsed *rdbg, if (can_generate){ EVAL_IRTree *new_tree = c.tree; if (c_resolve){ - new_tree = eval_irtree_resolve_to_value(arena, graph, rdbg, c.mode, c.tree, c_restype); + new_tree = eval_irtree_resolve_to_value(arena, graph, rdi, c.mode, c.tree, c_restype); } // fill result @@ -1032,10 +1032,10 @@ eval_irtree_and_type_from_expr(Arena *arena, TG_Graph *graph, RDI_Parsed *rdbg, case EVAL_ExprKind_Address: { EVAL_Expr *exprc = expr->children[0]; - EVAL_IRTreeAndType c = eval_irtree_and_type_from_expr(arena, graph, rdbg, leaf_ident_expr_map, exprc, eout); + EVAL_IRTreeAndType c = eval_irtree_and_type_from_expr(arena, graph, rdi, leaf_ident_expr_map, exprc, eout); if(c.tree->op != 0 && !tg_key_match(c.type_key, tg_key_zero())) { - TG_Key c_restype = tg_unwrapped_from_graph_rdi_key(graph, rdbg, c.type_key); + TG_Key c_restype = tg_unwrapped_from_graph_rdi_key(graph, rdi, c.type_key); TG_Kind c_restype_kind = tg_kind_from_key(c_restype); // analyze situation @@ -1064,16 +1064,16 @@ eval_irtree_and_type_from_expr(Arena *arena, TG_Graph *graph, RDI_Parsed *rdbg, EVAL_Expr *exprl = expr->children[0]; EVAL_Expr *exprr = expr->children[1]; - TG_Key cast_type_key = eval_type_from_type_expr(arena, graph, rdbg, exprl, eout); + TG_Key cast_type_key = eval_type_from_type_expr(arena, graph, rdi, exprl, eout); TG_Kind cast_type_kind = tg_kind_from_key(cast_type_key); - EVAL_IRTreeAndType c = eval_irtree_and_type_from_expr(arena, graph, rdbg, leaf_ident_expr_map, exprr, eout); + EVAL_IRTreeAndType c = eval_irtree_and_type_from_expr(arena, graph, rdi, leaf_ident_expr_map, exprr, eout); if(cast_type_kind != TG_Kind_Null && c.tree->op != 0) { - TG_Key c_restype = tg_unwrapped_from_graph_rdi_key(graph, rdbg, c.type_key); + TG_Key c_restype = tg_unwrapped_from_graph_rdi_key(graph, rdi, c.type_key); TG_Kind c_restype_kind = tg_kind_from_key(c_restype); - U64 c_restype_byte_size = tg_byte_size_from_graph_rdi_key(graph, rdbg, c_restype); - U64 cast_type_byte_size = tg_byte_size_from_graph_rdi_key(graph, rdbg, cast_type_key); + U64 c_restype_byte_size = tg_byte_size_from_graph_rdi_key(graph, rdi, c_restype); + U64 cast_type_byte_size = tg_byte_size_from_graph_rdi_key(graph, rdi, cast_type_key); // analyze situation U8 in_group = eval_type_group_from_kind(c_restype_kind); @@ -1086,14 +1086,14 @@ eval_irtree_and_type_from_expr(Arena *arena, TG_Graph *graph, RDI_Parsed *rdbg, case RDI_EvalConversionKind_Noop: case RDI_EvalConversionKind_Legal: { - EVAL_IRTree *in_tree = eval_irtree_resolve_to_value(arena, graph, rdbg, c.mode, c.tree, c_restype); + EVAL_IRTree *in_tree = eval_irtree_resolve_to_value(arena, graph, rdi, c.mode, c.tree, c_restype); EVAL_IRTree *new_tree = in_tree; if (conversion_rule == RDI_EvalConversionKind_Legal){ new_tree = eval_irtree_convert_lo(arena, in_tree, out_group, in_group); } if (cast_type_byte_size < c_restype_byte_size && eval_kind_is_integer(cast_type_kind)){ - new_tree = eval_irtree_trunc(arena, graph, rdbg, in_tree, cast_type_key); + new_tree = eval_irtree_trunc(arena, graph, rdi, in_tree, cast_type_key); } result.tree = new_tree; @@ -1126,13 +1126,13 @@ eval_irtree_and_type_from_expr(Arena *arena, TG_Graph *graph, RDI_Parsed *rdbg, case EVAL_ExprKind_Array: case EVAL_ExprKind_Func: { - type_key = eval_type_from_type_expr(arena, graph, rdbg, exprc, eout); + type_key = eval_type_from_type_expr(arena, graph, rdi, exprc, eout); }break; // size of value expression default: { - EVAL_IRTreeAndType c = eval_irtree_and_type_from_expr(arena, graph, rdbg, leaf_ident_expr_map, exprc, eout); + EVAL_IRTreeAndType c = eval_irtree_and_type_from_expr(arena, graph, rdi, leaf_ident_expr_map, exprc, eout); type_key = c.type_key; }break; } @@ -1141,7 +1141,7 @@ eval_irtree_and_type_from_expr(Arena *arena, TG_Graph *graph, RDI_Parsed *rdbg, TG_Kind type_kind = tg_kind_from_key(type_key); if (type_kind != TG_Kind_Null){ can_generate = 1; - size = tg_byte_size_from_graph_rdi_key(graph, rdbg, type_key); + size = tg_byte_size_from_graph_rdi_key(graph, rdi, type_key); } // generate ir tree @@ -1160,10 +1160,10 @@ eval_irtree_and_type_from_expr(Arena *arena, TG_Graph *graph, RDI_Parsed *rdbg, { EVAL_Expr *exprc = expr->children[0]; - EVAL_IRTreeAndType c = eval_irtree_and_type_from_expr(arena, graph, rdbg, leaf_ident_expr_map, exprc, eout); + EVAL_IRTreeAndType c = eval_irtree_and_type_from_expr(arena, graph, rdi, leaf_ident_expr_map, exprc, eout); if (c.tree->op != 0){ - TG_Key c_restype = tg_unwrapped_from_graph_rdi_key(graph, rdbg, c.type_key); - TG_Key p_type = eval_type_promote(graph, rdbg, c_restype); + TG_Key c_restype = tg_unwrapped_from_graph_rdi_key(graph, rdi, c.type_key); + TG_Key p_type = eval_type_promote(graph, rdi, c_restype); TG_Kind c_restype_kind = tg_kind_from_key(c_restype); // analyze situation @@ -1179,8 +1179,8 @@ eval_irtree_and_type_from_expr(Arena *arena, TG_Graph *graph, RDI_Parsed *rdbg, // generate ir tree if (can_generate){ - EVAL_IRTree *in_tree = eval_irtree_resolve_to_value(arena, graph, rdbg, c.mode, c.tree, c_restype); - in_tree = eval_irtree_convert_hi(arena, graph, rdbg, in_tree, p_type, c_restype); + EVAL_IRTree *in_tree = eval_irtree_resolve_to_value(arena, graph, rdi, c.mode, c.tree, c_restype); + in_tree = eval_irtree_convert_hi(arena, graph, rdi, in_tree, p_type, c_restype); EVAL_IRTree *new_tree = eval_irtree_unary_op(arena, op, c_group, in_tree); @@ -1214,12 +1214,12 @@ eval_irtree_and_type_from_expr(Arena *arena, TG_Graph *graph, RDI_Parsed *rdbg, EVAL_Expr *exprl = expr->children[0]; EVAL_Expr *exprr = expr->children[1]; - EVAL_IRTreeAndType l = eval_irtree_and_type_from_expr(arena, graph, rdbg, leaf_ident_expr_map, exprl, eout); - EVAL_IRTreeAndType r = eval_irtree_and_type_from_expr(arena, graph, rdbg, leaf_ident_expr_map, exprr, eout); + EVAL_IRTreeAndType l = eval_irtree_and_type_from_expr(arena, graph, rdi, leaf_ident_expr_map, exprl, eout); + EVAL_IRTreeAndType r = eval_irtree_and_type_from_expr(arena, graph, rdi, leaf_ident_expr_map, exprr, eout); if (l.tree->op != 0 && r.tree->op != 0){ - TG_Key l_restype = tg_unwrapped_from_graph_rdi_key(graph, rdbg, l.type_key); - TG_Key r_restype = tg_unwrapped_from_graph_rdi_key(graph, rdbg, r.type_key); + TG_Key l_restype = tg_unwrapped_from_graph_rdi_key(graph, rdi, l.type_key); + TG_Key r_restype = tg_unwrapped_from_graph_rdi_key(graph, rdi, r.type_key); TG_Kind l_restype_kind = tg_kind_from_key(l_restype); TG_Kind r_restype_kind = tg_kind_from_key(r_restype); @@ -1267,10 +1267,10 @@ eval_irtree_and_type_from_expr(Arena *arena, TG_Graph *graph, RDI_Parsed *rdbg, arith_path = EVAL_ArithPath_PtrAdd; } if (l_is_pointer_like && r_is_pointer_like){ - TG_Key l_restype_direct = tg_unwrapped_direct_from_graph_rdi_key(graph, rdbg, l_restype); - TG_Key r_restype_direct = tg_unwrapped_direct_from_graph_rdi_key(graph, rdbg, r_restype); - U64 l_restype_direct_byte_size = tg_byte_size_from_graph_rdi_key(graph, rdbg, l_restype_direct); - U64 r_restype_direct_byte_size = tg_byte_size_from_graph_rdi_key(graph, rdbg, r_restype_direct); + TG_Key l_restype_direct = tg_unwrapped_direct_from_graph_rdi_key(graph, rdi, l_restype); + TG_Key r_restype_direct = tg_unwrapped_direct_from_graph_rdi_key(graph, rdi, r_restype); + U64 l_restype_direct_byte_size = tg_byte_size_from_graph_rdi_key(graph, rdi, l_restype_direct); + U64 r_restype_direct_byte_size = tg_byte_size_from_graph_rdi_key(graph, rdi, r_restype_direct); if (l_restype_direct_byte_size == r_restype_direct_byte_size){ arith_path = EVAL_ArithPath_PtrSub; } @@ -1289,9 +1289,9 @@ eval_irtree_and_type_from_expr(Arena *arena, TG_Graph *graph, RDI_Parsed *rdbg, TG_Key cv_type_key = zero_struct; if (both_basic){ - cv_type_key = eval_type_coerce(graph, rdbg, l_restype, r_restype); + cv_type_key = eval_type_coerce(graph, rdi, l_restype, r_restype); } - else if (is_comparison && eval_type_match(graph, rdbg, l_restype, r_restype)){ + else if (is_comparison && eval_type_match(graph, rdi, l_restype, r_restype)){ cv_type_key = l_restype; } @@ -1313,11 +1313,11 @@ eval_irtree_and_type_from_expr(Arena *arena, TG_Graph *graph, RDI_Parsed *rdbg, final_type_key = tg_key_basic(TG_Kind_Bool); } - EVAL_IRTree *l_tree = eval_irtree_resolve_to_value(arena, graph, rdbg, l.mode, l.tree, l_restype); - l_tree = eval_irtree_convert_hi(arena, graph, rdbg, l_tree, cv_type_key, l_restype); + EVAL_IRTree *l_tree = eval_irtree_resolve_to_value(arena, graph, rdi, l.mode, l.tree, l_restype); + l_tree = eval_irtree_convert_hi(arena, graph, rdi, l_tree, cv_type_key, l_restype); - EVAL_IRTree *r_tree = eval_irtree_resolve_to_value(arena, graph, rdbg, r.mode, r.tree, r_restype); - r_tree = eval_irtree_convert_hi(arena, graph, rdbg, r_tree, cv_type_key, r_restype); + EVAL_IRTree *r_tree = eval_irtree_resolve_to_value(arena, graph, rdi, r.mode, r.tree, r_restype); + r_tree = eval_irtree_convert_hi(arena, graph, rdi, r_tree, cv_type_key, r_restype); EVAL_IRTree *new_tree = eval_irtree_binary_op(arena, op, cv_group, l_tree, r_tree); @@ -1339,16 +1339,16 @@ eval_irtree_and_type_from_expr(Arena *arena, TG_Graph *graph, RDI_Parsed *rdbg, ptr_is_decay = r_is_decay; } - TG_Key direct = tg_unwrapped_direct_from_graph_rdi_key(graph, rdbg, ptr->type_key); - U64 direct_type_size = tg_byte_size_from_graph_rdi_key(graph, rdbg, direct); + TG_Key direct = tg_unwrapped_direct_from_graph_rdi_key(graph, rdi, ptr->type_key); + U64 direct_type_size = tg_byte_size_from_graph_rdi_key(graph, rdi, direct); // generate ir tree EVAL_IRTree *ptr_tree = ptr->tree; if (!ptr_is_decay){ - ptr_tree = eval_irtree_resolve_to_value(arena, graph, rdbg, ptr->mode, ptr_tree, ptr->type_key); + ptr_tree = eval_irtree_resolve_to_value(arena, graph, rdi, ptr->mode, ptr_tree, ptr->type_key); } - EVAL_IRTree *integer_tree = eval_irtree_resolve_to_value(arena, graph, rdbg, integer->mode, integer->tree, integer->type_key); + EVAL_IRTree *integer_tree = eval_irtree_resolve_to_value(arena, graph, rdi, integer->mode, integer->tree, integer->type_key); if (direct_type_size > 1){ EVAL_IRTree *const_tree = eval_irtree_const_u(arena, direct_type_size); integer_tree = eval_irtree_binary_op_u(arena, RDI_EvalOp_Mul, integer_tree, const_tree); @@ -1368,18 +1368,18 @@ eval_irtree_and_type_from_expr(Arena *arena, TG_Graph *graph, RDI_Parsed *rdbg, case EVAL_ArithPath_PtrSub: { - TG_Key direct = tg_unwrapped_direct_from_graph_rdi_key(graph, rdbg, l_restype); - U64 direct_type_size = tg_byte_size_from_graph_rdi_key(graph, rdbg, direct); + TG_Key direct = tg_unwrapped_direct_from_graph_rdi_key(graph, rdi, l_restype); + U64 direct_type_size = tg_byte_size_from_graph_rdi_key(graph, rdi, direct); // generate ir tree EVAL_IRTree *l_tree = l.tree; if (!l_is_decay){ - l_tree = eval_irtree_resolve_to_value(arena, graph, rdbg, l.mode, l.tree, l_restype); + l_tree = eval_irtree_resolve_to_value(arena, graph, rdi, l.mode, l.tree, l_restype); } EVAL_IRTree *r_tree = r.tree; if (!r_is_decay){ - r_tree = eval_irtree_resolve_to_value(arena, graph, rdbg, r.mode, r.tree, r_restype); + r_tree = eval_irtree_resolve_to_value(arena, graph, rdi, r.mode, r.tree, r_restype); } EVAL_IRTree *op_tree = eval_irtree_binary_op(arena, op, RDI_EvalTypeGroup_U, l_tree, r_tree); @@ -1404,15 +1404,15 @@ eval_irtree_and_type_from_expr(Arena *arena, TG_Graph *graph, RDI_Parsed *rdbg, EVAL_Expr *exprl = expr->children[1]; EVAL_Expr *exprr = expr->children[2]; - EVAL_IRTreeAndType c = eval_irtree_and_type_from_expr(arena, graph, rdbg, leaf_ident_expr_map, exprc, eout); - EVAL_IRTreeAndType l = eval_irtree_and_type_from_expr(arena, graph, rdbg, leaf_ident_expr_map, exprl, eout); - EVAL_IRTreeAndType r = eval_irtree_and_type_from_expr(arena, graph, rdbg, leaf_ident_expr_map, exprr, eout); + EVAL_IRTreeAndType c = eval_irtree_and_type_from_expr(arena, graph, rdi, leaf_ident_expr_map, exprc, eout); + EVAL_IRTreeAndType l = eval_irtree_and_type_from_expr(arena, graph, rdi, leaf_ident_expr_map, exprl, eout); + EVAL_IRTreeAndType r = eval_irtree_and_type_from_expr(arena, graph, rdi, leaf_ident_expr_map, exprr, eout); if (l.tree->op != 0 && r.tree->op != 0 && c.tree->op != 0){ - TG_Key c_restype = tg_unwrapped_from_graph_rdi_key(graph, rdbg, c.type_key); - TG_Key l_restype = tg_unwrapped_from_graph_rdi_key(graph, rdbg, l.type_key); - TG_Key r_restype = tg_unwrapped_from_graph_rdi_key(graph, rdbg, r.type_key); + TG_Key c_restype = tg_unwrapped_from_graph_rdi_key(graph, rdi, c.type_key); + TG_Key l_restype = tg_unwrapped_from_graph_rdi_key(graph, rdi, l.type_key); + TG_Key r_restype = tg_unwrapped_from_graph_rdi_key(graph, rdi, r.type_key); TG_Kind c_restype_kind = tg_kind_from_key(c_restype); TG_Kind l_restype_kind = tg_kind_from_key(l_restype); TG_Kind r_restype_kind = tg_kind_from_key(r_restype); @@ -1427,10 +1427,10 @@ eval_irtree_and_type_from_expr(Arena *arena, TG_Graph *graph, RDI_Parsed *rdbg, if (eval_kind_is_basic_or_enum(l_restype_kind) && eval_kind_is_basic_or_enum(r_restype_kind)){ can_generate = 1; - final_type = eval_type_coerce(graph, rdbg, l_restype, r_restype); + final_type = eval_type_coerce(graph, rdi, l_restype, r_restype); } else{ - if (eval_type_match(graph, rdbg, l_restype, r_restype)){ + if (eval_type_match(graph, rdi, l_restype, r_restype)){ if (l_restype_kind == TG_Kind_Ptr){ can_generate = 1; final_type = l_restype; @@ -1447,13 +1447,13 @@ eval_irtree_and_type_from_expr(Arena *arena, TG_Graph *graph, RDI_Parsed *rdbg, // generate ir tree if (can_generate){ - EVAL_IRTree *c_tree = eval_irtree_resolve_to_value(arena, graph, rdbg, c.mode, c.tree, c_restype); + EVAL_IRTree *c_tree = eval_irtree_resolve_to_value(arena, graph, rdi, c.mode, c.tree, c_restype); - EVAL_IRTree *l_tree = eval_irtree_resolve_to_value(arena, graph, rdbg, l.mode, l.tree, l_restype); - l_tree = eval_irtree_convert_hi(arena, graph, rdbg, l_tree, final_type, l_restype); + EVAL_IRTree *l_tree = eval_irtree_resolve_to_value(arena, graph, rdi, l.mode, l.tree, l_restype); + l_tree = eval_irtree_convert_hi(arena, graph, rdi, l_tree, final_type, l_restype); - EVAL_IRTree *r_tree = eval_irtree_resolve_to_value(arena, graph, rdbg, r.mode, r.tree, r_restype); - r_tree = eval_irtree_convert_hi(arena, graph, rdbg, r_tree, final_type, r_restype); + EVAL_IRTree *r_tree = eval_irtree_resolve_to_value(arena, graph, rdi, r.mode, r.tree, r_restype); + r_tree = eval_irtree_convert_hi(arena, graph, rdi, r_tree, final_type, r_restype); EVAL_IRTree *new_tree = eval_irtree_conditional(arena, c_tree, l_tree, r_tree); @@ -1540,7 +1540,7 @@ eval_irtree_and_type_from_expr(Arena *arena, TG_Graph *graph, RDI_Parsed *rdbg, { eval_errorf(arena, eout, EVAL_ErrorKind_MalformedInput, expr->location, "Left side of assignment must be an identifier."); } - result = eval_irtree_and_type_from_expr(arena, graph, rdbg, leaf_ident_expr_map, expr->children[1], eout); + result = eval_irtree_and_type_from_expr(arena, graph, rdi, leaf_ident_expr_map, expr->children[1], eout); }break; case EVAL_ExprKind_LeafIdent: { @@ -1553,7 +1553,7 @@ eval_irtree_and_type_from_expr(Arena *arena, TG_Graph *graph, RDI_Parsed *rdbg, else { eval_string2expr_map_inc_poison(leaf_ident_expr_map, name); - result = eval_irtree_and_type_from_expr(arena, graph, rdbg, leaf_ident_expr_map, leaf_ident_expr, eout); + result = eval_irtree_and_type_from_expr(arena, graph, rdi, leaf_ident_expr_map, leaf_ident_expr, eout); eval_string2expr_map_dec_poison(leaf_ident_expr_map, name); } }break; diff --git a/src/eval/eval_compiler.h b/src/eval/eval_compiler.h index 910bbc07..4f44ee55 100644 --- a/src/eval/eval_compiler.h +++ b/src/eval/eval_compiler.h @@ -42,11 +42,11 @@ internal EVAL_Expr* eval_expr_leaf_type(Arena *arena, void *location, TG_Key typ internal RDI_EvalTypeGroup eval_type_group_from_kind(TG_Kind kind); -internal TG_Key eval_type_unwrap_enum(TG_Graph *graph, RDI_Parsed *rdbg, TG_Key key); -internal TG_Key eval_type_promote(TG_Graph *graph, RDI_Parsed *rdbg, TG_Key key); -internal TG_Key eval_type_coerce(TG_Graph *graph, RDI_Parsed *rdbg, TG_Key l, TG_Key r); +internal TG_Key eval_type_unwrap_enum(TG_Graph *graph, RDI_Parsed *rdi, TG_Key key); +internal TG_Key eval_type_promote(TG_Graph *graph, RDI_Parsed *rdi, TG_Key key); +internal TG_Key eval_type_coerce(TG_Graph *graph, RDI_Parsed *rdi, TG_Key l, TG_Key r); -internal B32 eval_type_match(TG_Graph *graph, RDI_Parsed *rdbg, TG_Key l, TG_Key r); +internal B32 eval_type_match(TG_Graph *graph, RDI_Parsed *rdi, TG_Key l, TG_Key r); internal B32 eval_kind_is_integer(TG_Kind kind); internal B32 eval_kind_is_signed(TG_Kind kind); @@ -65,18 +65,18 @@ internal EVAL_IRTree* eval_irtree_bytecode_no_copy(Arena *arena, String8 bytecod //////////////////////////////// //~ allen: EVAL IR-Tree High Level Helpers -internal EVAL_IRTree* eval_irtree_mem_read_type(Arena *arena, TG_Graph *graph, RDI_Parsed *rdbg, EVAL_IRTree *c, TG_Key type_key); +internal EVAL_IRTree* eval_irtree_mem_read_type(Arena *arena, TG_Graph *graph, RDI_Parsed *rdi, EVAL_IRTree *c, TG_Key type_key); internal EVAL_IRTree* eval_irtree_convert_lo(Arena *arena, EVAL_IRTree *c, RDI_EvalTypeGroup out, RDI_EvalTypeGroup in); -internal EVAL_IRTree* eval_irtree_trunc(Arena *arena, TG_Graph *graph, RDI_Parsed *rdbg, EVAL_IRTree *c, TG_Key type_key); -internal EVAL_IRTree* eval_irtree_convert_hi(Arena *arena, TG_Graph *graph, RDI_Parsed *rdbg, EVAL_IRTree *c, TG_Key out, TG_Key in); -internal EVAL_IRTree* eval_irtree_resolve_to_value(Arena *arena, TG_Graph *graph, RDI_Parsed *rdbg, EVAL_EvalMode from_mode, EVAL_IRTree *tree, TG_Key type_key); +internal EVAL_IRTree* eval_irtree_trunc(Arena *arena, TG_Graph *graph, RDI_Parsed *rdi, EVAL_IRTree *c, TG_Key type_key); +internal EVAL_IRTree* eval_irtree_convert_hi(Arena *arena, TG_Graph *graph, RDI_Parsed *rdi, EVAL_IRTree *c, TG_Key out, TG_Key in); +internal EVAL_IRTree* eval_irtree_resolve_to_value(Arena *arena, TG_Graph *graph, RDI_Parsed *rdi, EVAL_EvalMode from_mode, EVAL_IRTree *tree, TG_Key type_key); //////////////////////////////// //~ allen: EVAL Compiler Phases internal void eval_push_leaf_ident_exprs_from_expr__in_place(Arena *arena, EVAL_String2ExprMap *map, EVAL_Expr *expr, EVAL_ErrorList *eout); -internal TG_Key eval_type_from_type_expr(Arena *arena, TG_Graph *graph, RDI_Parsed *rdbg, EVAL_Expr *expr, EVAL_ErrorList *eout); -internal EVAL_IRTreeAndType eval_irtree_and_type_from_expr(Arena *arena, TG_Graph *graph, RDI_Parsed *rdbg, EVAL_String2ExprMap *leaf_ident_expr_map, EVAL_Expr *expr, EVAL_ErrorList *eout); +internal TG_Key eval_type_from_type_expr(Arena *arena, TG_Graph *graph, RDI_Parsed *rdi, EVAL_Expr *expr, EVAL_ErrorList *eout); +internal EVAL_IRTreeAndType eval_irtree_and_type_from_expr(Arena *arena, TG_Graph *graph, RDI_Parsed *rdi, EVAL_String2ExprMap *leaf_ident_expr_map, EVAL_Expr *expr, EVAL_ErrorList *eout); internal void eval_oplist_from_irtree(Arena *arena, EVAL_IRTree *tree, EVAL_OpList *out); #endif //EVAL_COMPILER_H diff --git a/src/eval/eval_parser.c b/src/eval/eval_parser.c index a832bca4..8d5ec73e 100644 --- a/src/eval/eval_parser.c +++ b/src/eval/eval_parser.c @@ -57,7 +57,7 @@ global read_only S64 eval_g_max_precedence = 15; //~ rjf: Map Building Fast Paths internal EVAL_String2NumMap * -eval_push_locals_map_from_rdi_voff(Arena *arena, RDI_Parsed *rdbg, U64 voff) +eval_push_locals_map_from_rdi_voff(Arena *arena, RDI_Parsed *rdi, U64 voff) { Temp scratch = scratch_begin(&arena, 1); @@ -73,10 +73,10 @@ eval_push_locals_map_from_rdi_voff(Arena *arena, RDI_Parsed *rdbg, U64 voff) //- rjf: voff -> tightest scope RDI_Scope *tightest_scope = 0; - if(rdbg->scope_vmap != 0 && rdbg->scopes != 0) + if(rdi->scope_vmap != 0 && rdi->scopes != 0) { - U64 scope_idx = rdi_vmap_idx_from_voff(rdbg->scope_vmap, rdbg->scope_vmap_count, voff); - RDI_Scope *scope = &rdbg->scopes[scope_idx]; + U64 scope_idx = rdi_vmap_idx_from_voff(rdi->scope_vmap, rdi->scope_vmap_count, voff); + RDI_Scope *scope = &rdi->scopes[scope_idx]; Task *task = push_array(scratch.arena, Task, 1); task->scope = scope; SLLQueuePush(first_task, last_task, task); @@ -84,10 +84,10 @@ eval_push_locals_map_from_rdi_voff(Arena *arena, RDI_Parsed *rdbg, U64 voff) } //- rjf: voff-1 -> scope - if(voff > 0 && rdbg->scope_vmap != 0 && rdbg->scopes != 0) + if(voff > 0 && rdi->scope_vmap != 0 && rdi->scopes != 0) { - U64 scope_idx = rdi_vmap_idx_from_voff(rdbg->scope_vmap, rdbg->scope_vmap_count, voff-1); - RDI_Scope *scope = &rdbg->scopes[scope_idx]; + U64 scope_idx = rdi_vmap_idx_from_voff(rdi->scope_vmap, rdi->scope_vmap_count, voff-1); + RDI_Scope *scope = &rdi->scopes[scope_idx]; if(scope != tightest_scope) { Task *task = push_array(scratch.arena, Task, 1); @@ -99,9 +99,9 @@ eval_push_locals_map_from_rdi_voff(Arena *arena, RDI_Parsed *rdbg, U64 voff) //- rjf: tightest scope -> walk up the tree & build tasks for each parent scope if(tightest_scope != 0) { - for(RDI_Scope *scope = &rdbg->scopes[tightest_scope->parent_scope_idx]; - scope != 0 && scope != &rdbg->scopes[0]; - scope = &rdbg->scopes[scope->parent_scope_idx]) + for(RDI_Scope *scope = &rdi->scopes[tightest_scope->parent_scope_idx]; + scope != 0 && scope != &rdi->scopes[0]; + scope = &rdi->scopes[scope->parent_scope_idx]) { Task *task = push_array(scratch.arena, Task, 1); task->scope = scope; @@ -122,9 +122,9 @@ eval_push_locals_map_from_rdi_voff(Arena *arena, RDI_Parsed *rdbg, U64 voff) U32 local_opl_idx = scope->local_first + scope->local_count; for(U32 local_idx = scope->local_first; local_idx < local_opl_idx; local_idx += 1) { - RDI_Local *local_var = &rdbg->locals[local_idx]; + RDI_Local *local_var = &rdi->locals[local_idx]; U64 local_name_size = 0; - U8 *local_name_str = rdi_string_from_idx(rdbg, local_var->name_string_idx, &local_name_size); + U8 *local_name_str = rdi_string_from_idx(rdi, local_var->name_string_idx, &local_name_size); String8 name = push_str8_copy(arena, str8(local_name_str, local_name_size)); eval_string2num_map_insert(arena, map, name, (U64)local_idx+1); } @@ -136,35 +136,35 @@ eval_push_locals_map_from_rdi_voff(Arena *arena, RDI_Parsed *rdbg, U64 voff) } internal EVAL_String2NumMap * -eval_push_member_map_from_rdi_voff(Arena *arena, RDI_Parsed *rdbg, U64 voff) +eval_push_member_map_from_rdi_voff(Arena *arena, RDI_Parsed *rdi, U64 voff) { //- rjf: voff -> tightest scope RDI_Scope *tightest_scope = 0; - if(rdbg->scope_vmap != 0 && rdbg->scopes != 0) + if(rdi->scope_vmap != 0 && rdi->scopes != 0) { - U64 scope_idx = rdi_vmap_idx_from_voff(rdbg->scope_vmap, rdbg->scope_vmap_count, voff); - tightest_scope = &rdbg->scopes[scope_idx]; + U64 scope_idx = rdi_vmap_idx_from_voff(rdi->scope_vmap, rdi->scope_vmap_count, voff); + tightest_scope = &rdi->scopes[scope_idx]; } //- rjf: tightest scope -> procedure RDI_Procedure *procedure = 0; - if(tightest_scope != 0 && rdbg->procedures != 0) + if(tightest_scope != 0 && rdi->procedures != 0) { U32 proc_idx = tightest_scope->proc_idx; - if(0 < proc_idx && proc_idx < rdbg->procedures_count) + if(0 < proc_idx && proc_idx < rdi->procedures_count) { - procedure = &rdbg->procedures[proc_idx]; + procedure = &rdi->procedures[proc_idx]; } } //- rjf: procedure -> udt RDI_UDT *udt = 0; - if(procedure != 0 && rdbg->udts != 0 && procedure->link_flags & RDI_LinkFlag_TypeScoped) + if(procedure != 0 && rdi->udts != 0 && procedure->link_flags & RDI_LinkFlag_TypeScoped) { U32 udt_idx = procedure->container_idx; - if(0 < udt_idx && udt_idx < rdbg->udts_count) + if(0 < udt_idx && udt_idx < rdi->udts_count) { - udt = &rdbg->udts[udt_idx]; + udt = &rdi->udts[udt_idx]; } } @@ -173,22 +173,22 @@ eval_push_member_map_from_rdi_voff(Arena *arena, RDI_Parsed *rdbg, U64 voff) *map = eval_string2num_map_make(arena, 64); //- rjf: udt -> fill member map - if(udt != 0 && !(udt->flags & RDI_UserDefinedTypeFlag_EnumMembers) && rdbg->members != 0) + if(udt != 0 && !(udt->flags & RDI_UserDefinedTypeFlag_EnumMembers) && rdi->members != 0) { U64 data_member_num = 1; for(U32 member_idx = udt->member_first; member_idx < udt->member_first+udt->member_count; member_idx += 1) { - if(member_idx < 1 || rdbg->members_count <= member_idx) + if(member_idx < 1 || rdi->members_count <= member_idx) { break; } - RDI_Member *m = &rdbg->members[member_idx]; + RDI_Member *m = &rdi->members[member_idx]; if(m->kind == RDI_MemberKind_DataField) { String8 name = {0}; - name.str = rdi_string_from_idx(rdbg, m->name_string_idx, &name.size); + name.str = rdi_string_from_idx(rdi, m->name_string_idx, &name.size); eval_string2num_map_insert(arena, map, name, data_member_num); data_member_num += 1; } @@ -464,23 +464,23 @@ eval_token_array_make_first_opl(EVAL_Token *first, EVAL_Token *opl) //~ rjf: Parser Functions internal TG_Key -eval_leaf_type_from_name(RDI_Parsed *rdbg, String8 name) +eval_leaf_type_from_name(RDI_Parsed *rdi, String8 name) { TG_Key key = zero_struct; B32 found = 0; - if(rdbg->type_nodes != 0) + if(rdi->type_nodes != 0) { - RDI_NameMap *name_map = rdi_name_map_from_kind(rdbg, RDI_NameMapKind_Types); + RDI_NameMap *name_map = rdi_name_map_from_kind(rdi, RDI_NameMapKind_Types); RDI_ParsedNameMap parsed_name_map = {0}; - rdi_name_map_parse(rdbg, name_map, &parsed_name_map); - RDI_NameMapNode *node = rdi_name_map_lookup(rdbg, &parsed_name_map, name.str, name.size); + rdi_name_map_parse(rdi, name_map, &parsed_name_map); + RDI_NameMapNode *node = rdi_name_map_lookup(rdi, &parsed_name_map, name.str, name.size); if(node != 0) { U32 match_count = 0; - U32 *matches = rdi_matches_from_map_node(rdbg, node, &match_count); + U32 *matches = rdi_matches_from_map_node(rdi, node, &match_count); if(match_count != 0) { - RDI_TypeNode *type_node = rdi_element_from_idx(rdbg, type_nodes, matches[0]); + RDI_TypeNode *type_node = rdi_element_from_idx(rdi, type_nodes, matches[0]); found = type_node->kind != RDI_TypeKind_NULL; key = tg_key_ext(tg_kind_from_rdi_type_kind(type_node->kind), (U64)matches[0]); } @@ -569,7 +569,7 @@ eval_parse_type_from_text_tokens(Arena *arena, EVAL_ParseCtx *ctx, String8 text, if(token.kind == EVAL_TokenKind_Identifier) { String8 token_string = str8_substr(text, token.range); - TG_Key type_key = eval_leaf_type_from_name(ctx->rdbg, token_string); + TG_Key type_key = eval_leaf_type_from_name(ctx->rdi, token_string); if(!tg_key_match(tg_key_zero(), type_key)) { token_it += 1; @@ -680,7 +680,7 @@ eval_parse_expr_from_text_tokens__prec(Arena *arena, EVAL_ParseCtx *ctx, String8 String8 some_type_identifier_maybe_string = str8_substr(text, some_type_identifier_maybe.range); if(some_type_identifier_maybe.kind == EVAL_TokenKind_Identifier) { - TG_Key type_key = eval_leaf_type_from_name(ctx->rdbg, some_type_identifier_maybe_string); + TG_Key type_key = eval_leaf_type_from_name(ctx->rdi, some_type_identifier_maybe_string); if(!tg_key_match(type_key, tg_key_zero()) || str8_match(some_type_identifier_maybe_string, str8_lit("unsigned"), 0)) { // rjf: move past open paren @@ -798,14 +798,14 @@ eval_parse_expr_from_text_tokens__prec(Arena *arena, EVAL_ParseCtx *ctx, String8 //- rjf: form namespaceified fallback versions of this lookup string String8List namespaceified_token_strings = {0}; - if(ctx->rdbg->procedures != 0 && ctx->rdbg->scopes != 0 && ctx->rdbg->scope_vmap != 0) + if(ctx->rdi->procedures != 0 && ctx->rdi->scopes != 0 && ctx->rdi->scope_vmap != 0) { - U64 scope_idx = rdi_vmap_idx_from_voff(ctx->rdbg->scope_vmap, ctx->rdbg->scope_vmap_count, ctx->ip_voff); - RDI_Scope *scope = &ctx->rdbg->scopes[scope_idx]; + U64 scope_idx = rdi_vmap_idx_from_voff(ctx->rdi->scope_vmap, ctx->rdi->scope_vmap_count, ctx->ip_voff); + RDI_Scope *scope = &ctx->rdi->scopes[scope_idx]; U64 proc_idx = scope->proc_idx; - RDI_Procedure *procedure = &ctx->rdbg->procedures[proc_idx]; + RDI_Procedure *procedure = &ctx->rdi->procedures[proc_idx]; U64 name_size = 0; - U8 *name_ptr = rdi_string_from_idx(ctx->rdbg, procedure->name_string_idx, &name_size); + U8 *name_ptr = rdi_string_from_idx(ctx->rdi, procedure->name_string_idx, &name_size); String8 containing_procedure_name = str8(name_ptr, name_size); U64 last_past_scope_resolution_pos = 0; for(;;) @@ -843,8 +843,8 @@ eval_parse_expr_from_text_tokens__prec(Arena *arena, EVAL_ParseCtx *ctx, String8 { mapped_identifier = 1; identifier_type_is_possibly_dynamically_overridden = 1; - RDI_Local *local_var = rdi_element_from_idx(ctx->rdbg, locals, local_num-1); - RDI_TypeNode *type_node = rdi_element_from_idx(ctx->rdbg, type_nodes, local_var->type_idx); + RDI_Local *local_var = rdi_element_from_idx(ctx->rdi, locals, local_num-1); + RDI_TypeNode *type_node = rdi_element_from_idx(ctx->rdi, type_nodes, local_var->type_idx); type_key = tg_key_ext(tg_kind_from_rdi_type_kind(type_node->kind), (U64)local_var->type_idx); // rjf: grab location info @@ -852,19 +852,19 @@ eval_parse_expr_from_text_tokens__prec(Arena *arena, EVAL_ParseCtx *ctx, String8 loc_block_idx < local_var->location_opl; loc_block_idx += 1) { - RDI_LocationBlock *block = &ctx->rdbg->location_blocks[loc_block_idx]; + RDI_LocationBlock *block = &ctx->rdi->location_blocks[loc_block_idx]; if(block->scope_off_first <= ctx->ip_voff && ctx->ip_voff < block->scope_off_opl) { - loc_kind = *((RDI_LocationKind *)(ctx->rdbg->location_data + block->location_data_off)); + loc_kind = *((RDI_LocationKind *)(ctx->rdi->location_data + block->location_data_off)); switch(loc_kind) { default:{mapped_identifier = 0;}break; case RDI_LocationKind_AddrBytecodeStream: case RDI_LocationKind_ValBytecodeStream: { - U8 *bytecode_base = ctx->rdbg->location_data + block->location_data_off + sizeof(RDI_LocationKind); + U8 *bytecode_base = ctx->rdi->location_data + block->location_data_off + sizeof(RDI_LocationKind); U64 bytecode_size = 0; - for(U64 idx = 0; idx < ctx->rdbg->location_data_size; idx += 1) + for(U64 idx = 0; idx < ctx->rdi->location_data_size; idx += 1) { U8 op = bytecode_base[idx]; if(op == 0) @@ -880,11 +880,11 @@ eval_parse_expr_from_text_tokens__prec(Arena *arena, EVAL_ParseCtx *ctx, String8 case RDI_LocationKind_AddrRegisterPlusU16: case RDI_LocationKind_AddrAddrRegisterPlusU16: { - MemoryCopy(&loc_reg_u16, (ctx->rdbg->location_data + block->location_data_off), sizeof(loc_reg_u16)); + MemoryCopy(&loc_reg_u16, (ctx->rdi->location_data + block->location_data_off), sizeof(loc_reg_u16)); }break; case RDI_LocationKind_ValRegister: { - MemoryCopy(&loc_reg, (ctx->rdbg->location_data + block->location_data_off), sizeof(loc_reg)); + MemoryCopy(&loc_reg, (ctx->rdi->location_data + block->location_data_off), sizeof(loc_reg)); }break; } } @@ -919,21 +919,21 @@ eval_parse_expr_from_text_tokens__prec(Arena *arena, EVAL_ParseCtx *ctx, String8 //- rjf: try global variables if(mapped_identifier == 0) { - RDI_NameMap *name_map = rdi_name_map_from_kind(ctx->rdbg, RDI_NameMapKind_GlobalVariables); - if(name_map != 0 && ctx->rdbg->global_variables != 0) + RDI_NameMap *name_map = rdi_name_map_from_kind(ctx->rdi, RDI_NameMapKind_GlobalVariables); + if(name_map != 0 && ctx->rdi->global_variables != 0) { RDI_ParsedNameMap parsed_name_map = {0}; - rdi_name_map_parse(ctx->rdbg, name_map, &parsed_name_map); - RDI_NameMapNode *node = rdi_name_map_lookup(ctx->rdbg, &parsed_name_map, token_string.str, token_string.size); + rdi_name_map_parse(ctx->rdi, name_map, &parsed_name_map); + RDI_NameMapNode *node = rdi_name_map_lookup(ctx->rdi, &parsed_name_map, token_string.str, token_string.size); U32 matches_count = 0; - U32 *matches = rdi_matches_from_map_node(ctx->rdbg, node, &matches_count); + U32 *matches = rdi_matches_from_map_node(ctx->rdi, node, &matches_count); for(String8Node *n = namespaceified_token_strings.first; n != 0 && matches_count == 0; n = n->next) { - node = rdi_name_map_lookup(ctx->rdbg, &parsed_name_map, n->string.str, n->string.size); + node = rdi_name_map_lookup(ctx->rdi, &parsed_name_map, n->string.str, n->string.size); matches_count = 0; - matches = rdi_matches_from_map_node(ctx->rdbg, node, &matches_count); + matches = rdi_matches_from_map_node(ctx->rdi, node, &matches_count); } if(matches_count != 0) { @@ -942,15 +942,15 @@ eval_parse_expr_from_text_tokens__prec(Arena *arena, EVAL_ParseCtx *ctx, String8 // don't know of a magic hash table fixup path in PDBs, so // in this case, I'm going to prefer the latest-added global. U32 match_idx = matches[matches_count-1]; - RDI_GlobalVariable *global_var = &ctx->rdbg->global_variables[match_idx]; + RDI_GlobalVariable *global_var = &ctx->rdi->global_variables[match_idx]; EVAL_OpList oplist = {0}; eval_oplist_push_op(arena, &oplist, RDI_EvalOp_ModuleOff, global_var->voff); loc_kind = RDI_LocationKind_AddrBytecodeStream; loc_bytecode = eval_bytecode_from_oplist(arena, &oplist); U32 type_idx = global_var->type_idx; - if(type_idx < ctx->rdbg->type_nodes_count) + if(type_idx < ctx->rdi->type_nodes_count) { - RDI_TypeNode *type_node = &ctx->rdbg->type_nodes[type_idx]; + RDI_TypeNode *type_node = &ctx->rdi->type_nodes[type_idx]; type_key = tg_key_ext(tg_kind_from_rdi_type_kind(type_node->kind), (U64)type_idx); } mapped_identifier = 1; @@ -961,34 +961,34 @@ eval_parse_expr_from_text_tokens__prec(Arena *arena, EVAL_ParseCtx *ctx, String8 //- rjf: try thread variables if(mapped_identifier == 0) { - RDI_NameMap *name_map = rdi_name_map_from_kind(ctx->rdbg, RDI_NameMapKind_ThreadVariables); - if(name_map != 0 && ctx->rdbg->global_variables != 0) + RDI_NameMap *name_map = rdi_name_map_from_kind(ctx->rdi, RDI_NameMapKind_ThreadVariables); + if(name_map != 0 && ctx->rdi->global_variables != 0) { RDI_ParsedNameMap parsed_name_map = {0}; - rdi_name_map_parse(ctx->rdbg, name_map, &parsed_name_map); - RDI_NameMapNode *node = rdi_name_map_lookup(ctx->rdbg, &parsed_name_map, token_string.str, token_string.size); + rdi_name_map_parse(ctx->rdi, name_map, &parsed_name_map); + RDI_NameMapNode *node = rdi_name_map_lookup(ctx->rdi, &parsed_name_map, token_string.str, token_string.size); U32 matches_count = 0; - U32 *matches = rdi_matches_from_map_node(ctx->rdbg, node, &matches_count); + U32 *matches = rdi_matches_from_map_node(ctx->rdi, node, &matches_count); for(String8Node *n = namespaceified_token_strings.first; n != 0 && matches_count == 0; n = n->next) { - node = rdi_name_map_lookup(ctx->rdbg, &parsed_name_map, n->string.str, n->string.size); + node = rdi_name_map_lookup(ctx->rdi, &parsed_name_map, n->string.str, n->string.size); matches_count = 0; - matches = rdi_matches_from_map_node(ctx->rdbg, node, &matches_count); + matches = rdi_matches_from_map_node(ctx->rdi, node, &matches_count); } if(matches_count != 0) { U32 match_idx = matches[0]; - RDI_ThreadVariable *thread_var = &ctx->rdbg->thread_variables[match_idx]; + RDI_ThreadVariable *thread_var = &ctx->rdi->thread_variables[match_idx]; EVAL_OpList oplist = {0}; eval_oplist_push_op(arena, &oplist, RDI_EvalOp_TLSOff, thread_var->tls_off); loc_kind = RDI_LocationKind_AddrBytecodeStream; loc_bytecode = eval_bytecode_from_oplist(arena, &oplist); U32 type_idx = thread_var->type_idx; - if(type_idx < ctx->rdbg->type_nodes_count) + if(type_idx < ctx->rdi->type_nodes_count) { - RDI_TypeNode *type_node = &ctx->rdbg->type_nodes[type_idx]; + RDI_TypeNode *type_node = &ctx->rdi->type_nodes[type_idx]; type_key = tg_key_ext(tg_kind_from_rdi_type_kind(type_node->kind), (U64)type_idx); } mapped_identifier = 1; @@ -999,36 +999,36 @@ eval_parse_expr_from_text_tokens__prec(Arena *arena, EVAL_ParseCtx *ctx, String8 //- rjf: try procedures if(mapped_identifier == 0) { - RDI_NameMap *name_map = rdi_name_map_from_kind(ctx->rdbg, RDI_NameMapKind_Procedures); - if(name_map != 0 && ctx->rdbg->procedures != 0 && ctx->rdbg->scopes != 0 && ctx->rdbg->scope_voffs) + RDI_NameMap *name_map = rdi_name_map_from_kind(ctx->rdi, RDI_NameMapKind_Procedures); + if(name_map != 0 && ctx->rdi->procedures != 0 && ctx->rdi->scopes != 0 && ctx->rdi->scope_voffs) { RDI_ParsedNameMap parsed_name_map = {0}; - rdi_name_map_parse(ctx->rdbg, name_map, &parsed_name_map); - RDI_NameMapNode *node = rdi_name_map_lookup(ctx->rdbg, &parsed_name_map, token_string.str, token_string.size); + rdi_name_map_parse(ctx->rdi, name_map, &parsed_name_map); + RDI_NameMapNode *node = rdi_name_map_lookup(ctx->rdi, &parsed_name_map, token_string.str, token_string.size); U32 matches_count = 0; - U32 *matches = rdi_matches_from_map_node(ctx->rdbg, node, &matches_count); + U32 *matches = rdi_matches_from_map_node(ctx->rdi, node, &matches_count); for(String8Node *n = namespaceified_token_strings.first; n != 0 && matches_count == 0; n = n->next) { - node = rdi_name_map_lookup(ctx->rdbg, &parsed_name_map, n->string.str, n->string.size); + node = rdi_name_map_lookup(ctx->rdi, &parsed_name_map, n->string.str, n->string.size); matches_count = 0; - matches = rdi_matches_from_map_node(ctx->rdbg, node, &matches_count); + matches = rdi_matches_from_map_node(ctx->rdi, node, &matches_count); } if(matches_count != 0) { U32 match_idx = matches[0]; - RDI_Procedure *procedure = &ctx->rdbg->procedures[match_idx]; - RDI_Scope *scope = &ctx->rdbg->scopes[procedure->root_scope_idx]; - U64 voff = ctx->rdbg->scope_voffs[scope->voff_range_first]; + RDI_Procedure *procedure = &ctx->rdi->procedures[match_idx]; + RDI_Scope *scope = &ctx->rdi->scopes[procedure->root_scope_idx]; + U64 voff = ctx->rdi->scope_voffs[scope->voff_range_first]; EVAL_OpList oplist = {0}; eval_oplist_push_op(arena, &oplist, RDI_EvalOp_ModuleOff, voff); loc_kind = RDI_LocationKind_ValBytecodeStream; loc_bytecode = eval_bytecode_from_oplist(arena, &oplist); U32 type_idx = procedure->type_idx; - if(type_idx < ctx->rdbg->type_nodes_count) + if(type_idx < ctx->rdi->type_nodes_count) { - RDI_TypeNode *type_node = &ctx->rdbg->type_nodes[type_idx]; + RDI_TypeNode *type_node = &ctx->rdi->type_nodes[type_idx]; type_key = tg_key_ext(tg_kind_from_rdi_type_kind(type_node->kind), (U64)type_idx); } mapped_identifier = 1; @@ -1039,7 +1039,7 @@ eval_parse_expr_from_text_tokens__prec(Arena *arena, EVAL_ParseCtx *ctx, String8 //- rjf: try types if(mapped_identifier == 0) { - type_key = eval_leaf_type_from_name(ctx->rdbg, token_string); + type_key = eval_leaf_type_from_name(ctx->rdi, token_string); if(!tg_key_match(tg_key_zero(), type_key)) { mapped_identifier = 1; diff --git a/src/eval/eval_parser.h b/src/eval/eval_parser.h index b534800e..d58ab206 100644 --- a/src/eval/eval_parser.h +++ b/src/eval/eval_parser.h @@ -67,7 +67,7 @@ struct EVAL_ParseCtx { Architecture arch; U64 ip_voff; - RDI_Parsed *rdbg; + RDI_Parsed *rdi; TG_Graph *type_graph; EVAL_String2NumMap *regs_map; EVAL_String2NumMap *reg_alias_map; @@ -85,8 +85,8 @@ global read_only EVAL_ParseResult eval_parse_result_nil = {0, &eval_expr_nil}; //////////////////////////////// //~ rjf: Debug-Info-Driven Map Building Fast Paths -internal EVAL_String2NumMap *eval_push_locals_map_from_rdi_voff(Arena *arena, RDI_Parsed *rdbg, U64 voff); -internal EVAL_String2NumMap *eval_push_member_map_from_rdi_voff(Arena *arena, RDI_Parsed *rdbg, U64 voff); +internal EVAL_String2NumMap *eval_push_locals_map_from_rdi_voff(Arena *arena, RDI_Parsed *rdi, U64 voff); +internal EVAL_String2NumMap *eval_push_member_map_from_rdi_voff(Arena *arena, RDI_Parsed *rdi, U64 voff); //////////////////////////////// //~ rjf: Tokenization Functions @@ -101,7 +101,7 @@ internal EVAL_TokenArray eval_token_array_make_first_opl(EVAL_Token *first, EVAL //////////////////////////////// //~ rjf: Parser Functions -internal TG_Key eval_leaf_type_from_name(RDI_Parsed *rdbg, String8 name); +internal TG_Key eval_leaf_type_from_name(RDI_Parsed *rdi, String8 name); internal EVAL_ParseResult eval_parse_type_from_text_tokens(Arena *arena, EVAL_ParseCtx *ctx, String8 text, EVAL_TokenArray *tokens); internal EVAL_ParseResult eval_parse_expr_from_text_tokens__prec(Arena *arena, EVAL_ParseCtx *ctx, String8 text, EVAL_TokenArray *tokens, S64 max_precedence); internal EVAL_ParseResult eval_parse_expr_from_text_tokens(Arena *arena, EVAL_ParseCtx *ctx, String8 text, EVAL_TokenArray *tokens); diff --git a/src/scratch/look_at_raddbg.c b/src/scratch/look_at_raddbg.c index ba16ce58..d141a7dd 100644 --- a/src/scratch/look_at_raddbg.c +++ b/src/scratch/look_at_raddbg.c @@ -22,28 +22,28 @@ int main(int argument_count, char **arguments) uint8_t *data = (uint8_t *)MapViewOfFile(map, FILE_MAP_READ, 0, 0, data_size); // parse raw data as raddbg - RDI_Parsed rdbg = {0}; - RDI_ParseStatus parse_status = rdi_parse(data, data_size, &rdbg); + RDI_Parsed rdi = {0}; + RDI_ParseStatus parse_status = rdi_parse(data, data_size, &rdi); // usage example: print out all procedure symbol names #if 1 - for(uint64_t procedure_idx = 0; procedure_idx < rdbg.procedure_count; procedure_idx += 1) + for(uint64_t procedure_idx = 0; procedure_idx < rdi.procedure_count; procedure_idx += 1) { - RDI_Procedure *procedure = &rdbg.procedures[procedure_idx]; + RDI_Procedure *procedure = &rdi.procedures[procedure_idx]; uint64_t name_size = 0; - uint8_t *name = rdi_string_from_idx(&rdbg, procedure->name_string_idx, &name_size); + uint8_t *name = rdi_string_from_idx(&rdi, procedure->name_string_idx, &name_size); printf("[%I64u] %.*s\n", procedure_idx, (int)name_size, name); } #endif // usage example: print out all user-defined-type names #if 0 - for(uint64_t udt_idx = 0; udt_idx < rdbg.udt_count; udt_idx += 1) + for(uint64_t udt_idx = 0; udt_idx < rdi.udt_count; udt_idx += 1) { - RDI_UDT *udt = &rdbg.udts[udt_idx]; - RDI_TypeNode *type = &rdbg.type_nodes[udt->self_type_idx]; + RDI_UDT *udt = &rdi.udts[udt_idx]; + RDI_TypeNode *type = &rdi.type_nodes[udt->self_type_idx]; uint64_t name_size = 0; - uint8_t *name = rdi_string_from_idx(&rdbg, type->user_defined.name_string_idx, &name_size); + uint8_t *name = rdi_string_from_idx(&rdi, type->user_defined.name_string_idx, &name_size); printf("[%I64u] %.*s\n", udt_idx, (int)name_size, name); } #endif @@ -51,9 +51,9 @@ int main(int argument_count, char **arguments) // for getting more info, look at the `RDI_Parsed` structure. all data is // represented as a bunch of flat plain-old-data tables. data which must // reference other data uses indices into that other data's table. for - // example, given a `type_idx`, I will index into `rdbg.type_nodes`. given a - // `udt_idx`, I will index into `rdbg.udts`. given a `scope_idx`, I will - // index into `rdbg.scopes`. and so on. + // example, given a `type_idx`, I will index into `rdi.type_nodes`. given a + // `udt_idx`, I will index into `rdi.udts`. given a `scope_idx`, I will + // index into `rdi.scopes`. and so on. return 0; } diff --git a/src/type_graph/type_graph.c b/src/type_graph/type_graph.c index f03b39b6..da172b03 100644 --- a/src/type_graph/type_graph.c +++ b/src/type_graph/type_graph.c @@ -279,7 +279,7 @@ tg_cons_type_make(TG_Graph *graph, TG_Kind kind, TG_Key direct_type_key, U64 u64 //~ rjf: Graph Introspection API internal TG_Type * -tg_type_from_graph_rdi_key(Arena *arena, TG_Graph *graph, RDI_Parsed *rdbg, TG_Key key) +tg_type_from_graph_rdi_key(Arena *arena, TG_Graph *graph, RDI_Parsed *rdi, TG_Key key) { TG_Type *type = &tg_type_nil; U64 reg_byte_count = 0; @@ -324,7 +324,7 @@ tg_type_from_graph_rdi_key(Arena *arena, TG_Graph *graph, RDI_Parsed *rdbg, TG_K }break; case TG_Kind_Array: { - U64 ptee_size = tg_byte_size_from_graph_rdi_key(graph, rdbg, cons_type->direct_type_key); + U64 ptee_size = tg_byte_size_from_graph_rdi_key(graph, rdi, cons_type->direct_type_key); type->byte_size = ptee_size * type->count; }break; } @@ -336,20 +336,20 @@ tg_type_from_graph_rdi_key(Arena *arena, TG_Graph *graph, RDI_Parsed *rdbg, TG_K case TG_KeyKind_Ext: { U64 type_node_idx = key.u64[0]; - if(0 <= type_node_idx && type_node_idx < rdbg->type_nodes_count) + if(0 <= type_node_idx && type_node_idx < rdi->type_nodes_count) { - RDI_TypeNode *rdbg_type = &rdbg->type_nodes[type_node_idx]; - TG_Kind kind = tg_kind_from_rdi_type_kind(rdbg_type->kind); + RDI_TypeNode *rdi_type = &rdi->type_nodes[type_node_idx]; + TG_Kind kind = tg_kind_from_rdi_type_kind(rdi_type->kind); //- rjf: record types => unpack name * members & produce - if(RDI_TypeKind_FirstRecord <= rdbg_type->kind && rdbg_type->kind <= RDI_TypeKind_LastRecord) + if(RDI_TypeKind_FirstRecord <= rdi_type->kind && rdi_type->kind <= RDI_TypeKind_LastRecord) { // rjf: unpack name String8 name = {0}; - name.str = rdi_string_from_idx(rdbg, rdbg_type->user_defined.name_string_idx, &name.size); + name.str = rdi_string_from_idx(rdi, rdi_type->user_defined.name_string_idx, &name.size); // rjf: unpack UDT info - RDI_UDT *udt = rdi_element_from_idx(rdbg, udts, rdbg_type->user_defined.udt_idx); + RDI_UDT *udt = rdi_element_from_idx(rdi, udts, rdi_type->user_defined.udt_idx); // rjf: unpack members TG_Member *members = 0; @@ -357,23 +357,23 @@ tg_type_from_graph_rdi_key(Arena *arena, TG_Graph *graph, RDI_Parsed *rdbg, TG_K { members_count = udt->member_count; members = push_array(arena, TG_Member, members_count); - if(members_count != 0 && 0 <= udt->member_first && udt->member_first+udt->member_count <= rdbg->members_count) + if(members_count != 0 && 0 <= udt->member_first && udt->member_first+udt->member_count <= rdi->members_count) { for(U32 member_idx = udt->member_first; member_idx < udt->member_first+udt->member_count; member_idx += 1) { - RDI_Member *src = &rdbg->members[member_idx]; + RDI_Member *src = &rdi->members[member_idx]; TG_Kind member_type_kind = TG_Kind_Null; - if(src->type_idx < rdbg->type_nodes_count) + if(src->type_idx < rdi->type_nodes_count) { - RDI_TypeNode *member_type = &rdbg->type_nodes[src->type_idx]; + RDI_TypeNode *member_type = &rdi->type_nodes[src->type_idx]; member_type_kind = tg_kind_from_rdi_type_kind(member_type->kind); } TG_Member *dst = &members[member_idx-udt->member_first]; dst->kind = tg_member_kind_from_rdi_member_kind(src->kind); dst->type_key = tg_key_ext(member_type_kind, (U64)src->type_idx); - dst->name.str = rdi_string_from_idx(rdbg, src->name_string_idx, &dst->name.size); + dst->name.str = rdi_string_from_idx(rdi, src->name_string_idx, &dst->name.size); dst->off = (U64)src->off; } } @@ -383,46 +383,46 @@ tg_type_from_graph_rdi_key(Arena *arena, TG_Graph *graph, RDI_Parsed *rdbg, TG_K type = push_array(arena, TG_Type, 1); type->kind = kind; type->name = push_str8_copy(arena, name); - type->byte_size = (U64)rdbg_type->byte_size; + type->byte_size = (U64)rdi_type->byte_size; type->count = members_count; type->members = members; } //- rjf: enum types => unpack name * values & produce - else if(rdbg_type->kind == RDI_TypeKind_Enum) + else if(rdi_type->kind == RDI_TypeKind_Enum) { // rjf: unpack name String8 name = {0}; - name.str = rdi_string_from_idx(rdbg, rdbg_type->user_defined.name_string_idx, &name.size); + name.str = rdi_string_from_idx(rdi, rdi_type->user_defined.name_string_idx, &name.size); // rjf: unpack direct type TG_Key direct_type_key = zero_struct; - if(rdbg_type->user_defined.direct_type_idx < type_node_idx) + if(rdi_type->user_defined.direct_type_idx < type_node_idx) { - RDI_TypeNode *direct_type_node = &rdbg->type_nodes[rdbg_type->user_defined.direct_type_idx]; + RDI_TypeNode *direct_type_node = &rdi->type_nodes[rdi_type->user_defined.direct_type_idx]; TG_Kind direct_type_kind = tg_kind_from_rdi_type_kind(direct_type_node->kind); - direct_type_key = tg_key_ext(direct_type_kind, (U64)rdbg_type->user_defined.direct_type_idx); + direct_type_key = tg_key_ext(direct_type_kind, (U64)rdi_type->user_defined.direct_type_idx); } // rjf: unpack members TG_EnumVal *enum_vals = 0; U32 enum_vals_count = 0; { - U32 udt_idx = rdbg_type->user_defined.udt_idx; - if(0 <= udt_idx && udt_idx < rdbg->udts_count) + U32 udt_idx = rdi_type->user_defined.udt_idx; + if(0 <= udt_idx && udt_idx < rdi->udts_count) { - RDI_UDT *udt = &rdbg->udts[udt_idx]; + RDI_UDT *udt = &rdi->udts[udt_idx]; enum_vals_count = udt->member_count; enum_vals = push_array(arena, TG_EnumVal, enum_vals_count); - if(0 <= udt->member_first && udt->member_first+udt->member_count < rdbg->enum_members_count) + if(0 <= udt->member_first && udt->member_first+udt->member_count < rdi->enum_members_count) { for(U32 member_idx = udt->member_first; member_idx < udt->member_first+udt->member_count; member_idx += 1) { - RDI_EnumMember *src = &rdbg->enum_members[member_idx]; + RDI_EnumMember *src = &rdi->enum_members[member_idx]; TG_EnumVal *dst = &enum_vals[member_idx-udt->member_first]; - dst->name.str = rdi_string_from_idx(rdbg, src->name_string_idx, &dst->name.size); + dst->name.str = rdi_string_from_idx(rdi, src->name_string_idx, &dst->name.size); dst->val = src->val; } } @@ -433,39 +433,39 @@ tg_type_from_graph_rdi_key(Arena *arena, TG_Graph *graph, RDI_Parsed *rdbg, TG_K type = push_array(arena, TG_Type, 1); type->kind = kind; type->name = push_str8_copy(arena, name); - type->byte_size = (U64)rdbg_type->byte_size; + type->byte_size = (U64)rdi_type->byte_size; type->count = enum_vals_count; type->enum_vals = enum_vals; type->direct_type_key = direct_type_key; } //- rjf: constructed types - if(RDI_TypeKind_FirstConstructed <= rdbg_type->kind && rdbg_type->kind <= RDI_TypeKind_LastConstructed) + if(RDI_TypeKind_FirstConstructed <= rdi_type->kind && rdi_type->kind <= RDI_TypeKind_LastConstructed) { // rjf: unpack direct type B32 direct_type_is_good = 0; TG_Key direct_type_key = zero_struct; U64 direct_type_byte_size = 0; - if(rdbg_type->constructed.direct_type_idx < type_node_idx) + if(rdi_type->constructed.direct_type_idx < type_node_idx) { - RDI_TypeNode *direct_type_node = &rdbg->type_nodes[rdbg_type->constructed.direct_type_idx]; + RDI_TypeNode *direct_type_node = &rdi->type_nodes[rdi_type->constructed.direct_type_idx]; TG_Kind direct_type_kind = tg_kind_from_rdi_type_kind(direct_type_node->kind); - direct_type_key = tg_key_ext(direct_type_kind, (U64)rdbg_type->constructed.direct_type_idx); + direct_type_key = tg_key_ext(direct_type_kind, (U64)rdi_type->constructed.direct_type_idx); direct_type_is_good = 1; direct_type_byte_size = (U64)direct_type_node->byte_size; } // rjf: construct based on kind - switch(rdbg_type->kind) + switch(rdi_type->kind) { case RDI_TypeKind_Modifier: { TG_Flags flags = 0; - if(rdbg_type->flags & RDI_TypeModifierFlag_Const) + if(rdi_type->flags & RDI_TypeModifierFlag_Const) { flags |= TG_Flag_Const; } - if(rdbg_type->flags & RDI_TypeModifierFlag_Volatile) + if(rdi_type->flags & RDI_TypeModifierFlag_Volatile) { flags |= TG_Flag_Volatile; } @@ -490,15 +490,15 @@ tg_type_from_graph_rdi_key(Arena *arena, TG_Graph *graph, RDI_Parsed *rdbg, TG_K type = push_array(arena, TG_Type, 1); type->kind = kind; type->direct_type_key = direct_type_key; - type->count = rdbg_type->constructed.count; + type->count = rdi_type->constructed.count; type->byte_size = direct_type_byte_size * type->count; }break; case RDI_TypeKind_Function: { - U32 count = rdbg_type->constructed.count; - U32 idx_run_first = rdbg_type->constructed.param_idx_run_first; + U32 count = rdi_type->constructed.count; + U32 idx_run_first = rdi_type->constructed.param_idx_run_first; U32 check_count = 0; - U32 *idx_run = rdi_idx_run_from_first_count(rdbg, idx_run_first, count, &check_count); + U32 *idx_run = rdi_idx_run_from_first_count(rdi, idx_run_first, count, &check_count); if(check_count == count) { type = push_array(arena, TG_Type, 1); @@ -512,7 +512,7 @@ tg_type_from_graph_rdi_key(Arena *arena, TG_Graph *graph, RDI_Parsed *rdbg, TG_K U32 param_type_idx = idx_run[idx]; if(param_type_idx < type_node_idx) { - RDI_TypeNode *param_type_node = &rdbg->type_nodes[param_type_idx]; + RDI_TypeNode *param_type_node = &rdi->type_nodes[param_type_idx]; TG_Kind param_kind = tg_kind_from_rdi_type_kind(param_type_node->kind); type->param_type_keys[idx] = tg_key_ext(param_kind, (U64)param_type_idx); } @@ -528,10 +528,10 @@ tg_type_from_graph_rdi_key(Arena *arena, TG_Graph *graph, RDI_Parsed *rdbg, TG_K // NOTE(rjf): for methods, the `direct` type points at the owner type. // the return type, instead of being encoded via the `direct` type, is // encoded via the first parameter. - U32 count = rdbg_type->constructed.count; - U32 idx_run_first = rdbg_type->constructed.param_idx_run_first; + U32 count = rdi_type->constructed.count; + U32 idx_run_first = rdi_type->constructed.param_idx_run_first; U32 check_count = 0; - U32 *idx_run = rdi_idx_run_from_first_count(rdbg, idx_run_first, count, &check_count); + U32 *idx_run = rdi_idx_run_from_first_count(rdi, idx_run_first, count, &check_count); if(check_count == count) { type = push_array(arena, TG_Type, 1); @@ -545,7 +545,7 @@ tg_type_from_graph_rdi_key(Arena *arena, TG_Graph *graph, RDI_Parsed *rdbg, TG_K U32 param_type_idx = idx_run[idx]; if(param_type_idx < type_node_idx) { - RDI_TypeNode *param_type_node = &rdbg->type_nodes[param_type_idx]; + RDI_TypeNode *param_type_node = &rdi->type_nodes[param_type_idx]; TG_Kind param_kind = tg_kind_from_rdi_type_kind(param_type_node->kind); type->param_type_keys[idx] = tg_key_ext(param_kind, (U64)param_type_idx); } @@ -566,11 +566,11 @@ tg_type_from_graph_rdi_key(Arena *arena, TG_Graph *graph, RDI_Parsed *rdbg, TG_K { // rjf: unpack owner type TG_Key owner_type_key = zero_struct; - if(rdbg_type->constructed.owner_type_idx < type_node_idx) + if(rdi_type->constructed.owner_type_idx < type_node_idx) { - RDI_TypeNode *owner_type_node = &rdbg->type_nodes[rdbg_type->constructed.owner_type_idx]; + RDI_TypeNode *owner_type_node = &rdi->type_nodes[rdi_type->constructed.owner_type_idx]; TG_Kind owner_type_kind = tg_kind_from_rdi_type_kind(owner_type_node->kind); - owner_type_key = tg_key_ext(owner_type_kind, (U64)rdbg_type->constructed.owner_type_idx); + owner_type_key = tg_key_ext(owner_type_kind, (U64)rdi_type->constructed.owner_type_idx); } type = push_array(arena, TG_Type, 1); type->kind = kind; @@ -582,20 +582,20 @@ tg_type_from_graph_rdi_key(Arena *arena, TG_Graph *graph, RDI_Parsed *rdbg, TG_K } //- rjf: alias types - else if(rdbg_type->kind == RDI_TypeKind_Alias) + else if(rdi_type->kind == RDI_TypeKind_Alias) { // rjf: unpack name String8 name = {0}; - name.str = rdi_string_from_idx(rdbg, rdbg_type->user_defined.name_string_idx, &name.size); + name.str = rdi_string_from_idx(rdi, rdi_type->user_defined.name_string_idx, &name.size); // rjf: unpack direct type TG_Key direct_type_key = zero_struct; U64 direct_type_byte_size = 0; - if(rdbg_type->user_defined.direct_type_idx < type_node_idx) + if(rdi_type->user_defined.direct_type_idx < type_node_idx) { - RDI_TypeNode *direct_type_node = &rdbg->type_nodes[rdbg_type->user_defined.direct_type_idx]; + RDI_TypeNode *direct_type_node = &rdi->type_nodes[rdi_type->user_defined.direct_type_idx]; TG_Kind direct_type_kind = tg_kind_from_rdi_type_kind(direct_type_node->kind); - direct_type_key = tg_key_ext(direct_type_kind, (U64)rdbg_type->user_defined.direct_type_idx); + direct_type_key = tg_key_ext(direct_type_kind, (U64)rdi_type->user_defined.direct_type_idx); direct_type_byte_size = direct_type_node->byte_size; } @@ -608,11 +608,11 @@ tg_type_from_graph_rdi_key(Arena *arena, TG_Graph *graph, RDI_Parsed *rdbg, TG_K } //- rjf: incomplete types - else if(RDI_TypeKind_FirstIncomplete <= rdbg_type->kind && rdbg_type->kind <= RDI_TypeKind_LastIncomplete) + else if(RDI_TypeKind_FirstIncomplete <= rdi_type->kind && rdi_type->kind <= RDI_TypeKind_LastIncomplete) { // rjf: unpack name String8 name = {0}; - name.str = rdi_string_from_idx(rdbg, rdbg_type->user_defined.name_string_idx, &name.size); + name.str = rdi_string_from_idx(rdi, rdi_type->user_defined.name_string_idx, &name.size); // rjf: produce type = push_array(arena, TG_Type, 1); @@ -795,7 +795,7 @@ tg_type_from_graph_rdi_key(Arena *arena, TG_Graph *graph, RDI_Parsed *rdbg, TG_K } internal TG_Key -tg_direct_from_graph_rdi_key(TG_Graph *graph, RDI_Parsed *rdbg, TG_Key key) +tg_direct_from_graph_rdi_key(TG_Graph *graph, RDI_Parsed *rdi, TG_Key key) { TG_Key result = zero_struct; switch(key.kind) @@ -805,7 +805,7 @@ tg_direct_from_graph_rdi_key(TG_Graph *graph, RDI_Parsed *rdbg, TG_Key key) case TG_KeyKind_Cons: { Temp scratch = scratch_begin(0, 0); - TG_Type *type = tg_type_from_graph_rdi_key(scratch.arena, graph, rdbg, key); + TG_Type *type = tg_type_from_graph_rdi_key(scratch.arena, graph, rdi, key); result = type->direct_type_key; scratch_end(scratch); }break; @@ -814,16 +814,16 @@ tg_direct_from_graph_rdi_key(TG_Graph *graph, RDI_Parsed *rdbg, TG_Key key) } internal TG_Key -tg_unwrapped_direct_from_graph_rdi_key(TG_Graph *graph, RDI_Parsed *rdbg, TG_Key key) +tg_unwrapped_direct_from_graph_rdi_key(TG_Graph *graph, RDI_Parsed *rdi, TG_Key key) { - key = tg_unwrapped_from_graph_rdi_key(graph, rdbg, key); - key = tg_direct_from_graph_rdi_key(graph, rdbg, key); - key = tg_unwrapped_from_graph_rdi_key(graph, rdbg, key); + key = tg_unwrapped_from_graph_rdi_key(graph, rdi, key); + key = tg_direct_from_graph_rdi_key(graph, rdi, key); + key = tg_unwrapped_from_graph_rdi_key(graph, rdi, key); return key; } internal TG_Key -tg_owner_from_graph_rdi_key(TG_Graph *graph, RDI_Parsed *rdbg, TG_Key key) +tg_owner_from_graph_rdi_key(TG_Graph *graph, RDI_Parsed *rdi, TG_Key key) { TG_Key result = zero_struct; switch(key.kind) @@ -833,7 +833,7 @@ tg_owner_from_graph_rdi_key(TG_Graph *graph, RDI_Parsed *rdbg, TG_Key key) case TG_KeyKind_Cons: { Temp scratch = scratch_begin(0, 0); - TG_Type *type = tg_type_from_graph_rdi_key(scratch.arena, graph, rdbg, key); + TG_Type *type = tg_type_from_graph_rdi_key(scratch.arena, graph, rdi, key); result = type->owner_type_key; scratch_end(scratch); }break; @@ -842,14 +842,14 @@ tg_owner_from_graph_rdi_key(TG_Graph *graph, RDI_Parsed *rdbg, TG_Key key) } internal TG_Key -tg_ptee_from_graph_rdi_key(TG_Graph *graph, RDI_Parsed *rdbg, TG_Key key) +tg_ptee_from_graph_rdi_key(TG_Graph *graph, RDI_Parsed *rdi, TG_Key key) { TG_Key result = key; B32 passed_ptr = 0; for(;;) { TG_Kind kind = tg_kind_from_key(result); - result = tg_direct_from_graph_rdi_key(graph, rdbg, result); + result = tg_direct_from_graph_rdi_key(graph, rdi, result); if(kind == TG_Kind_Ptr || kind == TG_Kind_LRef || kind == TG_Kind_RRef) { passed_ptr = 1; @@ -874,7 +874,7 @@ tg_ptee_from_graph_rdi_key(TG_Graph *graph, RDI_Parsed *rdbg, TG_Key key) } internal TG_Key -tg_unwrapped_from_graph_rdi_key(TG_Graph *graph, RDI_Parsed *rdbg, TG_Key key) +tg_unwrapped_from_graph_rdi_key(TG_Graph *graph, RDI_Parsed *rdi, TG_Key key) { TG_Key result = key; for(B32 good = 1; good;) @@ -884,7 +884,7 @@ tg_unwrapped_from_graph_rdi_key(TG_Graph *graph, RDI_Parsed *rdbg, TG_Key key) kind == TG_Kind_Modifier || kind == TG_Kind_Alias) { - result = tg_direct_from_graph_rdi_key(graph, rdbg, result); + result = tg_direct_from_graph_rdi_key(graph, rdi, result); } else { @@ -895,7 +895,7 @@ tg_unwrapped_from_graph_rdi_key(TG_Graph *graph, RDI_Parsed *rdbg, TG_Key key) } internal U64 -tg_byte_size_from_graph_rdi_key(TG_Graph *graph, RDI_Parsed *rdbg, TG_Key key) +tg_byte_size_from_graph_rdi_key(TG_Graph *graph, RDI_Parsed *rdi, TG_Key key) { U64 result = 0; switch(key.kind) @@ -910,7 +910,7 @@ tg_byte_size_from_graph_rdi_key(TG_Graph *graph, RDI_Parsed *rdbg, TG_Key key) case TG_KeyKind_Cons: { Temp scratch = scratch_begin(0, 0); - TG_Type *type = tg_type_from_graph_rdi_key(scratch.arena, graph, rdbg, key); + TG_Type *type = tg_type_from_graph_rdi_key(scratch.arena, graph, rdi, key); result = type->byte_size; scratch_end(scratch); }break; @@ -945,12 +945,12 @@ tg_member_copy(Arena *arena, TG_Member *src) } internal TG_MemberArray -tg_members_from_graph_rdi_key(Arena *arena, TG_Graph *graph, RDI_Parsed *rdbg, TG_Key key) +tg_members_from_graph_rdi_key(Arena *arena, TG_Graph *graph, RDI_Parsed *rdi, TG_Key key) { TG_MemberArray result = {0}; Temp scratch = scratch_begin(&arena, 1); { - TG_Type *type = tg_type_from_graph_rdi_key(scratch.arena, graph, rdbg, key); + TG_Type *type = tg_type_from_graph_rdi_key(scratch.arena, graph, rdi, key); if(type->members != 0) { result.count = type->count; @@ -967,7 +967,7 @@ tg_members_from_graph_rdi_key(Arena *arena, TG_Graph *graph, RDI_Parsed *rdbg, T } internal TG_MemberArray -tg_data_members_from_graph_rdi_key(Arena *arena, TG_Graph *graph, RDI_Parsed *rdbg, TG_Key key) +tg_data_members_from_graph_rdi_key(Arena *arena, TG_Graph *graph, RDI_Parsed *rdi, TG_Key key) { Temp scratch = scratch_begin(&arena, 1); TG_Kind root_type_kind = tg_kind_from_key(key); @@ -976,7 +976,7 @@ tg_data_members_from_graph_rdi_key(Arena *arena, TG_Graph *graph, RDI_Parsed *rd TG_MemberList members_list = {0}; B32 members_need_offset_sort = 0; { - TG_Type *root_type = tg_type_from_graph_rdi_key(scratch.arena, graph, rdbg, key); + TG_Type *root_type = tg_type_from_graph_rdi_key(scratch.arena, graph, rdi, key); typedef struct Task Task; struct Task { @@ -1015,7 +1015,7 @@ tg_data_members_from_graph_rdi_key(Arena *arena, TG_Graph *graph, RDI_Parsed *rd t->inheritance_chain = tg_key_list_copy(scratch.arena, &task->inheritance_chain); tg_key_list_push(scratch.arena, &t->inheritance_chain, type->members[member_idx].type_key); t->type_key = type->members[member_idx].type_key; - t->type = tg_type_from_graph_rdi_key(scratch.arena, graph, rdbg, type->members[member_idx].type_key); + t->type = tg_type_from_graph_rdi_key(scratch.arena, graph, rdi, type->members[member_idx].type_key); SLLQueuePush(first_task, last_task, t); members_need_offset_sort = 1; } @@ -1064,7 +1064,7 @@ tg_data_members_from_graph_rdi_key(Arena *arena, TG_Graph *graph, RDI_Parsed *rd TG_Member *member = &members.v[idx]; if(idx+1 < members.count) { - U64 member_byte_size = tg_byte_size_from_graph_rdi_key(graph, rdbg, member->type_key); + U64 member_byte_size = tg_byte_size_from_graph_rdi_key(graph, rdi, member->type_key); Rng1U64 member_byte_range = r1u64(member->off, member->off + member_byte_size); if(member[1].off > member_byte_range.max) { @@ -1111,7 +1111,7 @@ tg_data_members_from_graph_rdi_key(Arena *arena, TG_Graph *graph, RDI_Parsed *rd } internal void -tg_lhs_string_from_key(Arena *arena, TG_Graph *graph, RDI_Parsed *rdbg, TG_Key key, String8List *out, U32 prec, B32 skip_return) +tg_lhs_string_from_key(Arena *arena, TG_Graph *graph, RDI_Parsed *rdi, TG_Key key, String8List *out, U32 prec, B32 skip_return) { String8 keyword = {0}; TG_Kind kind = tg_kind_from_key(key); @@ -1120,7 +1120,7 @@ tg_lhs_string_from_key(Arena *arena, TG_Graph *graph, RDI_Parsed *rdbg, TG_Key k default: { Temp scratch = scratch_begin(&arena, 1); - TG_Type *type = tg_type_from_graph_rdi_key(scratch.arena, graph, rdbg, key); + TG_Type *type = tg_type_from_graph_rdi_key(scratch.arena, graph, rdi, key); str8_list_push(arena, out, push_str8_copy(arena, type->name)); str8_list_push(arena, out, str8_lit(" ")); scratch_end(scratch); @@ -1128,16 +1128,16 @@ tg_lhs_string_from_key(Arena *arena, TG_Graph *graph, RDI_Parsed *rdbg, TG_Key k case TG_Kind_Bitfield: { - TG_Key direct = tg_direct_from_graph_rdi_key(graph, rdbg, key); - tg_lhs_string_from_key(arena, graph, rdbg, direct, out, prec, skip_return); + TG_Key direct = tg_direct_from_graph_rdi_key(graph, rdi, key); + tg_lhs_string_from_key(arena, graph, rdi, direct, out, prec, skip_return); }break; case TG_Kind_Modifier: { Temp scratch = scratch_begin(&arena, 1); - TG_Type *type = tg_type_from_graph_rdi_key(scratch.arena, graph, rdbg, key); + TG_Type *type = tg_type_from_graph_rdi_key(scratch.arena, graph, rdi, key); TG_Key direct = type->direct_type_key; - tg_lhs_string_from_key(arena, graph, rdbg, direct, out, 1, skip_return); + tg_lhs_string_from_key(arena, graph, rdi, direct, out, 1, skip_return); if(type->flags & TG_Flag_Const) { str8_list_push(arena, out, str8_lit("const ")); @@ -1161,7 +1161,7 @@ tg_lhs_string_from_key(Arena *arena, TG_Graph *graph, RDI_Parsed *rdbg, TG_Key k case TG_Kind_Alias: { Temp scratch = scratch_begin(&arena, 1); - TG_Type *type = tg_type_from_graph_rdi_key(scratch.arena, graph, rdbg, key); + TG_Type *type = tg_type_from_graph_rdi_key(scratch.arena, graph, rdi, key); str8_list_push(arena, out, push_str8_copy(arena, type->name)); str8_list_push(arena, out, str8_lit(" ")); scratch_end(scratch); @@ -1174,7 +1174,7 @@ tg_lhs_string_from_key(Arena *arena, TG_Graph *graph, RDI_Parsed *rdbg, TG_Key k fwd_udt:; { Temp scratch = scratch_begin(&arena, 1); - TG_Type *type = tg_type_from_graph_rdi_key(scratch.arena, graph, rdbg, key); + TG_Type *type = tg_type_from_graph_rdi_key(scratch.arena, graph, rdi, key); str8_list_push(arena, out, keyword); str8_list_push(arena, out, str8_lit(" ")); str8_list_push(arena, out, push_str8_copy(arena, type->name)); @@ -1184,8 +1184,8 @@ tg_lhs_string_from_key(Arena *arena, TG_Graph *graph, RDI_Parsed *rdbg, TG_Key k case TG_Kind_Array: { - TG_Key direct = tg_direct_from_graph_rdi_key(graph, rdbg, key); - tg_lhs_string_from_key(arena, graph, rdbg, direct, out, 2, skip_return); + TG_Key direct = tg_direct_from_graph_rdi_key(graph, rdi, key); + tg_lhs_string_from_key(arena, graph, rdi, direct, out, 2, skip_return); if(prec == 1) { str8_list_push(arena, out, str8_lit("(")); @@ -1196,8 +1196,8 @@ tg_lhs_string_from_key(Arena *arena, TG_Graph *graph, RDI_Parsed *rdbg, TG_Key k { if(!skip_return) { - TG_Key direct = tg_direct_from_graph_rdi_key(graph, rdbg, key); - tg_lhs_string_from_key(arena, graph, rdbg, direct, out, 2, 0); + TG_Key direct = tg_direct_from_graph_rdi_key(graph, rdi, key); + tg_lhs_string_from_key(arena, graph, rdi, direct, out, 2, 0); } if(prec == 1) { @@ -1207,32 +1207,32 @@ tg_lhs_string_from_key(Arena *arena, TG_Graph *graph, RDI_Parsed *rdbg, TG_Key k case TG_Kind_Ptr: { - TG_Key direct = tg_direct_from_graph_rdi_key(graph, rdbg, key); - tg_lhs_string_from_key(arena, graph, rdbg, direct, out, 1, skip_return); + TG_Key direct = tg_direct_from_graph_rdi_key(graph, rdi, key); + tg_lhs_string_from_key(arena, graph, rdi, direct, out, 1, skip_return); str8_list_push(arena, out, str8_lit("*")); }break; case TG_Kind_LRef: { - TG_Key direct = tg_direct_from_graph_rdi_key(graph, rdbg, key); - tg_lhs_string_from_key(arena, graph, rdbg, direct, out, 1, skip_return); + TG_Key direct = tg_direct_from_graph_rdi_key(graph, rdi, key); + tg_lhs_string_from_key(arena, graph, rdi, direct, out, 1, skip_return); str8_list_push(arena, out, str8_lit("&")); }break; case TG_Kind_RRef: { - TG_Key direct = tg_direct_from_graph_rdi_key(graph, rdbg, key); - tg_lhs_string_from_key(arena, graph, rdbg, direct, out, 1, skip_return); + TG_Key direct = tg_direct_from_graph_rdi_key(graph, rdi, key); + tg_lhs_string_from_key(arena, graph, rdi, direct, out, 1, skip_return); str8_list_push(arena, out, str8_lit("&&")); }break; case TG_Kind_MemberPtr: { Temp scratch = scratch_begin(&arena, 1); - TG_Type *type = tg_type_from_graph_rdi_key(scratch.arena, graph, rdbg, key); + TG_Type *type = tg_type_from_graph_rdi_key(scratch.arena, graph, rdi, key); TG_Key direct = type->direct_type_key; - tg_lhs_string_from_key(arena, graph, rdbg, direct, out, 1, skip_return); - TG_Type *container = tg_type_from_graph_rdi_key(scratch.arena, graph, rdbg, type->owner_type_key); + tg_lhs_string_from_key(arena, graph, rdi, direct, out, 1, skip_return); + TG_Type *container = tg_type_from_graph_rdi_key(scratch.arena, graph, rdi, type->owner_type_key); if(container->kind != TG_Kind_Null) { str8_list_push(arena, out, push_str8_copy(arena, container->name)); @@ -1248,7 +1248,7 @@ tg_lhs_string_from_key(Arena *arena, TG_Graph *graph, RDI_Parsed *rdbg, TG_Key k } internal void -tg_rhs_string_from_key(Arena *arena, TG_Graph *graph, RDI_Parsed *rdbg, TG_Key key, String8List *out, U32 prec) +tg_rhs_string_from_key(Arena *arena, TG_Graph *graph, RDI_Parsed *rdi, TG_Key key, String8List *out, U32 prec) { TG_Kind kind = tg_kind_from_key(key); switch(kind) @@ -1257,8 +1257,8 @@ tg_rhs_string_from_key(Arena *arena, TG_Graph *graph, RDI_Parsed *rdbg, TG_Key k case TG_Kind_Bitfield: { - TG_Key direct = tg_direct_from_graph_rdi_key(graph, rdbg, key); - tg_rhs_string_from_key(arena, graph, rdbg, direct, out, prec); + TG_Key direct = tg_direct_from_graph_rdi_key(graph, rdi, key); + tg_rhs_string_from_key(arena, graph, rdi, direct, out, prec); }break; case TG_Kind_Modifier: @@ -1267,14 +1267,14 @@ tg_rhs_string_from_key(Arena *arena, TG_Graph *graph, RDI_Parsed *rdbg, TG_Key k case TG_Kind_RRef: case TG_Kind_MemberPtr: { - TG_Key direct = tg_direct_from_graph_rdi_key(graph, rdbg, key); - tg_rhs_string_from_key(arena, graph, rdbg, direct, out, 1); + TG_Key direct = tg_direct_from_graph_rdi_key(graph, rdi, key); + tg_rhs_string_from_key(arena, graph, rdi, direct, out, 1); }break; case TG_Kind_Array: { Temp scratch = scratch_begin(&arena, 1); - TG_Type *type = tg_type_from_graph_rdi_key(scratch.arena, graph, rdbg, key); + TG_Type *type = tg_type_from_graph_rdi_key(scratch.arena, graph, rdi, key); if(prec == 1) { str8_list_push(arena, out, str8_lit(")")); @@ -1283,15 +1283,15 @@ tg_rhs_string_from_key(Arena *arena, TG_Graph *graph, RDI_Parsed *rdbg, TG_Key k str8_list_push(arena, out, str8_lit("[")); str8_list_push(arena, out, count_str); str8_list_push(arena, out, str8_lit("]")); - TG_Key direct = tg_direct_from_graph_rdi_key(graph, rdbg, key); - tg_rhs_string_from_key(arena, graph, rdbg, direct, out, 2); + TG_Key direct = tg_direct_from_graph_rdi_key(graph, rdi, key); + tg_rhs_string_from_key(arena, graph, rdi, direct, out, 2); scratch_end(scratch); }break; case TG_Kind_Function: { Temp scratch = scratch_begin(&arena, 1); - TG_Type *type = tg_type_from_graph_rdi_key(scratch.arena, graph, rdbg, key); + TG_Type *type = tg_type_from_graph_rdi_key(scratch.arena, graph, rdi, key); if(prec == 1) { str8_list_push(arena, out, str8_lit(")")); @@ -1310,7 +1310,7 @@ tg_rhs_string_from_key(Arena *arena, TG_Graph *graph, RDI_Parsed *rdbg, TG_Key k for(U64 param_idx = 0; param_idx < param_count; param_idx += 1) { TG_Key param_type_key = param_type_keys[param_idx]; - String8 param_str = tg_string_from_key(arena, graph, rdbg, param_type_key); + String8 param_str = tg_string_from_key(arena, graph, rdi, param_type_key); String8 param_str_trimmed = str8_skip_chop_whitespace(param_str); str8_list_push(arena, out, param_str_trimmed); if(param_idx+1 < param_count) @@ -1320,20 +1320,20 @@ tg_rhs_string_from_key(Arena *arena, TG_Graph *graph, RDI_Parsed *rdbg, TG_Key k } str8_list_push(arena, out, str8_lit(")")); } - TG_Key direct = tg_direct_from_graph_rdi_key(graph, rdbg, key); - tg_rhs_string_from_key(arena, graph, rdbg, direct, out, 2); + TG_Key direct = tg_direct_from_graph_rdi_key(graph, rdi, key); + tg_rhs_string_from_key(arena, graph, rdi, direct, out, 2); scratch_end(scratch); }break; } } internal String8 -tg_string_from_key(Arena *arena, TG_Graph *graph, RDI_Parsed *rdbg, TG_Key key) +tg_string_from_key(Arena *arena, TG_Graph *graph, RDI_Parsed *rdi, TG_Key key) { Temp scratch = scratch_begin(&arena, 1); String8List list = {0}; - tg_lhs_string_from_key(scratch.arena, graph, rdbg, key, &list, 0, 0); - tg_rhs_string_from_key(scratch.arena, graph, rdbg, key, &list, 0); + tg_lhs_string_from_key(scratch.arena, graph, rdi, key, &list, 0, 0); + tg_rhs_string_from_key(scratch.arena, graph, rdi, key, &list, 0); String8 result = str8_list_join(arena, &list, 0); scratch_end(scratch); return result; diff --git a/src/type_graph/type_graph.h b/src/type_graph/type_graph.h index 1b20b86d..a413dc24 100644 --- a/src/type_graph/type_graph.h +++ b/src/type_graph/type_graph.h @@ -225,19 +225,19 @@ internal TG_Key tg_cons_type_make(TG_Graph *graph, TG_Kind kind, TG_Key direct_t //////////////////////////////// //~ rjf: Graph Introspection API -internal TG_Type *tg_type_from_graph_rdi_key(Arena *arena, TG_Graph *graph, RDI_Parsed *rdbg, TG_Key key); -internal TG_Key tg_direct_from_graph_rdi_key(TG_Graph *graph, RDI_Parsed *rdbg, TG_Key key); -internal TG_Key tg_unwrapped_direct_from_graph_rdi_key(TG_Graph *graph, RDI_Parsed *rdbg, TG_Key key); -internal TG_Key tg_owner_from_graph_rdi_key(TG_Graph *graph, RDI_Parsed *rdbg, TG_Key key); -internal TG_Key tg_ptee_from_graph_rdi_key(TG_Graph *graph, RDI_Parsed *rdbg, TG_Key key); -internal TG_Key tg_unwrapped_from_graph_rdi_key(TG_Graph *graph, RDI_Parsed *rdbg, TG_Key key); -internal U64 tg_byte_size_from_graph_rdi_key(TG_Graph *graph, RDI_Parsed *rdbg, TG_Key key); +internal TG_Type *tg_type_from_graph_rdi_key(Arena *arena, TG_Graph *graph, RDI_Parsed *rdi, TG_Key key); +internal TG_Key tg_direct_from_graph_rdi_key(TG_Graph *graph, RDI_Parsed *rdi, TG_Key key); +internal TG_Key tg_unwrapped_direct_from_graph_rdi_key(TG_Graph *graph, RDI_Parsed *rdi, TG_Key key); +internal TG_Key tg_owner_from_graph_rdi_key(TG_Graph *graph, RDI_Parsed *rdi, TG_Key key); +internal TG_Key tg_ptee_from_graph_rdi_key(TG_Graph *graph, RDI_Parsed *rdi, TG_Key key); +internal TG_Key tg_unwrapped_from_graph_rdi_key(TG_Graph *graph, RDI_Parsed *rdi, TG_Key key); +internal U64 tg_byte_size_from_graph_rdi_key(TG_Graph *graph, RDI_Parsed *rdi, 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_rdi_key(Arena *arena, TG_Graph *graph, RDI_Parsed *rdbg, TG_Key key); -internal TG_MemberArray tg_data_members_from_graph_rdi_key(Arena *arena, TG_Graph *graph, RDI_Parsed *rdbg, TG_Key key); -internal void tg_lhs_string_from_key(Arena *arena, TG_Graph *graph, RDI_Parsed *rdbg, TG_Key key, String8List *out, U32 prec, B32 skip_return); -internal void tg_rhs_string_from_key(Arena *arena, TG_Graph *graph, RDI_Parsed *rdbg, TG_Key key, String8List *out, U32 prec); -internal String8 tg_string_from_key(Arena *arena, TG_Graph *graph, RDI_Parsed *rdbg, TG_Key key); +internal TG_MemberArray tg_members_from_graph_rdi_key(Arena *arena, TG_Graph *graph, RDI_Parsed *rdi, TG_Key key); +internal TG_MemberArray tg_data_members_from_graph_rdi_key(Arena *arena, TG_Graph *graph, RDI_Parsed *rdi, TG_Key key); +internal void tg_lhs_string_from_key(Arena *arena, TG_Graph *graph, RDI_Parsed *rdi, TG_Key key, String8List *out, U32 prec, B32 skip_return); +internal void tg_rhs_string_from_key(Arena *arena, TG_Graph *graph, RDI_Parsed *rdi, TG_Key key, String8List *out, U32 prec); +internal String8 tg_string_from_key(Arena *arena, TG_Graph *graph, RDI_Parsed *rdi, TG_Key key); #endif // TYPE_GRAPH_H