fix while-loading command processing in text views

This commit is contained in:
Ryan Fleury
2024-09-17 14:05:40 -07:00
parent e825c0f5b5
commit 487637aaaa
+10 -8
View File
@@ -190,7 +190,9 @@ rd_code_view_build(Arena *arena, RD_CodeViewState *cv, RD_CodeViewBuildFlags fla
{ {
S64 line_num = visible_line_num_range.min; S64 line_num = visible_line_num_range.min;
U64 line_idx = visible_line_num_range.min-1; U64 line_idx = visible_line_num_range.min-1;
for(U64 visible_line_idx = 0; visible_line_idx < visible_line_count; visible_line_idx += 1, line_idx += 1, line_num += 1) for(U64 visible_line_idx = 0;
visible_line_idx < visible_line_count && line_idx < text_info->lines_count;
visible_line_idx += 1, line_idx += 1, line_num += 1)
{ {
code_slice_params.line_text[visible_line_idx] = str8_substr(text_data, text_info->lines_ranges[line_idx]); code_slice_params.line_text[visible_line_idx] = str8_substr(text_data, text_info->lines_ranges[line_idx]);
code_slice_params.line_ranges[visible_line_idx] = text_info->lines_ranges[line_idx]; code_slice_params.line_ranges[visible_line_idx] = text_info->lines_ranges[line_idx];
@@ -512,7 +514,7 @@ rd_code_view_build(Arena *arena, RD_CodeViewState *cv, RD_CodeViewBuildFlags fla
////////////////////////////// //////////////////////////////
//- rjf: do goto line //- rjf: do goto line
// //
if(cv->goto_line_num != 0) if(cv->goto_line_num != 0 && text_info->lines_count != 0)
{ {
S64 line_num = cv->goto_line_num; S64 line_num = cv->goto_line_num;
cv->goto_line_num = 0; cv->goto_line_num = 0;
@@ -595,7 +597,7 @@ rd_code_view_build(Arena *arena, RD_CodeViewState *cv, RD_CodeViewBuildFlags fla
// //
{ {
// rjf: contain => snap // rjf: contain => snap
if(cv->contain_cursor) if(cv->contain_cursor && text_info->lines_count != 0)
{ {
cv->contain_cursor = 0; cv->contain_cursor = 0;
snap[Axis2_X] = 1; snap[Axis2_X] = 1;
@@ -603,7 +605,7 @@ rd_code_view_build(Arena *arena, RD_CodeViewState *cv, RD_CodeViewBuildFlags fla
} }
// rjf: center cursor // rjf: center cursor
if(cv->center_cursor) if(cv->center_cursor && text_info->lines_count != 0)
{ {
cv->center_cursor = 0; cv->center_cursor = 0;
String8 cursor_line = str8_substr(text_data, text_info->lines_ranges[rd_regs()->cursor.line-1]); String8 cursor_line = str8_substr(text_data, text_info->lines_ranges[rd_regs()->cursor.line-1]);
@@ -6284,7 +6286,7 @@ RD_VIEW_RULE_UI_FUNCTION_DEF(pending_file)
hs_scope_close(hs_scope); hs_scope_close(hs_scope);
} }
//- rjf: if entity is ready, dispatch all deferred commands //- rjf: if file is ready, dispatch all deferred commands
if(file_is_ready) if(file_is_ready)
{ {
for(RD_CmdNode *cmd_node = pves->deferred_cmds.first; cmd_node != 0; cmd_node = cmd_node->next) for(RD_CmdNode *cmd_node = pves->deferred_cmds.first; cmd_node != 0; cmd_node = cmd_node->next)
@@ -6296,14 +6298,14 @@ RD_VIEW_RULE_UI_FUNCTION_DEF(pending_file)
MemoryZeroStruct(&pves->deferred_cmds); MemoryZeroStruct(&pves->deferred_cmds);
} }
//- rjf: if entity is ready, move params tree to scratch for new command //- rjf: if file is ready, move params tree to scratch for new command
MD_Node *params_copy = &md_nil_node; MD_Node *params_copy = &md_nil_node;
if(file_is_ready) if(file_is_ready)
{ {
params_copy = md_tree_copy(scratch.arena, params); params_copy = md_tree_copy(scratch.arena, params);
} }
//- rjf: if entity is ready, replace this view with the correct one, if any viewer is specified //- rjf: if file is ready, replace this view with the correct one, if any viewer is specified
if(file_is_ready && viewer_kind != RD_ViewRuleKind_Null) if(file_is_ready && viewer_kind != RD_ViewRuleKind_Null)
{ {
RD_ViewRuleInfo *view_rule_info = rd_view_rule_info_from_kind(viewer_kind); RD_ViewRuleInfo *view_rule_info = rd_view_rule_info_from_kind(viewer_kind);
@@ -6446,7 +6448,7 @@ RD_VIEW_RULE_UI_FUNCTION_DEF(text)
//- rjf: build code contents //- rjf: build code contents
// //
DI_KeyList dbgi_keys = {0}; DI_KeyList dbgi_keys = {0};
if(!file_is_missing && key_has_data) if(!file_is_missing)
{ {
RD_CodeViewBuildResult result = rd_code_view_build(scratch.arena, cv, RD_CodeViewBuildFlag_All, code_area_rect, data, &info, 0, r1u64(0, 0), di_key_zero()); RD_CodeViewBuildResult result = rd_code_view_build(scratch.arena, cv, RD_CodeViewBuildFlag_All, code_area_rect, data, &info, 0, r1u64(0, 0), di_key_zero());
dbgi_keys = result.dbgi_keys; dbgi_keys = result.dbgi_keys;