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

This commit is contained in:
Ryan Fleury
2024-06-10 13:23:32 -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)
{
result = idx;
break;
if(!(array->v[idx].flags & DASM_InstFlag_Decorative))
{
break;
}
}
}
return result;
@@ -472,15 +475,19 @@ dasm_parse_thread__entry_point(void *p)
if(params.style_flags & DASM_StyleFlag_SourceFilesNames &&
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);
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)
{
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);
str8_list_pushf(scratch.arena, &inst_strings, ">");
str8_list_push(scratch.arena, &inst_strings, inst_string);
}
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]));
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);
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);
DASM_Inst inst = {off, rel_voff, r1u64(inst_strings.total_size + inst_strings.node_count,
inst_strings.total_size + inst_strings.node_count + inst_string.size)};
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)};
dasm_inst_chunk_list_push(scratch.arena, &inst_list, 1024, &inst);
str8_list_push(scratch.arena, &inst_strings, inst_string);
+8 -1
View File
@@ -42,10 +42,17 @@ struct DASM_Params
////////////////////////////////
//~ rjf: Instruction Types
typedef U32 DASM_InstFlags;
enum
{
DASM_InstFlag_Decorative = (1<<0),
};
typedef struct DASM_Inst DASM_Inst;
struct DASM_Inst
{
U64 code_off;
U32 code_off;
DASM_InstFlags flags;
U64 addr;
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)
{
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;
matches = 1;
+2 -2
View File
@@ -1526,7 +1526,7 @@ extern "C"{
#endif
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("B\n");
@@ -1538,7 +1538,7 @@ static void
basic_inline_tests(void)
{
OutputDebugStringA("{\n");
basic_inlinee();
basic_inlinee(12, 34, 56);
OutputDebugStringA("}\n");
}