fix cases where decorative disasm lines were being confused with non-decorative

This commit is contained in:
Ryan Fleury
2024-06-13 15:18:29 -07:00
parent 6e9b2bd107
commit 2419a00b11
4 changed files with 30 additions and 13 deletions
+18 -9
View File
@@ -73,7 +73,10 @@ dasm_inst_array_idx_from_code_off__linear_scan(DASM_InstArray *array, U64 off)
if(array->v[idx].code_off <= off && off < next_off) if(array->v[idx].code_off <= off && off < next_off)
{ {
result = idx; result = idx;
break; if(!(array->v[idx].flags & DASM_InstFlag_Decorative))
{
break;
}
} }
} }
return result; return result;
@@ -472,15 +475,19 @@ dasm_parse_thread__entry_point(void *p)
if(params.style_flags & DASM_StyleFlag_SourceFilesNames && if(params.style_flags & DASM_StyleFlag_SourceFilesNames &&
file->normal_full_path_string_idx != 0 && file_normalized_full_path.size != 0) file->normal_full_path_string_idx != 0 && file_normalized_full_path.size != 0)
{ {
DASM_Inst inst = {0}; String8 inst_string = push_str8f(scratch.arena, "> %S", file_normalized_full_path);
DASM_Inst inst = {u32_from_u64_saturate(off), DASM_InstFlag_Decorative, 0, r1u64(inst_strings.total_size + inst_strings.node_count,
inst_strings.total_size + inst_strings.node_count + inst_string.size)};
dasm_inst_chunk_list_push(scratch.arena, &inst_list, 1024, &inst); dasm_inst_chunk_list_push(scratch.arena, &inst_list, 1024, &inst);
str8_list_pushf(scratch.arena, &inst_strings, "> %S", file_normalized_full_path); str8_list_push(scratch.arena, &inst_strings, inst_string);
} }
if(params.style_flags & DASM_StyleFlag_SourceFilesNames && file->normal_full_path_string_idx == 0) if(params.style_flags & DASM_StyleFlag_SourceFilesNames && file->normal_full_path_string_idx == 0)
{ {
DASM_Inst inst = {0}; String8 inst_string = str8_lit(">");
DASM_Inst inst = {u32_from_u64_saturate(off), DASM_InstFlag_Decorative, 0, r1u64(inst_strings.total_size + inst_strings.node_count,
inst_strings.total_size + inst_strings.node_count + inst_string.size)};
dasm_inst_chunk_list_push(scratch.arena, &inst_list, 1024, &inst); dasm_inst_chunk_list_push(scratch.arena, &inst_list, 1024, &inst);
str8_list_pushf(scratch.arena, &inst_strings, ">"); str8_list_push(scratch.arena, &inst_strings, inst_string);
} }
last_file = file; last_file = file;
} }
@@ -512,9 +519,11 @@ dasm_parse_thread__entry_point(void *p)
String8 line_text = str8_skip_chop_whitespace(str8_substr(data, text_info.lines_ranges[line->line_num-1])); String8 line_text = str8_skip_chop_whitespace(str8_substr(data, text_info.lines_ranges[line->line_num-1]));
if(line_text.size != 0) if(line_text.size != 0)
{ {
DASM_Inst inst = {0}; String8 inst_string = push_str8f(scratch.arena, "> %S", line_text);
DASM_Inst inst = {u32_from_u64_saturate(off), DASM_InstFlag_Decorative, 0, r1u64(inst_strings.total_size + inst_strings.node_count,
inst_strings.total_size + inst_strings.node_count + inst_string.size)};
dasm_inst_chunk_list_push(scratch.arena, &inst_list, 1024, &inst); dasm_inst_chunk_list_push(scratch.arena, &inst_list, 1024, &inst);
str8_list_pushf(scratch.arena, &inst_strings, "> %S", line_text); str8_list_push(scratch.arena, &inst_strings, inst_string);
} }
} }
} }
@@ -567,8 +576,8 @@ dasm_parse_thread__entry_point(void *p)
} }
} }
String8 inst_string = push_str8f(scratch.arena, "%S%S%s%S", addr_part, code_bytes_part, udc.asm_buf, symbol_part); String8 inst_string = push_str8f(scratch.arena, "%S%S%s%S", addr_part, code_bytes_part, udc.asm_buf, symbol_part);
DASM_Inst inst = {off, rel_voff, r1u64(inst_strings.total_size + inst_strings.node_count, DASM_Inst inst = {u32_from_u64_saturate(off), 0, rel_voff, r1u64(inst_strings.total_size + inst_strings.node_count,
inst_strings.total_size + inst_strings.node_count + inst_string.size)}; inst_strings.total_size + inst_strings.node_count + inst_string.size)};
dasm_inst_chunk_list_push(scratch.arena, &inst_list, 1024, &inst); dasm_inst_chunk_list_push(scratch.arena, &inst_list, 1024, &inst);
str8_list_push(scratch.arena, &inst_strings, inst_string); str8_list_push(scratch.arena, &inst_strings, inst_string);
+8 -1
View File
@@ -42,10 +42,17 @@ struct DASM_Params
//////////////////////////////// ////////////////////////////////
//~ rjf: Instruction Types //~ rjf: Instruction Types
typedef U32 DASM_InstFlags;
enum
{
DASM_InstFlag_Decorative = (1<<0),
};
typedef struct DASM_Inst DASM_Inst; typedef struct DASM_Inst DASM_Inst;
struct DASM_Inst struct DASM_Inst
{ {
U64 code_off; U32 code_off;
DASM_InstFlags flags;
U64 addr; U64 addr;
Rng1U64 text_range; Rng1U64 text_range;
}; };
+2 -1
View File
@@ -12034,7 +12034,8 @@ df_code_slice(DF_Window *ws, DF_CtrlCtx *ctrl_ctx, EVAL_ParseCtx *parse_ctx, DF_
{ {
for(DF_TextLineDasm2SrcInfoNode *n = dasm2src_list->first; n != 0; n = n->next) for(DF_TextLineDasm2SrcInfoNode *n = dasm2src_list->first; n != 0; n = n->next)
{ {
if(n->v.voff_range.min <= hovered_line_voff && hovered_line_voff < n->v.voff_range.max) if(n->v.voff_range.min <= hovered_line_voff &&
hovered_line_voff < n->v.voff_range.max)
{ {
line_info_line_num = n->v.pt.line; line_info_line_num = n->v.pt.line;
matches = 1; matches = 1;
+2 -2
View File
@@ -1526,7 +1526,7 @@ extern "C"{
#endif #endif
static FORCE_INLINE void static FORCE_INLINE void
basic_inlinee(void) basic_inlinee(int inlinee_param_x, int inlinee_param_y, int inlinee_param_z)
{ {
OutputDebugStringA("A\n"); OutputDebugStringA("A\n");
OutputDebugStringA("B\n"); OutputDebugStringA("B\n");
@@ -1538,7 +1538,7 @@ static void
basic_inline_tests(void) basic_inline_tests(void)
{ {
OutputDebugStringA("{\n"); OutputDebugStringA("{\n");
basic_inlinee(); basic_inlinee(12, 34, 56);
OutputDebugStringA("}\n"); OutputDebugStringA("}\n");
} }