diff --git a/src/eval/eval_parse.c b/src/eval/eval_parse.c index 7c9bf0cc..9c353772 100644 --- a/src/eval/eval_parse.c +++ b/src/eval/eval_parse.c @@ -409,6 +409,7 @@ e_expr_copy(Arena *arena, E_Expr *src) E_Expr *dst_parent; E_Expr *src; B32 is_ref; + B32 is_sib; }; Task start_task = {0, &e_expr_nil, src}; Task *first_task = &start_task; @@ -431,10 +432,23 @@ e_expr_copy(Arena *arena, E_Expr *src) { t->dst_parent->ref = dst; } + else if(t->is_sib) + { + t->dst_parent->next = dst; + dst->prev = t->dst_parent; + } else { e_expr_push_child(t->dst_parent, dst); } + if(t->src->next != &e_expr_nil) + { + Task *task = push_array(scratch.arena, Task, 1); + task->dst_parent = dst; + task->src = t->src->next; + task->is_sib = 1; + SLLQueuePush(first_task, last_task, task); + } if(t->src->ref != &e_expr_nil) { Task *task = push_array(scratch.arena, Task, 1); diff --git a/src/eval_visualization/eval_visualization_core.c b/src/eval_visualization/eval_visualization_core.c index c9e80938..5a095cbf 100644 --- a/src/eval_visualization/eval_visualization_core.c +++ b/src/eval_visualization/eval_visualization_core.c @@ -520,7 +520,7 @@ ev_block_tree_from_expr(Arena *arena, EV_View *view, String8 filter, E_Expr *exp tree.total_row_count += 1; tree.total_item_count += 1; - //- rjf: iterate all expansions & generate blocks for each + //- rjf: generate initial task, for root's evaluation typedef struct Task Task; struct Task { @@ -534,6 +534,8 @@ ev_block_tree_from_expr(Arena *arena, EV_View *view, String8 filter, E_Expr *exp Task start_task = {0, tree.root, tree.root->eval, 1, 0}; Task *first_task = &start_task; Task *last_task = first_task; + + //- rjf: iterate all expansions & generate blocks for each for(Task *t = first_task; t != 0; t = t->next) { // rjf: get task key @@ -714,6 +716,19 @@ ev_block_tree_from_expr(Arena *arena, EV_View *view, String8 filter, E_Expr *exp } } } + + // rjf: if this expr has a sibling, push another task to continue the chain + if(t->eval.expr->next != &e_expr_nil) + { + Task *task = push_array(scratch.arena, Task, 1); + task->next = t->next; + t->next = task; + task->parent_block = t->parent_block; + task->eval = e_eval_from_expr(arena, t->eval.expr->next); + task->child_id = t->child_id; + task->split_relative_idx = 0; + task->default_expanded = t->default_expanded; + } } scratch_end(scratch); } @@ -797,7 +812,7 @@ ev_block_range_list_from_tree(Arena *arena, EV_BlockTree *block_tree) // rjf: generate task for post-child rows, if any, after children Rng1U64 remainder_range = r1u64(t->next_child->split_relative_idx+1, t->block_relative_range.max); - if(remainder_range.max > remainder_range.min) + if(remainder_range.max >= remainder_range.min) { BlockTask *remainder_task = push_array(scratch.arena, BlockTask, 1); remainder_task->next = child_task->next; diff --git a/src/raddbg/generated/raddbg.meta.c b/src/raddbg/generated/raddbg.meta.c index c8476d82..f033bd3a 100644 --- a/src/raddbg/generated/raddbg.meta.c +++ b/src/raddbg/generated/raddbg.meta.c @@ -426,7 +426,7 @@ RD_CmdKindInfo rd_cmd_kind_info_table[215] = { str8_lit_comp("set_entity_name"), str8_lit_comp("Sets the passed entity's name."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, { str8_lit_comp("attach"), str8_lit_comp("Attaches to a process that is already running on the local machine."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*1)|(RD_QueryFlag_Required*1), RD_RegSlot_PID, str8_lit_comp("query:unattached_processes"), str8_lit_comp(""), CTRL_EntityKind_Null}}, { str8_lit_comp("exit"), str8_lit_comp("Exits the debugger."), str8_lit_comp("quit,close,abort"), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("open_lister"), str8_lit_comp("Opens the lister."), str8_lit_comp("help,cmd"), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp("query:lister"), str8_lit_comp(""), CTRL_EntityKind_Null}}, +{ str8_lit_comp("open_lister"), str8_lit_comp("Opens the lister."), str8_lit_comp("help,cmd"), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, { str8_lit_comp("run_command"), str8_lit_comp("Runs a command from the command palette."), str8_lit_comp("help,cmd"), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*1)|(RD_QueryFlag_Required*1), RD_RegSlot_CmdName, str8_lit_comp("query:commands"), str8_lit_comp("commands"), CTRL_EntityKind_Null}}, { str8_lit_comp("os_event"), str8_lit_comp(""), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, { str8_lit_comp("select_thread"), str8_lit_comp("Selects a thread."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*1), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*1)|(RD_QueryFlag_Required*1), RD_RegSlot_Thread, str8_lit_comp("query:threads"), str8_lit_comp(""), CTRL_EntityKind_Thread}}, diff --git a/src/raddbg/raddbg.mdesk b/src/raddbg/raddbg.mdesk index 966e7bb7..826a785b 100644 --- a/src/raddbg/raddbg.mdesk +++ b/src/raddbg/raddbg.mdesk @@ -450,7 +450,7 @@ RD_CmdTable: // | | | | {Exit 1 1 "" Null null Nil Null 0 0 0 0 0 0 0 X "exit" "Exit" "Exits the debugger." "quit,close,abort" "" } //- rjf: top-level lister - {OpenLister 1 1 "query:lister" Null null Nil Null 0 0 0 0 0 0 0 Null "open_lister" "Open Lister" "Opens the lister." "help,cmd" "" } + {OpenLister 1 1 "" Null null Nil Null 0 0 0 0 0 0 0 Null "open_lister" "Open Lister" "Opens the lister." "help,cmd" "" } //- rjf: command runner {RunCommand 1 1 "query:commands" CmdName commands Nil Null 0 0 0 0 0 1 1 Null "run_command" "Run Command" "Runs a command from the command palette." "help,cmd" "" } diff --git a/src/raddbg/raddbg_core.c b/src/raddbg/raddbg_core.c index 40365af8..22c8ca4a 100644 --- a/src/raddbg/raddbg_core.c +++ b/src/raddbg/raddbg_core.c @@ -12492,18 +12492,11 @@ rd_frame(void) #endif }break; - //- rjf: top-level lister + //- rjf: open lister case RD_CmdKind_OpenLister: { - RD_ListerFlags lister_flags = (RD_ListerFlag_LineEdit| - RD_ListerFlag_Descriptions| - RD_ListerFlag_KindLabel| - RD_ListerFlag_Procedures| - RD_ListerFlag_Files| - RD_ListerFlag_Commands| - RD_ListerFlag_Settings| - RD_ListerFlag_SystemProcesses); - rd_cmd(RD_CmdKind_PushQuery, .lister_flags = lister_flags); + String8 expr = push_str8f(scratch.arena, "query:commands, query:recent_files, query:recent_projects, query:procedures, query:$%I64x", rd_regs()->view); + rd_cmd(RD_CmdKind_PushQuery, .expr = expr, .do_implicit_root = 1); }break; //- rjf: command fast path diff --git a/src/raddbg/raddbg_eval.c b/src/raddbg/raddbg_eval.c index 5c61ffa4..e87c0ac8 100644 --- a/src/raddbg/raddbg_eval.c +++ b/src/raddbg/raddbg_eval.c @@ -29,7 +29,7 @@ E_TYPE_EXPAND_INFO_FUNCTION_DEF(commands) } else { - result.expr_count = RD_CmdKind_COUNT; + result.expr_count = RD_CmdKind_COUNT - 1; } return result; } @@ -67,7 +67,7 @@ E_TYPE_EXPAND_RANGE_FUNCTION_DEF(commands) { for(U64 idx = idx_range.min; idx < idx_range.max; idx += 1, out_idx += 1) { - RD_CmdKind cmd_kind = (RD_CmdKind)idx; + RD_CmdKind cmd_kind = (RD_CmdKind)(idx+1); String8 cmd_name = rd_cmd_kind_info_table[cmd_kind].string; E_Expr *expr = e_push_expr(arena, E_ExprKind_LeafValue, 0); expr->type_key = e_type_key_cons(.kind = E_TypeKind_U64, .name = str8_lit("command")); diff --git a/src/raddbg/raddbg_widgets.c b/src/raddbg/raddbg_widgets.c index e849459d..536ad443 100644 --- a/src/raddbg/raddbg_widgets.c +++ b/src/raddbg/raddbg_widgets.c @@ -3235,8 +3235,8 @@ rd_cell(RD_CellParams *params, String8 string) { B32 is_toggled = !!params->toggled_out[0]; F32 toggle_t = ui_anim(ui_key_from_stringf(key, "toggled"), (F32)is_toggled, .initial = (F32)is_toggled); - F32 padding_px = floor_f32(ui_top_font_size()*0.65f); - F32 height_px = ui_top_px_height() - padding_px*2.f; + F32 height_px = ui_top_font_size() * 1.75f; + F32 padding_px = (ui_top_px_height() - height_px) / 2.f; UI_PrefWidth(ui_children_sum(1.f)) UI_HeightFill UI_Column UI_Padding(ui_px(padding_px, 1.f))