mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-08-07 06:18:42 +00:00
allow base/opl style slices in slice view rule
This commit is contained in:
@@ -376,6 +376,7 @@ E_LOOKUP_INFO_FUNCTION_DEF(slice)
|
|||||||
|
|
||||||
// rjf: choose base pointer & count members
|
// rjf: choose base pointer & count members
|
||||||
E_Member *base_ptr_member = 0;
|
E_Member *base_ptr_member = 0;
|
||||||
|
E_Member *opl_ptr_member = 0;
|
||||||
E_Member *count_member = 0;
|
E_Member *count_member = 0;
|
||||||
for(U64 idx = 0; idx < members.count; idx += 1)
|
for(U64 idx = 0; idx < members.count; idx += 1)
|
||||||
{
|
{
|
||||||
@@ -390,10 +391,18 @@ E_LOOKUP_INFO_FUNCTION_DEF(slice)
|
|||||||
{
|
{
|
||||||
base_ptr_member = &members.v[idx];
|
base_ptr_member = &members.v[idx];
|
||||||
}
|
}
|
||||||
|
if(opl_ptr_member == 0 && e_type_kind_is_pointer_or_ref(member_type_kind))
|
||||||
|
{
|
||||||
|
opl_ptr_member = &members.v[idx];
|
||||||
|
}
|
||||||
if(count_member != 0 && base_ptr_member != 0)
|
if(count_member != 0 && base_ptr_member != 0)
|
||||||
{
|
{
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
else if(base_ptr_member != 0 && opl_ptr_member != 0)
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// rjf: determine architecture
|
// rjf: determine architecture
|
||||||
@@ -422,6 +431,15 @@ E_LOOKUP_INFO_FUNCTION_DEF(slice)
|
|||||||
base_ptr_vaddr = base_ptr_member_value.u64;
|
base_ptr_vaddr = base_ptr_member_value.u64;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// rjf: evaluate opl ptr member, determine opl address
|
||||||
|
U64 opl_ptr_vaddr = 0;
|
||||||
|
if(count_member == 0 && opl_ptr_member != 0)
|
||||||
|
{
|
||||||
|
E_Expr *opl_ptr_member_expr = e_expr_irext_member_access(arena, &e_expr_nil, lhs, opl_ptr_member->name);
|
||||||
|
E_Value opl_ptr_member_value = e_value_from_expr(opl_ptr_member_expr);
|
||||||
|
opl_ptr_vaddr = opl_ptr_member_value.u64;
|
||||||
|
}
|
||||||
|
|
||||||
// rjf: determine element type
|
// rjf: determine element type
|
||||||
E_TypeKey element_type_key = zero_struct;
|
E_TypeKey element_type_key = zero_struct;
|
||||||
if(base_ptr_member != 0)
|
if(base_ptr_member != 0)
|
||||||
@@ -429,6 +447,16 @@ E_LOOKUP_INFO_FUNCTION_DEF(slice)
|
|||||||
element_type_key = e_type_direct_from_key(base_ptr_member->type_key);
|
element_type_key = e_type_direct_from_key(base_ptr_member->type_key);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// rjf: if no count, but base/opl, swap base/opl if needed, and measure count
|
||||||
|
if(count_member == 0 && opl_ptr_member != 0 && base_ptr_member != 0)
|
||||||
|
{
|
||||||
|
U64 min_vaddr = Min(base_ptr_vaddr, opl_ptr_vaddr);
|
||||||
|
U64 max_vaddr = Max(base_ptr_vaddr, opl_ptr_vaddr);
|
||||||
|
base_ptr_vaddr = min_vaddr;
|
||||||
|
opl_ptr_vaddr = max_vaddr;
|
||||||
|
count = (opl_ptr_vaddr - base_ptr_vaddr) / e_type_byte_size_from_key(element_type_key);
|
||||||
|
}
|
||||||
|
|
||||||
// rjf: fill
|
// rjf: fill
|
||||||
if(count_member && base_ptr_member)
|
if(count_member && base_ptr_member)
|
||||||
{
|
{
|
||||||
|
|||||||
+29
-19
@@ -5554,8 +5554,6 @@ rd_view_ui(Rng2F32 rect)
|
|||||||
//
|
//
|
||||||
if(vs->is_searching) UI_Focus(UI_FocusKind_On)
|
if(vs->is_searching) UI_Focus(UI_FocusKind_On)
|
||||||
{
|
{
|
||||||
String8 cmd_name = vs->search_cmd_name;
|
|
||||||
RD_CmdKindInfo *cmd_kind_info = rd_cmd_kind_info_from_string(cmd_name);
|
|
||||||
if(ui_is_focus_active() && ui_slot_press(UI_EventActionSlot_Cancel))
|
if(ui_is_focus_active() && ui_slot_press(UI_EventActionSlot_Cancel))
|
||||||
{
|
{
|
||||||
vs->is_searching = 0;
|
vs->is_searching = 0;
|
||||||
@@ -5563,17 +5561,7 @@ rd_view_ui(Rng2F32 rect)
|
|||||||
}
|
}
|
||||||
if(ui_is_focus_active() && ui_slot_press(UI_EventActionSlot_Accept))
|
if(ui_is_focus_active() && ui_slot_press(UI_EventActionSlot_Accept))
|
||||||
{
|
{
|
||||||
RD_RegsScope()
|
rd_cmd(RD_CmdKind_CompleteQuery);
|
||||||
{
|
|
||||||
rd_regs_copy_contents(vs->search_arena, rd_regs(), vs->search_regs);
|
|
||||||
rd_regs_fill_slot_from_string(cmd_kind_info->query.slot, str8(vs->search_buffer, vs->search_string_size));
|
|
||||||
rd_push_cmd(cmd_name, rd_regs());
|
|
||||||
}
|
|
||||||
if(!(cmd_kind_info->query.flags & RD_QueryFlag_KeepOldInput))
|
|
||||||
{
|
|
||||||
vs->is_searching = 0;
|
|
||||||
vs->search_string_size = 0;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -7139,19 +7127,19 @@ rd_window_frame(void)
|
|||||||
if(query_is_open)
|
if(query_is_open)
|
||||||
{
|
{
|
||||||
//- rjf: unpack query parameters
|
//- rjf: unpack query parameters
|
||||||
RD_Cfg *query = rd_immediate_cfg_from_keyf("window_query_%p", window);
|
|
||||||
String8 cmd_name = ws->query_cmd_name;
|
String8 cmd_name = ws->query_cmd_name;
|
||||||
RD_CmdKindInfo *cmd_kind_info = rd_cmd_kind_info_from_string(cmd_name);
|
RD_CmdKindInfo *cmd_kind_info = rd_cmd_kind_info_from_string(cmd_name);
|
||||||
|
B32 size_query_by_expr_eval = (cmd_kind_info->query.expr.size == 0);
|
||||||
|
|
||||||
|
//- rjf: build & prepare view for query ui
|
||||||
|
RD_Cfg *query = rd_immediate_cfg_from_keyf("window_query_%p", window);
|
||||||
RD_Cfg *view = rd_cfg_child_from_string_or_alloc(query, str8_lit("watch"));
|
RD_Cfg *view = rd_cfg_child_from_string_or_alloc(query, str8_lit("watch"));
|
||||||
RD_Cfg *expr = rd_cfg_child_from_string_or_alloc(view, str8_lit("expression"));
|
RD_Cfg *expr = rd_cfg_child_from_string_or_alloc(view, str8_lit("expression"));
|
||||||
RD_Cfg *cmd = rd_cfg_child_from_string_or_alloc(view, str8_lit("cmd"));
|
|
||||||
rd_cfg_new_replace(cmd, cmd_name);
|
|
||||||
rd_cfg_child_from_string_or_alloc(view, str8_lit("lister"));
|
rd_cfg_child_from_string_or_alloc(view, str8_lit("lister"));
|
||||||
B32 size_query_by_expr_eval = (cmd_kind_info->query.expr.size == 0);
|
|
||||||
RD_ViewState *vs = rd_view_state_from_cfg(view);
|
RD_ViewState *vs = rd_view_state_from_cfg(view);
|
||||||
vs->is_searching = 1;
|
vs->is_searching = 1;
|
||||||
arena_clear(vs->search_arena);
|
arena_clear(vs->search_arena);
|
||||||
vs->search_cmd_name = push_str8_copy(vs->search_arena, ws->query_cmd_name);
|
vs->search_cmd_name = push_str8_copy(vs->search_arena, cmd_name);
|
||||||
vs->search_regs = rd_regs_copy(vs->search_arena, ws->query_regs);
|
vs->search_regs = rd_regs_copy(vs->search_arena, ws->query_regs);
|
||||||
String8 query_expression = cmd_kind_info->query.expr;
|
String8 query_expression = cmd_kind_info->query.expr;
|
||||||
if(query_expression.size == 0)
|
if(query_expression.size == 0)
|
||||||
@@ -15687,6 +15675,28 @@ Z(getting_started)
|
|||||||
}break;
|
}break;
|
||||||
case RD_CmdKind_CompleteQuery:
|
case RD_CmdKind_CompleteQuery:
|
||||||
{
|
{
|
||||||
|
RD_Cfg *view = rd_cfg_from_id(rd_regs()->view);
|
||||||
|
RD_ViewState *vs = rd_view_state_from_cfg(view);
|
||||||
|
String8 cmd_name = vs->search_cmd_name;
|
||||||
|
RD_CmdKindInfo *cmd_kind_info = rd_cmd_kind_info_from_string(cmd_name);
|
||||||
|
RD_RegsScope()
|
||||||
|
{
|
||||||
|
rd_regs_copy_contents(vs->search_arena, rd_regs(), vs->search_regs);
|
||||||
|
rd_regs_fill_slot_from_string(cmd_kind_info->query.slot, str8(vs->search_buffer, vs->search_string_size));
|
||||||
|
rd_push_cmd(cmd_name, rd_regs());
|
||||||
|
}
|
||||||
|
if(cmd_kind_info->query.flags & RD_QueryFlag_Floating)
|
||||||
|
{
|
||||||
|
RD_Cfg *window = rd_cfg_from_id(rd_regs()->window);
|
||||||
|
RD_WindowState *ws = rd_window_state_from_cfg(window);
|
||||||
|
ws->query_is_active = 0;
|
||||||
|
}
|
||||||
|
else if(!(cmd_kind_info->query.flags & RD_QueryFlag_KeepOldInput))
|
||||||
|
{
|
||||||
|
vs->is_searching = 0;
|
||||||
|
vs->search_string_size = 0;
|
||||||
|
}
|
||||||
|
|
||||||
#if 0 // TODO(rjf): @cfg (query completion)
|
#if 0 // TODO(rjf): @cfg (query completion)
|
||||||
RD_Window *ws = rd_window_from_handle(rd_regs()->window);
|
RD_Window *ws = rd_window_from_handle(rd_regs()->window);
|
||||||
String8 query_cmd_name = ws->query_cmd_name;
|
String8 query_cmd_name = ws->query_cmd_name;
|
||||||
@@ -16046,7 +16056,7 @@ Z(getting_started)
|
|||||||
RD_Cfg *wdir = rd_cfg_new(target, str8_lit("working_directory"));
|
RD_Cfg *wdir = rd_cfg_new(target, str8_lit("working_directory"));
|
||||||
rd_cfg_newf(wdir, "%S/", working_directory);
|
rd_cfg_newf(wdir, "%S/", working_directory);
|
||||||
}
|
}
|
||||||
rd_cmd(RD_CmdKind_SelectCfg, .cfg = target->id);
|
rd_cmd(RD_CmdKind_SelectTarget, .cfg = target->id);
|
||||||
}break;
|
}break;
|
||||||
|
|
||||||
//- rjf: jit-debugger registration
|
//- rjf: jit-debugger registration
|
||||||
|
|||||||
Reference in New Issue
Block a user