eliminate more old view settings code, simplify new, also clean up the targetless launch flow even more - if we only have one target, but it's inactive, and the user is trying to launch, then it doesn't hurt to just act as if that target was selected, then select it for them...

This commit is contained in:
Ryan Fleury
2025-05-01 17:04:29 -07:00
parent afc3a1a818
commit 2dbe8d42eb
5 changed files with 73 additions and 154 deletions
-46
View File
@@ -1219,52 +1219,6 @@ e_base_offset_from_eval(E_Eval eval)
return eval.value.u64;
}
internal Rng1U64
e_range_from_eval(E_Eval eval)
{
U64 size = 0;
E_Type *type = e_type_from_key__cached(eval.irtree.type_key);
if(type->kind == E_TypeKind_Lens)
{
for EachIndex(idx, type->count)
{
E_Expr *arg = type->args[idx];
if(arg->kind == E_ExprKind_Define && str8_match(arg->first->string, str8_lit("size"), 0))
{
size = e_value_from_expr(arg->first->next).u64;
break;
}
}
}
E_TypeKey type_key = e_type_key_unwrap(eval.irtree.type_key, E_TypeUnwrapFlag_AllDecorative);
E_TypeKind type_kind = e_type_kind_from_key(type_key);
E_TypeKey direct_type_key = e_type_key_unwrap(type_key, E_TypeUnwrapFlag_All);
E_TypeKind direct_type_kind = e_type_kind_from_key(direct_type_key);
if(size == 0 && e_type_kind_is_pointer_or_ref(type_kind) && (direct_type_kind == E_TypeKind_Struct ||
direct_type_kind == E_TypeKind_Union ||
direct_type_kind == E_TypeKind_Class ||
direct_type_kind == E_TypeKind_Array))
{
size = e_type_byte_size_from_key(direct_type_key);
}
if(size == 0 && eval.irtree.mode == E_Mode_Offset && (type_kind == E_TypeKind_Struct ||
type_kind == E_TypeKind_Union ||
type_kind == E_TypeKind_Class ||
type_kind == E_TypeKind_Array))
{
size = e_type_byte_size_from_key(type_key);
}
if(size == 0)
{
size = KB(16);
}
Rng1U64 result = {0};
result.min = e_base_offset_from_eval(eval);
result.max = result.min + size;
return result;
}
////////////////////////////////
//~ rjf: Debug Functions
-1
View File
@@ -1179,7 +1179,6 @@ internal E_Key e_key_wrapf(E_Key key, char *fmt, ...);
//~ rjf: Eval Info Extraction
internal U64 e_base_offset_from_eval(E_Eval eval);
internal Rng1U64 e_range_from_eval(E_Eval eval);
////////////////////////////////
//~ rjf: Debug Functions
+34 -75
View File
@@ -5367,45 +5367,48 @@ rd_view_query_input(void)
return string;
}
internal RD_Cfg *
rd_view_cfg_from_string(String8 string)
internal String8
rd_view_setting_from_name(String8 name)
{
RD_Cfg *view = rd_cfg_from_id(rd_regs()->view);
RD_Cfg *cfg = rd_cfg_child_from_string(view, string);
return cfg;
String8 result = rd_cfg_child_from_string(view, name)->first->string;
if(result.size == 0)
{
result = rd_default_setting_from_names(view->string, name);
}
return result;
}
internal E_Value
rd_view_cfg_value_from_string(String8 string)
rd_view_setting_value_from_name(String8 name)
{
RD_Cfg *root = rd_view_cfg_from_string(string);
String8 expr = root->first->string;
String8 expr = rd_view_setting_from_name(name);
E_Eval eval = e_eval_from_string(expr);
E_Value result = e_value_eval_from_eval(eval).value;
return result;
}
internal B32
rd_view_cfg_b32_from_string(String8 string)
rd_view_setting_b32_from_name(String8 name)
{
RD_Cfg *root = rd_view_cfg_from_string(string);
B32 result = !!e_value_from_stringf("(bool)(%S)", root->first->string).u64;
String8 string = rd_view_setting_from_name(name);
B32 result = !!e_value_from_stringf("(bool)(%S)", string).u64;
return result;
}
internal U64
rd_view_cfg_u64_from_string(String8 string)
rd_view_setting_u64_from_name(String8 name)
{
RD_Cfg *root = rd_view_cfg_from_string(string);
U64 result = e_value_from_stringf("(uint64)(%S)", root->first->string).u64;
String8 string = rd_view_setting_from_name(name);
U64 result = e_value_from_stringf("(uint64)(%S)", string).u64;
return result;
}
internal F32
rd_view_cfg_f32_from_string(String8 string)
rd_view_setting_f32_from_name(String8 name)
{
RD_Cfg *root = rd_view_cfg_from_string(string);
F32 result = e_value_from_stringf("(float32)(%S)", root->first->string).f32;
String8 string = rd_view_setting_from_name(name);
F32 result = e_value_from_stringf("(float32)(%S)", string).f32;
return result;
}
@@ -5466,57 +5469,6 @@ rd_arch_from_eval(E_Eval eval)
return arch;
}
internal R_Tex2DFormat
rd_tex2dformat_from_eval(E_Eval eval)
{
R_Tex2DFormat fmt = R_Tex2DFormat_RGBA8;
B32 got_fmt = 0;
// rjf: try explicitly passed formats
E_Type *type = e_type_from_key__cached(eval.irtree.type_key);
if(type->kind == E_TypeKind_Lens)
{
for EachIndex(idx, type->count)
{
E_Expr *arg = type->args[idx];
if(arg->kind == E_ExprKind_Define && str8_match(arg->first->string, str8_lit("fmt"), 0))
{
got_fmt = 1;
for EachEnumVal(R_Tex2DFormat, f)
{
if(str8_match(arg->first->next->string, r_tex2d_format_display_string_table[f], StringMatchFlag_CaseInsensitive))
{
fmt = f;
break;
}
}
}
}
}
// rjf: try implicit non-define arguments
if(type->kind == E_TypeKind_Lens)
{
for EachIndex(idx, type->count)
{
E_Expr *arg = type->args[idx];
if(arg->kind == E_ExprKind_LeafIdentifier)
{
for EachEnumVal(R_Tex2DFormat, f)
{
if(str8_match(arg->string, r_tex2d_format_display_string_table[f], StringMatchFlag_CaseInsensitive))
{
fmt = f;
break;
}
}
}
}
}
return fmt;
}
//- rjf: pushing/attaching view resources
internal void *
@@ -8698,7 +8650,7 @@ rd_window_frame(void)
{
// rjf: gather info for this tab
B32 tab_is_selected = (tab == panel->selected_tab);
B32 tab_is_auto = rd_view_cfg_b32_from_string(str8_lit("auto"));
B32 tab_is_auto = rd_view_setting_b32_from_name(str8_lit("auto"));
// rjf: begin vertical region for this tab
ui_set_next_child_layout_axis(Axis2_Y);
@@ -12088,6 +12040,16 @@ rd_frame(void)
}
}
// rjf: run -> no active targets, no processes, but we only have one target? -> just launch it, then select it
if((kind == RD_CmdKind_Run ||
kind == RD_CmdKind_StepInto ||
kind == RD_CmdKind_StepOver) && processes.count == 0 && targets.count == 1 && !has_active_targets)
{
rd_cmd(kind == RD_CmdKind_Run ? RD_CmdKind_LaunchAndRun : RD_CmdKind_LaunchAndStepInto, .cfg = targets.first->v->id);
rd_cmd(RD_CmdKind_SelectTarget, .cfg = targets.first->v->id);
break;
}
// rjf: run -> no targets at all, no processes? -> do helper for add-target
if((kind == RD_CmdKind_Run ||
kind == RD_CmdKind_StepInto ||
@@ -12100,13 +12062,10 @@ rd_frame(void)
// 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)
kind == RD_CmdKind_StepOver) && processes.count == 0 && !has_active_targets)
{
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;
}
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,
@@ -14010,7 +13969,7 @@ rd_frame(void)
RD_RegsScope(.tab = tab->id, .view = tab->id)
{
if(str8_match(tab->string, str8_lit("text"), 0) &&
rd_view_cfg_b32_from_string(str8_lit("auto")))
rd_view_setting_b32_from_name(str8_lit("auto")))
{
panel_w_auto = panel;
view_w_auto = tab;
+5 -6
View File
@@ -915,16 +915,15 @@ internal UI_ScrollPt2 rd_view_scroll_pos(void);
internal EV_View *rd_view_eval_view(void);
internal String8 rd_view_query_cmd(void);
internal String8 rd_view_query_input(void);
internal RD_Cfg *rd_view_cfg_from_string(String8 string);
internal E_Value rd_view_cfg_value_from_string(String8 string);
internal B32 rd_view_cfg_b32_from_string(String8 string);
internal U64 rd_view_cfg_u64_from_string(String8 string);
internal F32 rd_view_cfg_f32_from_string(String8 string);
internal String8 rd_view_setting_from_name(String8 string);
internal E_Value rd_view_setting_value_from_name(String8 string);
internal B32 rd_view_setting_b32_from_name(String8 string);
internal U64 rd_view_setting_u64_from_name(String8 string);
internal F32 rd_view_setting_f32_from_name(String8 string);
//- rjf: evaluation & tag (a view's 'call') parameter extraction
internal TXT_LangKind rd_lang_kind_from_eval(E_Eval eval);
internal Arch rd_arch_from_eval(E_Eval eval);
internal R_Tex2DFormat rd_tex2dformat_from_eval(E_Eval eval);
//- rjf: pushing/attaching view resources
internal void *rd_view_state_by_size(U64 size);
+34 -26
View File
@@ -1898,23 +1898,23 @@ RD_VIEW_UI_FUNCTION_DEF(text)
rd_regs()->file_path = rd_file_path_from_eval(rd_frame_arena(), eval);
rd_regs()->vaddr = 0;
rd_regs()->prefer_disasm = 0;
rd_regs()->cursor.line = rd_view_cfg_value_from_string(str8_lit("cursor_line")).s64;
rd_regs()->cursor.column = rd_view_cfg_value_from_string(str8_lit("cursor_column")).s64;
rd_regs()->mark.line = rd_view_cfg_value_from_string(str8_lit("mark_line")).s64;
rd_regs()->mark.column = rd_view_cfg_value_from_string(str8_lit("mark_column")).s64;
rd_regs()->cursor.line = rd_view_setting_value_from_name(str8_lit("cursor_line")).s64;
rd_regs()->cursor.column = rd_view_setting_value_from_name(str8_lit("cursor_column")).s64;
rd_regs()->mark.line = rd_view_setting_value_from_name(str8_lit("mark_line")).s64;
rd_regs()->mark.column = rd_view_setting_value_from_name(str8_lit("mark_column")).s64;
if(rd_regs()->cursor.line == 0) { rd_regs()->cursor.line = 1; }
if(rd_regs()->cursor.column == 0) { rd_regs()->cursor.column = 1; }
if(rd_regs()->mark.line == 0) { rd_regs()->mark.line = 1; }
if(rd_regs()->mark.column == 0) { rd_regs()->mark.column = 1; }
U64 base_offset = e_base_offset_from_eval(eval);
U64 size = rd_view_cfg_value_from_string(str8_lit("size")).u64;
U64 size = rd_view_setting_value_from_name(str8_lit("size")).u64;
if(size == 0)
{
size = e_type_byte_size_from_key(e_type_key_unwrap(eval.irtree.type_key, E_TypeUnwrapFlag_AllDecorative));
}
Rng1U64 range = r1u64(base_offset, base_offset+size);
rd_regs()->text_key = rd_key_from_eval_space_range(eval.space, range, 1);
String8 lang = rd_view_cfg_from_string(str8_lit("lang"))->first->string;
String8 lang = rd_view_setting_from_name(str8_lit("lang"));
if(lang.size == 0)
{
rd_regs()->lang_kind = rd_lang_kind_from_eval(eval);
@@ -2181,7 +2181,7 @@ RD_VIEW_UI_FUNCTION_DEF(disasm)
space = auto_space;
}
U64 base_offset = e_base_offset_from_eval(eval);
U64 size = rd_view_cfg_value_from_string(str8_lit("size")).u64;
U64 size = rd_view_setting_value_from_name(str8_lit("size")).u64;
if(size == 0)
{
size = KB(16);
@@ -2360,14 +2360,13 @@ RD_VIEW_UI_FUNCTION_DEF(memory)
//- rjf: unpack parameterization info
//
F32 main_font_size = ui_bottom_font_size();
Rng1U64 view_range = e_range_from_eval(eval);
U64 base_offset = e_base_offset_from_eval(eval);
U64 size = rd_view_cfg_value_from_string(str8_lit("size")).u64;
U64 size = rd_view_setting_value_from_name(str8_lit("size")).u64;
if(size == 0)
{
size = e_type_byte_size_from_key(e_type_key_unwrap(eval.irtree.type_key, E_TypeUnwrapFlag_AllDecorative));
}
view_range = r1u64(base_offset, base_offset+size);
Rng1U64 view_range = r1u64(base_offset, base_offset+size);
if(eval.space.kind == 0)
{
eval.space = rd_eval_space_from_ctrl_entity(ctrl_entity_from_handle(d_state->ctrl_entity_store, rd_regs()->process), RD_EvalSpaceKind_CtrlEntity);
@@ -2377,13 +2376,13 @@ RD_VIEW_UI_FUNCTION_DEF(memory)
{
view_range = r1u64(0, 0x7FFFFFFFFFFFull);
}
U64 cursor_base_vaddr = rd_view_cfg_u64_from_string(str8_lit("cursor"));
U64 mark_base_vaddr = rd_view_cfg_u64_from_string(str8_lit("mark"));
U64 cursor_size = rd_view_cfg_u64_from_string(str8_lit("cursor_size"));
U64 cursor_base_vaddr = rd_view_setting_u64_from_name(str8_lit("cursor"));
U64 mark_base_vaddr = rd_view_setting_u64_from_name(str8_lit("mark"));
U64 cursor_size = rd_view_setting_u64_from_name(str8_lit("cursor_size"));
cursor_size = ClampBot(1, cursor_size);
U64 initial_cursor_base_vaddr = cursor_base_vaddr;
U64 initial_mark_base_vaddr = mark_base_vaddr;
U64 num_columns = rd_view_cfg_u64_from_string(str8_lit("num_columns"));
U64 num_columns = rd_view_setting_u64_from_name(str8_lit("num_columns"));
if(num_columns == 0)
{
num_columns = 16;
@@ -3378,8 +3377,17 @@ RD_VIEW_UI_FUNCTION_DEF(bitmap)
//////////////////////////////
//- rjf: evaluate expression
//
Vec2S32 dim = v2s32((S32)rd_view_cfg_u64_from_string(str8_lit("w")), (S32)rd_view_cfg_u64_from_string(str8_lit("h")));
R_Tex2DFormat fmt = rd_tex2dformat_from_eval(eval);
Vec2S32 dim = v2s32((S32)rd_view_setting_u64_from_name(str8_lit("w")), (S32)rd_view_setting_u64_from_name(str8_lit("h")));
String8 fmt_string = rd_view_setting_from_name(str8_lit("fmt"));
R_Tex2DFormat fmt = R_Tex2DFormat_RGBA8;
for EachNonZeroEnumVal(R_Tex2DFormat, f)
{
if(str8_match(fmt_string, r_tex2d_format_display_string_table[f], StringMatchFlag_CaseInsensitive))
{
fmt = f;
break;
}
}
U64 base_offset = e_base_offset_from_eval(eval);
U64 expected_size = dim.x*dim.y*r_tex2d_format_bytes_per_pixel_table[fmt];
Rng1U64 offset_range = r1u64(base_offset, base_offset + expected_size);
@@ -3387,11 +3395,11 @@ RD_VIEW_UI_FUNCTION_DEF(bitmap)
//////////////////////////////
//- rjf: unpack params
//
F32 zoom = rd_view_cfg_value_from_string(str8_lit("zoom")).f32;
F32 zoom = rd_view_setting_value_from_name(str8_lit("zoom")).f32;
Vec2F32 view_center_pos =
{
rd_view_cfg_value_from_string(str8_lit("x")).f32,
rd_view_cfg_value_from_string(str8_lit("y")).f32,
rd_view_setting_value_from_name(str8_lit("x")).f32,
rd_view_setting_value_from_name(str8_lit("y")).f32,
};
if(zoom == 0)
{
@@ -3517,7 +3525,7 @@ RD_VIEW_UI_FUNCTION_DEF(bitmap)
case R_Tex2DFormat_R8: {color = v4f32(((U8 *)(data.str+off_bytes))[0]/255.f, 0, 0, 1);}break;
case R_Tex2DFormat_RG8: {color = v4f32(((U8 *)(data.str+off_bytes))[0]/255.f, ((U8 *)(data.str+off_bytes))[1]/255.f, 0, 1);}break;
case R_Tex2DFormat_RGBA8: {color = v4f32(((U8 *)(data.str+off_bytes))[0]/255.f, ((U8 *)(data.str+off_bytes))[1]/255.f, ((U8 *)(data.str+off_bytes))[2]/255.f, ((U8 *)(data.str+off_bytes))[3]/255.f);}break;
case R_Tex2DFormat_BGRA8: {color = v4f32(((U8 *)(data.str+off_bytes))[3]/255.f, ((U8 *)(data.str+off_bytes))[2]/255.f, ((U8 *)(data.str+off_bytes))[1]/255.f, ((U8 *)(data.str+off_bytes))[0]/255.f);}break;
case R_Tex2DFormat_BGRA8: {color = v4f32(((U8 *)(data.str+off_bytes))[2]/255.f, ((U8 *)(data.str+off_bytes))[1]/255.f, ((U8 *)(data.str+off_bytes))[0]/255.f, ((U8 *)(data.str+off_bytes))[3]/255.f);}break;
case R_Tex2DFormat_R16: {color = v4f32(((U16 *)(data.str+off_bytes))[0]/(F32)max_U16, 0, 0, 1);}break;
case R_Tex2DFormat_RGBA16: {color = v4f32(((U16 *)(data.str+off_bytes))[0]/(F32)max_U16, ((U16 *)(data.str+off_bytes))[1]/(F32)max_U16, ((U16 *)(data.str+off_bytes))[2]/(F32)max_U16, ((U16 *)(data.str+off_bytes))[3]/(F32)max_U16);}break;
case R_Tex2DFormat_R32: {color = v4f32(((F32 *)(data.str+off_bytes))[0], 0, 0, 1);}break;
@@ -3883,12 +3891,12 @@ RD_VIEW_UI_FUNCTION_DEF(geo3d)
//////////////////////////////
//- rjf: unpack parameters
//
U64 count = rd_view_cfg_u64_from_string(str8_lit("count"));
U64 vtx_base_off = rd_view_cfg_u64_from_string(str8_lit("vtx"));
U64 vtx_size = rd_view_cfg_u64_from_string(str8_lit("vtx_size"));
F32 yaw_target = rd_view_cfg_f32_from_string(str8_lit("yaw"));
F32 pitch_target = rd_view_cfg_f32_from_string(str8_lit("pitch"));
F32 zoom_target = rd_view_cfg_f32_from_string(str8_lit("zoom"));
U64 count = rd_view_setting_u64_from_name(str8_lit("count"));
U64 vtx_base_off = rd_view_setting_u64_from_name(str8_lit("vtx"));
U64 vtx_size = rd_view_setting_u64_from_name(str8_lit("vtx_size"));
F32 yaw_target = rd_view_setting_f32_from_name(str8_lit("yaw"));
F32 pitch_target = rd_view_setting_f32_from_name(str8_lit("pitch"));
F32 zoom_target = rd_view_setting_f32_from_name(str8_lit("zoom"));
//////////////////////////////
//- rjf: evaluate & unpack expression