clean up flow of active-targetless launch path; instead of just erroring, prompt user with selection, select if none selected, etc.

This commit is contained in:
Ryan Fleury
2025-05-01 11:04:14 -07:00
parent 306ad2d382
commit 36e77e9691
2 changed files with 46 additions and 2 deletions
+10 -2
View File
@@ -1222,7 +1222,15 @@ internal int
e_type_qsort_compare_members_offset(E_Member *a, E_Member *b)
{
int result = 0;
if(a->off < b->off)
if(a->kind < b->kind)
{
result = -1;
}
else if(a->kind > b->kind)
{
result = +1;
}
else if(a->off < b->off)
{
result = -1;
}
@@ -1272,7 +1280,7 @@ e_type_data_members_from_key(Arena *arena, E_TypeKey key)
n->v.inheritance_key_chain = task->inheritance_chain;
SLLQueuePush(members_list.first, members_list.last, n);
members_list.count += 1;
members_need_offset_sort = members_need_offset_sort || (n->v.off < last_member_off);
members_need_offset_sort = members_need_offset_sort || (type->members[member_idx].kind == E_MemberKind_DataField && n->v.off < last_member_off);
last_member_off = n->v.off;
}
else if(type->members[member_idx].kind == E_MemberKind_Base)
+36
View File
@@ -12200,6 +12200,7 @@ rd_frame(void)
case RD_CmdKind_StepOver:
case RD_CmdKind_Restart:
{
// rjf: reset hit counts
CTRL_EntityArray processes = ctrl_entity_array_from_kind(d_state->ctrl_entity_store, CTRL_EntityKind_Process);
if(processes.count == 0 || kind == RD_CmdKind_Restart)
{
@@ -12210,6 +12211,41 @@ rd_frame(void)
rd_cfg_new_replace(hit_count, str8_lit("0"));
}
}
// rjf: determine if we have active targets
RD_CfgList targets = rd_cfg_top_level_list_from_string(scratch.arena, str8_lit("target"));
B32 has_active_targets = 0;
for(RD_CfgNode *n = targets.first; n != 0; n = n->next)
{
RD_Cfg *target = n->v;
if(!rd_disabled_from_cfg(target))
{
has_active_targets = 1;
break;
}
}
// rjf: run -> no active targets, no processes? -> do helper for launch-and-run
if((kind == RD_CmdKind_Run ||
kind == RD_CmdKind_StepInto ||
kind == RD_CmdKind_StepOver) && processes.count == 0)
{
if(!has_active_targets)
{
rd_cmd(RD_CmdKind_RunCommand, .cmd_name = rd_cmd_kind_info_table[kind == RD_CmdKind_Run ? RD_CmdKind_LaunchAndRun : RD_CmdKind_LaunchAndStepInto].string);
break;
}
}
// rjf: if this is a low-level operation, e.g. launch-and-run or launch-and-step-into,
// and we do not have any active targets, then let's just select the ones that we are
// launching.
if(!has_active_targets &&
(kind == RD_CmdKind_LaunchAndRun ||
kind == RD_CmdKind_LaunchAndStepInto))
{
rd_cmd(RD_CmdKind_SelectTarget, .cfg = rd_regs()->cfg);
}
} // fallthrough
default:
{