diff --git a/src/raddbg/generated/raddbg.meta.c b/src/raddbg/generated/raddbg.meta.c index e210208e..51e8cb71 100644 --- a/src/raddbg/generated/raddbg.meta.c +++ b/src/raddbg/generated/raddbg.meta.c @@ -422,8 +422,8 @@ RD_NameSchemaInfo rd_name_schema_info_table[24] = {str8_lit_comp("geo3d"), str8_lit_comp("@inherit(tab) x:\n{\n @display_name(\"Expression\") @description(\"An expression to describe the base address of the index buffer.\")\n 'expression': expr_string,\n 'count': expr_string,\n 'vtx': expr_string,\n 'vtx_size': expr_string,\n 'yaw': @range[0, 1] f32,\n 'pitch': @range[-0.5, 0] f32,\n 'zoom': @range[0, 100] f32,\n}\n")}, {str8_lit_comp("getting_started"), str8_lit_comp("@inherit(tab) x:\n{\n}\n")}, {str8_lit_comp("target"), str8_lit_comp("@row_commands(@cmd_line save_cfg_to_project, enable_cfg, launch_and_run, launch_and_step_into, duplicate_cfg, remove_cfg)\n@collection_commands(add_target)\nx:\n{\n 'label': code_string,\n 'executable': path,\n 'arguments': string,\n 'working_directory': path,\n 'entry_point': expr_string,\n 'stdout_path': path,\n 'stderr_path': path,\n 'stdin_path': path,\n 'environment': query,\n 'debug_subprocesses': bool,\n @no_revert @no_expand @default(0) 'enabled': bool,\n}\n")}, -{str8_lit_comp("breakpoint"), str8_lit_comp("@row_commands(enable_cfg, duplicate_cfg, remove_cfg)\n@collection_commands(toggle_breakpoint, add_breakpoint, add_address_breakpoint, clear_breakpoints)\nx:\n{\n 'label': code_string,\n 'condition': expr_string,\n 'source_location': string,\n 'address_location': expr_string,\n 'hit_count': u64,\n 'address_range_size': @or(0, 1, 2, 4, 8) u64,\n 'break_on_write': bool,\n 'break_on_read': bool,\n 'break_on_execute': bool,\n @no_revert @no_expand @default(1) 'enabled': bool,\n}\n")}, -{str8_lit_comp("watch_pin"), str8_lit_comp("@row_commands(duplicate_cfg, remove_cfg)\n@collection_commands(add_watch_pin, toggle_watch_pin)\nx:\n{\n 'expression': expr_string,\n 'source_location': string,\n 'address_location': expr_string,\n}\n")}, +{str8_lit_comp("breakpoint"), str8_lit_comp("@row_commands(enable_cfg, duplicate_cfg, remove_cfg)\n@collection_commands(toggle_breakpoint, add_breakpoint, add_address_breakpoint, clear_breakpoints)\nx:\n{\n 'label': code_string,\n 'condition': expr_string,\n 'source_location': path_pt,\n 'address_location': expr_string,\n 'hit_count': u64,\n 'address_range_size': @or(0, 1, 2, 4, 8) u64,\n 'break_on_write': bool,\n 'break_on_read': bool,\n 'break_on_execute': bool,\n @no_revert @no_expand @default(1) 'enabled': bool,\n}\n")}, +{str8_lit_comp("watch_pin"), str8_lit_comp("@row_commands(duplicate_cfg, remove_cfg)\n@collection_commands(add_watch_pin, toggle_watch_pin)\nx:\n{\n 'expression': expr_string,\n 'source_location': path_pt,\n 'address_location': expr_string,\n}\n")}, {str8_lit_comp("file_path_map"), str8_lit_comp("@collection_commands(add_file_path_map) @row_commands(remove_cfg) x:{'source': @absolute path, 'dest': @absolute path}")}, {str8_lit_comp("type_view"), str8_lit_comp("@collection_commands(add_type_view) @row_commands(remove_cfg) x:{'type':expr_string, 'expr':expr_string}")}, {str8_lit_comp("recent_project"), str8_lit_comp("x:{'path':path}")}, diff --git a/src/raddbg/raddbg.mdesk b/src/raddbg/raddbg.mdesk index c4d1b39d..bd1a1cb0 100644 --- a/src/raddbg/raddbg.mdesk +++ b/src/raddbg/raddbg.mdesk @@ -596,7 +596,7 @@ RD_VocabTable: { 'label': code_string, 'condition': expr_string, - 'source_location': string, + 'source_location': path_pt, 'address_location': expr_string, 'hit_count': u64, 'address_range_size': @or(0, 1, 2, 4, 8) u64, @@ -617,7 +617,7 @@ RD_VocabTable: x: { 'expression': expr_string, - 'source_location': string, + 'source_location': path_pt, 'address_location': expr_string, } ```, diff --git a/src/raddbg/raddbg_core.c b/src/raddbg/raddbg_core.c index 821f8552..6732067c 100644 --- a/src/raddbg/raddbg_core.c +++ b/src/raddbg/raddbg_core.c @@ -639,10 +639,17 @@ rd_cfg_tree_list_from_string(Arena *arena, String8 root_path, String8 string) { String8 src_n_string = src_n->string; String8 src_n_string__raw = raw_from_escaped_str8(scratch.arena, src_n_string); - if(str8_match(schema->first->string, str8_lit("path"), 0) && - !md_node_has_tag(schema->first, str8_lit("absolute"), 0)) + if(!md_node_has_tag(schema->first, str8_lit("absolute"), 0)) { - src_n_string__raw = path_absolute_dst_from_relative_dst_src(scratch.arena, src_n_string__raw, root_path); + if(str8_match(schema->first->string, str8_lit("path"), 0)) + { + src_n_string__raw = path_absolute_dst_from_relative_dst_src(scratch.arena, src_n_string__raw, root_path); + } + else if(str8_match(schema->first->string, str8_lit("path_pt"), 0)) + { + String8TxtPtPair parts = str8_txt_pt_pair_from_string(src_n_string__raw); + src_n_string__raw = push_str8f(scratch.arena, "%S:%I64d:%I64d", path_absolute_dst_from_relative_dst_src(scratch.arena, parts.string, root_path), parts.pt.line, parts.pt.column); + } } dst_n_string = src_n_string__raw; } @@ -722,12 +729,21 @@ rd_string_from_cfg_tree(Arena *arena, String8 root_path, RD_Cfg *cfg) } // rjf: paths -> relativize - if(str8_match(c_schema->first->string, str8_lit("path"), 0) && - !md_node_has_tag(c_schema->first, str8_lit("absolute"), 0)) + if(!md_node_has_tag(c_schema->first, str8_lit("absolute"), 0)) { - String8 path_absolute = c->string; - String8 path_relative = path_relative_dst_from_absolute_dst_src(arena, path_absolute, root_path); - c_serialized_string = path_relative; + if(str8_match(c_schema->first->string, str8_lit("path"), 0)) + { + String8 path_absolute = c->string; + String8 path_relative = path_relative_dst_from_absolute_dst_src(arena, path_absolute, root_path); + c_serialized_string = path_relative; + } + else if(str8_match(c_schema->first->string, str8_lit("path_pt"), 0)) + { + String8 value = c->string; + String8TxtPtPair parts = str8_txt_pt_pair_from_string(value); + String8 path_relative = path_relative_dst_from_absolute_dst_src(scratch.arena, parts.string, root_path); + c_serialized_string = push_str8f(arena, "%S:%I64d:%I64d", path_relative, parts.pt.line, parts.pt.column); + } } // rjf: all strings -> escape @@ -1845,6 +1861,7 @@ rd_eval_space_read(void *u, E_Space space, void *out, Rng1U64 range) } String8 child_type_name = child_schema->first->string; if(str8_match(child_type_name, str8_lit("path"), 0) || + str8_match(child_type_name, str8_lit("path_pt"), 0) || str8_match(child_type_name, str8_lit("code_string"), 0) || str8_match(child_type_name, str8_lit("expr_string"), 0) || str8_match(child_type_name, str8_lit("string"), 0)) diff --git a/src/raddbg/raddbg_eval.c b/src/raddbg/raddbg_eval.c index 7c848b68..ff3e7ee3 100644 --- a/src/raddbg/raddbg_eval.c +++ b/src/raddbg/raddbg_eval.c @@ -327,7 +327,8 @@ E_TYPE_ACCESS_FUNCTION_DEF(schema) { child_type_key = e_type_key_cons_array(e_type_key_basic(E_TypeKind_U8), child->first->string.size, E_TypeFlag_IsCodeText); } - else if(str8_match(child_schema->first->string, str8_lit("path"), 0)) + else if(str8_match(child_schema->first->string, str8_lit("path"), 0) || + str8_match(child_schema->first->string, str8_lit("path_pt"), 0)) { child_type_key = e_type_key_cons_array(e_type_key_basic(E_TypeKind_U8), child->first->string.size, E_TypeFlag_IsPathText); }