mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-08-04 04:48:40 +00:00
lens inheritance-on-expansion, composability with lens types & accesses (dot operator, array index operator), plugging in visualizers, killing dead code, etc.
This commit is contained in:
+138
-108
@@ -1404,16 +1404,6 @@ rd_possible_overrides_from_file_path(Arena *arena, String8 file_path)
|
||||
return result;
|
||||
}
|
||||
|
||||
internal E_Expr *
|
||||
rd_tag_from_cfg(Arena *arena, RD_Cfg *cfg)
|
||||
{
|
||||
E_Expr *expr = &e_expr_nil;
|
||||
{
|
||||
// TODO(rjf): @cfg
|
||||
}
|
||||
return expr;
|
||||
}
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Control Entity Info Extraction
|
||||
|
||||
@@ -1949,7 +1939,7 @@ rd_whole_range_from_eval_space(E_Space space)
|
||||
//- rjf: writing values back to child processes
|
||||
|
||||
internal B32
|
||||
rd_commit_eval_value_string(E_Eval dst_eval, String8 string, B32 string_needs_unescaping)
|
||||
rd_commit_eval_value_string(E_Eval dst_eval, String8 string)
|
||||
{
|
||||
B32 result = 0;
|
||||
if(dst_eval.irtree.mode == E_Mode_Offset)
|
||||
@@ -1984,17 +1974,14 @@ rd_commit_eval_value_string(E_Eval dst_eval, String8 string, B32 string_needs_un
|
||||
e_type_kind_is_integer(direct_type_kind))
|
||||
{
|
||||
B32 is_quoted = 0;
|
||||
if(string_needs_unescaping)
|
||||
if(string.size >= 1 && string.str[0] == '"')
|
||||
{
|
||||
if(string.size >= 1 && string.str[0] == '"')
|
||||
{
|
||||
string = str8_skip(string, 1);
|
||||
is_quoted = 1;
|
||||
}
|
||||
if(string.size >= 1 && string.str[string.size-1] == '"')
|
||||
{
|
||||
string = str8_chop(string, 1);
|
||||
}
|
||||
string = str8_skip(string, 1);
|
||||
is_quoted = 1;
|
||||
}
|
||||
if(string.size >= 1 && string.str[string.size-1] == '"')
|
||||
{
|
||||
string = str8_chop(string, 1);
|
||||
}
|
||||
if(is_quoted)
|
||||
{
|
||||
@@ -2652,7 +2639,7 @@ rd_view_ui(Rng2F32 rect)
|
||||
{
|
||||
UI_ScrollListRowBlock block = {0};
|
||||
block.row_count = dim_1u64(n->v.range);
|
||||
block.item_count = n->v.block->single_item ? 1 : dim_1u64(n->v.range);
|
||||
block.item_count = n->v.block->viz_expand_info.single_item ? 1 : dim_1u64(n->v.range);
|
||||
ui_scroll_list_row_block_chunk_list_push(scratch.arena, &row_block_chunks, 256, &block);
|
||||
}
|
||||
row_blocks = ui_scroll_list_row_block_array_from_chunk_list(scratch.arena, &row_block_chunks);
|
||||
@@ -3134,7 +3121,7 @@ rd_view_ui(Rng2F32 rect)
|
||||
if(should_commit_asap)
|
||||
{
|
||||
B32 success = 0;
|
||||
success = rd_commit_eval_value_string(cell_info.eval, new_string, 0);
|
||||
success = rd_commit_eval_value_string(cell_info.eval, new_string);
|
||||
if(!success)
|
||||
{
|
||||
log_user_error(str8_lit("Could not commit value successfully."));
|
||||
@@ -3268,7 +3255,7 @@ rd_view_ui(Rng2F32 rect)
|
||||
case RD_WatchCellKind_Eval:
|
||||
{
|
||||
RD_WatchRowCellInfo cell_info = rd_info_from_watch_row_cell(scratch.arena, row, string_flags, &row_info, cell, ui_top_font(), ui_top_font_size(), row_string_max_size_px);
|
||||
rd_commit_eval_value_string(cell_info.eval, str8_zero(), 0);
|
||||
rd_commit_eval_value_string(cell_info.eval, str8_zero());
|
||||
}break;
|
||||
}
|
||||
}
|
||||
@@ -4069,7 +4056,7 @@ rd_view_ui(Rng2F32 rect)
|
||||
}
|
||||
|
||||
// rjf: view ui contents
|
||||
cell_info.view_ui_rule->ui(cell_info.eval, cell_info.view_ui_tag, cell_rect);
|
||||
cell_info.view_ui_rule->ui(cell_info.eval, cell_rect);
|
||||
|
||||
// rjf: loading fill
|
||||
UI_Parent(loading_overlay_container)
|
||||
@@ -4442,7 +4429,7 @@ rd_view_ui(Rng2F32 rect)
|
||||
//
|
||||
if(next_cell_toggled != cell_toggled)
|
||||
{
|
||||
rd_commit_eval_value_string(cell_info.eval, next_cell_toggled ? str8_lit("1") : str8_lit("0"), 0);
|
||||
rd_commit_eval_value_string(cell_info.eval, next_cell_toggled ? str8_lit("1") : str8_lit("0"));
|
||||
}
|
||||
|
||||
////////////
|
||||
@@ -4488,8 +4475,7 @@ rd_view_ui(Rng2F32 rect)
|
||||
Temp scratch = scratch_begin(0, 0);
|
||||
RD_ViewUIRule *view_ui_rule = rd_view_ui_rule_from_string(view_name);
|
||||
E_Eval expr_eval = e_eval_from_string(scratch.arena, expr_string);
|
||||
E_Expr *tag = rd_tag_from_cfg(scratch.arena, view);
|
||||
view_ui_rule->ui(expr_eval, tag, rect);
|
||||
view_ui_rule->ui(expr_eval, rect);
|
||||
scratch_end(scratch);
|
||||
}
|
||||
}
|
||||
@@ -4595,7 +4581,7 @@ rd_view_cfg_value_from_string(String8 string)
|
||||
internal U64
|
||||
rd_base_offset_from_eval(E_Eval eval)
|
||||
{
|
||||
if(e_type_kind_is_pointer_or_ref(e_type_kind_from_key(eval.irtree.type_key)))
|
||||
if(e_type_kind_is_pointer_or_ref(e_type_kind_from_key(e_type_unwrap(eval.irtree.type_key))))
|
||||
{
|
||||
eval = e_value_eval_from_eval(eval);
|
||||
}
|
||||
@@ -4603,15 +4589,20 @@ rd_base_offset_from_eval(E_Eval eval)
|
||||
}
|
||||
|
||||
internal Rng1U64
|
||||
rd_range_from_eval_tag(E_Eval eval, E_Expr *tag)
|
||||
rd_range_from_eval(E_Eval eval)
|
||||
{
|
||||
U64 size = 0;
|
||||
for(E_Expr *param = tag->first->next; param != &e_expr_nil; param = param->next)
|
||||
E_Type *type = e_type_from_key__cached(eval.irtree.type_key);
|
||||
if(type->kind == E_TypeKind_Lens)
|
||||
{
|
||||
if(param->kind == E_ExprKind_Define && str8_match(param->first->string, str8_lit("size"), 0))
|
||||
for EachIndex(idx, type->count)
|
||||
{
|
||||
size = e_value_from_expr(param->first->next).u64;
|
||||
break;
|
||||
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_unwrap(eval.irtree.type_key);
|
||||
@@ -4643,7 +4634,7 @@ rd_range_from_eval_tag(E_Eval eval, E_Expr *tag)
|
||||
}
|
||||
|
||||
internal TXT_LangKind
|
||||
rd_lang_kind_from_eval_tag(E_Eval eval, E_Expr *tag)
|
||||
rd_lang_kind_from_eval(E_Eval eval)
|
||||
{
|
||||
TXT_LangKind lang_kind = TXT_LangKind_Null;
|
||||
Temp scratch = scratch_begin(0, 0);
|
||||
@@ -4654,12 +4645,17 @@ rd_lang_kind_from_eval_tag(E_Eval eval, E_Expr *tag)
|
||||
}
|
||||
if(lang_kind == TXT_LangKind_Null)
|
||||
{
|
||||
for(E_Expr *param = tag->first->next; param != &e_expr_nil; param = param->next)
|
||||
E_Type *type = e_type_from_key__cached(eval.irtree.type_key);
|
||||
if(type->kind == E_TypeKind_Lens)
|
||||
{
|
||||
if(param->kind == E_ExprKind_Define && str8_match(param->first->string, str8_lit("lang"), 0))
|
||||
for EachIndex(idx, type->count)
|
||||
{
|
||||
lang_kind = txt_lang_kind_from_extension(param->first->next->string);
|
||||
break;
|
||||
E_Expr *arg = type->args[idx];
|
||||
if(arg->kind == E_ExprKind_Define && str8_match(arg->first->string, str8_lit("lang"), 0))
|
||||
{
|
||||
lang_kind = txt_lang_kind_from_extension(arg->first->next->string);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -4668,7 +4664,7 @@ rd_lang_kind_from_eval_tag(E_Eval eval, E_Expr *tag)
|
||||
}
|
||||
|
||||
internal Arch
|
||||
rd_arch_from_eval_tag(E_Eval eval, E_Expr *tag)
|
||||
rd_arch_from_eval(E_Eval eval)
|
||||
{
|
||||
// rjf: try implicitly from either `eval` itself, or from context
|
||||
CTRL_Entity *ctrl_entity = rd_ctrl_entity_from_eval_space(eval.space);
|
||||
@@ -4683,18 +4679,25 @@ rd_arch_from_eval_tag(E_Eval eval, E_Expr *tag)
|
||||
arch = arch_from_context();
|
||||
}
|
||||
|
||||
// rjf: try arch parameters
|
||||
for(E_Expr *param = tag->first->next; param != &e_expr_nil; param = param->next)
|
||||
// rjf: try arch arguments
|
||||
E_Type *type = e_type_from_key__cached(eval.irtree.type_key);
|
||||
if(type->kind == E_TypeKind_Lens)
|
||||
{
|
||||
String8 param_arch_string = param->string;
|
||||
if(param->kind == E_ExprKind_Define && str8_match(param->first->string, str8_lit("arch"), 0))
|
||||
for EachIndex(idx, type->count)
|
||||
{
|
||||
param_arch_string = param->first->next->string;
|
||||
}
|
||||
if(str8_match(param->first->next->string, str8_lit("x64"), 0))
|
||||
{
|
||||
arch = Arch_x64;
|
||||
break;
|
||||
E_Expr *arg = type->args[idx];
|
||||
{
|
||||
String8 arg_arch_string = arg->string;
|
||||
if(arg->kind == E_ExprKind_Define && str8_match(arg->first->string, str8_lit("arch"), 0))
|
||||
{
|
||||
arg_arch_string = arg->first->next->string;
|
||||
}
|
||||
if(str8_match(arg->first->next->string, str8_lit("x64"), 0))
|
||||
{
|
||||
arch = Arch_x64;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4702,45 +4705,54 @@ rd_arch_from_eval_tag(E_Eval eval, E_Expr *tag)
|
||||
}
|
||||
|
||||
internal Vec2S32
|
||||
rd_dim2s32_from_eval_tag(E_Eval eval, E_Expr *tag)
|
||||
rd_dim2s32_from_eval(E_Eval eval)
|
||||
{
|
||||
Vec2S32 dim = v2s32(1, 1);
|
||||
B32 got_x = 0;
|
||||
B32 got_y = 0;
|
||||
|
||||
// rjf: try explicitly passed dimensions
|
||||
for(E_Expr *param = tag->first->next; param != &e_expr_nil; param = param->next)
|
||||
E_Type *type = e_type_from_key__cached(eval.irtree.type_key);
|
||||
if(type->kind == E_TypeKind_Lens)
|
||||
{
|
||||
if(param->kind == E_ExprKind_Define)
|
||||
for EachIndex(idx, type->count)
|
||||
{
|
||||
if(str8_match(param->first->string, str8_lit("w"), 0))
|
||||
E_Expr *arg = type->args[idx];
|
||||
if(arg->kind == E_ExprKind_Define)
|
||||
{
|
||||
got_x = 1;
|
||||
dim.x = e_value_from_expr(param->first->next).s64;
|
||||
}
|
||||
if(str8_match(param->first->string, str8_lit("h"), 0))
|
||||
{
|
||||
got_y = 1;
|
||||
dim.y = e_value_from_expr(param->first->next).s64;
|
||||
if(str8_match(arg->first->string, str8_lit("w"), 0))
|
||||
{
|
||||
got_x = 1;
|
||||
dim.x = e_value_from_expr(arg->first->next).s64;
|
||||
}
|
||||
if(str8_match(arg->first->string, str8_lit("h"), 0))
|
||||
{
|
||||
got_y = 1;
|
||||
dim.y = e_value_from_expr(arg->first->next).s64;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// rjf: try ordered non-define arguments
|
||||
for(E_Expr *param = tag->first->next; param != &e_expr_nil; param = param->next)
|
||||
if(type->kind == E_TypeKind_Lens)
|
||||
{
|
||||
if(param->kind != E_ExprKind_Define)
|
||||
for EachIndex(idx, type->count)
|
||||
{
|
||||
if(!got_x)
|
||||
E_Expr *arg = type->args[idx];
|
||||
if(arg->kind != E_ExprKind_Define)
|
||||
{
|
||||
got_x = 1;
|
||||
dim.x = e_value_from_expr(param).s64;
|
||||
}
|
||||
else if(!got_y)
|
||||
{
|
||||
got_y = 1;
|
||||
dim.y = e_value_from_expr(param).s64;
|
||||
break;
|
||||
if(!got_x)
|
||||
{
|
||||
got_x = 1;
|
||||
dim.x = e_value_from_expr(arg).s64;
|
||||
}
|
||||
else if(!got_y)
|
||||
{
|
||||
got_y = 1;
|
||||
dim.y = e_value_from_expr(arg).s64;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -4749,39 +4761,48 @@ rd_dim2s32_from_eval_tag(E_Eval eval, E_Expr *tag)
|
||||
}
|
||||
|
||||
internal R_Tex2DFormat
|
||||
rd_tex2dformat_from_eval_tag(E_Eval eval, E_Expr *tag)
|
||||
rd_tex2dformat_from_eval(E_Eval eval)
|
||||
{
|
||||
R_Tex2DFormat fmt = R_Tex2DFormat_RGBA8;
|
||||
B32 got_fmt = 0;
|
||||
|
||||
// rjf: try explicitly passed formats
|
||||
for(E_Expr *param = tag->first->next; param != &e_expr_nil; param = param->next)
|
||||
E_Type *type = e_type_from_key__cached(eval.irtree.type_key);
|
||||
if(type->kind == E_TypeKind_Lens)
|
||||
{
|
||||
if(param->kind == E_ExprKind_Define && str8_match(param->first->string, str8_lit("fmt"), 0))
|
||||
for EachIndex(idx, type->count)
|
||||
{
|
||||
got_fmt = 1;
|
||||
for EachEnumVal(R_Tex2DFormat, f)
|
||||
E_Expr *arg = type->args[idx];
|
||||
if(arg->kind == E_ExprKind_Define && str8_match(arg->first->string, str8_lit("fmt"), 0))
|
||||
{
|
||||
if(str8_match(param->first->next->string, r_tex2d_format_display_string_table[f], StringMatchFlag_CaseInsensitive))
|
||||
got_fmt = 1;
|
||||
for EachEnumVal(R_Tex2DFormat, f)
|
||||
{
|
||||
fmt = f;
|
||||
break;
|
||||
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
|
||||
for(E_Expr *param = tag->first->next; param != &e_expr_nil && !got_fmt; param = param->next)
|
||||
if(type->kind == E_TypeKind_Lens)
|
||||
{
|
||||
if(param->kind == E_ExprKind_LeafIdentifier)
|
||||
for EachIndex(idx, type->count)
|
||||
{
|
||||
for EachEnumVal(R_Tex2DFormat, f)
|
||||
E_Expr *arg = type->args[idx];
|
||||
if(arg->kind == E_ExprKind_LeafIdentifier)
|
||||
{
|
||||
if(str8_match(param->string, r_tex2d_format_display_string_table[f], StringMatchFlag_CaseInsensitive))
|
||||
for EachEnumVal(R_Tex2DFormat, f)
|
||||
{
|
||||
fmt = f;
|
||||
break;
|
||||
if(str8_match(arg->string, r_tex2d_format_display_string_table[f], StringMatchFlag_CaseInsensitive))
|
||||
{
|
||||
fmt = f;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -4791,15 +4812,20 @@ rd_tex2dformat_from_eval_tag(E_Eval eval, E_Expr *tag)
|
||||
}
|
||||
|
||||
internal E_Value
|
||||
rd_value_from_eval_tag_key(E_Eval eval, E_Expr *tag, String8 key)
|
||||
rd_value_from_eval_key(E_Eval eval, String8 key)
|
||||
{
|
||||
E_Value value = zero_struct;
|
||||
for(E_Expr *arg = tag->first->next; arg != &e_expr_nil; arg = arg->next)
|
||||
E_Type *type = e_type_from_key__cached(eval.irtree.type_key);
|
||||
if(type->kind == E_TypeKind_Lens)
|
||||
{
|
||||
if(arg->kind == E_ExprKind_Define && str8_match(arg->first->string, key, 0))
|
||||
for EachIndex(idx, type->count)
|
||||
{
|
||||
value = e_value_from_expr(arg->first->next);
|
||||
break;
|
||||
E_Expr *arg = type->args[idx];
|
||||
if(arg->kind == E_ExprKind_Define && str8_match(arg->first->string, key, 0))
|
||||
{
|
||||
value = e_value_from_expr(arg->first->next);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
return value;
|
||||
@@ -6253,10 +6279,8 @@ rd_window_frame(void)
|
||||
if(build_hover_eval)
|
||||
{
|
||||
// rjf: determine if we have a top-level visualizer
|
||||
#if 0 // TODO(rjf): @eval
|
||||
EV_ExpandRuleTagPair expand_rule_tag = ev_expand_rule_tag_pair_from_expr_irtree(hover_eval.exprs.last, &hover_eval.irtree);
|
||||
#endif
|
||||
RD_ViewUIRule *view_ui_rule = &rd_nil_view_ui_rule; // TODO(rjf): @eval rd_view_ui_rule_from_string(expand_rule_tag.rule->string);
|
||||
EV_ExpandRule *expand_rule = ev_expand_rule_from_type_key(hover_eval.irtree.type_key);
|
||||
RD_ViewUIRule *view_ui_rule = rd_view_ui_rule_from_string(expand_rule->string);
|
||||
|
||||
// rjf: determine view name
|
||||
String8 view_name = str8_lit("watch");
|
||||
@@ -12677,23 +12701,24 @@ rd_frame(void)
|
||||
struct
|
||||
{
|
||||
String8 name;
|
||||
B32 inherited;
|
||||
RD_ViewUIFunctionType *ui;
|
||||
EV_ExpandRuleInfoHookFunctionType *expand;
|
||||
}
|
||||
view_ui_rule_table[] =
|
||||
{
|
||||
{str8_lit("bin")},
|
||||
{str8_lit("oct")},
|
||||
{str8_lit("dec")},
|
||||
{str8_lit("hex")},
|
||||
{str8_lit("digits")},
|
||||
{str8_lit("text"), RD_VIEW_UI_FUNCTION_NAME(text), EV_EXPAND_RULE_INFO_FUNCTION_NAME(text)},
|
||||
{str8_lit("disasm"), RD_VIEW_UI_FUNCTION_NAME(disasm), EV_EXPAND_RULE_INFO_FUNCTION_NAME(disasm)},
|
||||
{str8_lit("memory"), RD_VIEW_UI_FUNCTION_NAME(memory), EV_EXPAND_RULE_INFO_FUNCTION_NAME(memory)},
|
||||
{str8_lit("bitmap"), RD_VIEW_UI_FUNCTION_NAME(bitmap), EV_EXPAND_RULE_INFO_FUNCTION_NAME(bitmap)},
|
||||
{str8_lit("checkbox"), RD_VIEW_UI_FUNCTION_NAME(checkbox), 0},
|
||||
{str8_lit("color_rgba"), RD_VIEW_UI_FUNCTION_NAME(color_rgba), EV_EXPAND_RULE_INFO_FUNCTION_NAME(color_rgba)},
|
||||
{str8_lit("geo3d"), RD_VIEW_UI_FUNCTION_NAME(geo3d), EV_EXPAND_RULE_INFO_FUNCTION_NAME(geo3d)},
|
||||
{str8_lit("bin"), 1},
|
||||
{str8_lit("oct"), 1},
|
||||
{str8_lit("dec"), 1},
|
||||
{str8_lit("hex"), 1},
|
||||
{str8_lit("digits"), 1},
|
||||
{str8_lit("text"), 0, RD_VIEW_UI_FUNCTION_NAME(text), EV_EXPAND_RULE_INFO_FUNCTION_NAME(text)},
|
||||
{str8_lit("disasm"), 0, RD_VIEW_UI_FUNCTION_NAME(disasm), EV_EXPAND_RULE_INFO_FUNCTION_NAME(disasm)},
|
||||
{str8_lit("memory"), 0, RD_VIEW_UI_FUNCTION_NAME(memory), EV_EXPAND_RULE_INFO_FUNCTION_NAME(memory)},
|
||||
{str8_lit("bitmap"), 0, RD_VIEW_UI_FUNCTION_NAME(bitmap), EV_EXPAND_RULE_INFO_FUNCTION_NAME(bitmap)},
|
||||
{str8_lit("checkbox"), 0, RD_VIEW_UI_FUNCTION_NAME(checkbox), 0},
|
||||
{str8_lit("color_rgba"), 0, RD_VIEW_UI_FUNCTION_NAME(color_rgba), EV_EXPAND_RULE_INFO_FUNCTION_NAME(color_rgba)},
|
||||
{str8_lit("geo3d"), 0, RD_VIEW_UI_FUNCTION_NAME(geo3d), EV_EXPAND_RULE_INFO_FUNCTION_NAME(geo3d)},
|
||||
};
|
||||
|
||||
//- rjf: fill view ui rules in expand rule map, view ui rule map
|
||||
@@ -12712,8 +12737,13 @@ rd_frame(void)
|
||||
}
|
||||
for EachElement(idx, view_ui_rule_table)
|
||||
{
|
||||
E_TypeFlags type_flags = 0;
|
||||
if(view_ui_rule_table[idx].inherited)
|
||||
{
|
||||
type_flags |= E_TypeFlag_InheritedOnAccess;
|
||||
}
|
||||
E_Expr *expr = e_push_expr(scratch.arena, E_ExprKind_LeafOffset, 0);
|
||||
expr->type_key = e_type_key_cons(.kind = E_TypeKind_LensSpec, .name = view_ui_rule_table[idx].name);
|
||||
expr->type_key = e_type_key_cons(.kind = E_TypeKind_LensSpec, .flags = type_flags, .name = view_ui_rule_table[idx].name);
|
||||
e_string2expr_map_insert(scratch.arena, e_ir_state->ctx->macro_map, view_ui_rule_table[idx].name, expr);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -92,7 +92,7 @@ enum
|
||||
////////////////////////////////
|
||||
//~ rjf: View UI Hook Types
|
||||
|
||||
#define RD_VIEW_UI_FUNCTION_SIG(name) void name(E_Eval eval, E_Expr *tag, Rng2F32 rect)
|
||||
#define RD_VIEW_UI_FUNCTION_SIG(name) void name(E_Eval eval, Rng2F32 rect)
|
||||
#define RD_VIEW_UI_FUNCTION_NAME(name) rd_view_ui__##name
|
||||
#define RD_VIEW_UI_FUNCTION_DEF(name) internal RD_VIEW_UI_FUNCTION_SIG(RD_VIEW_UI_FUNCTION_NAME(name))
|
||||
typedef RD_VIEW_UI_FUNCTION_SIG(RD_ViewUIFunctionType);
|
||||
@@ -908,8 +908,6 @@ internal RD_Cfg *rd_immediate_cfg_from_keyf(char *fmt, ...);
|
||||
internal String8 rd_mapped_from_file_path(Arena *arena, String8 file_path);
|
||||
internal String8List rd_possible_overrides_from_file_path(Arena *arena, String8 file_path);
|
||||
|
||||
internal E_Expr *rd_tag_from_cfg(Arena *arena, RD_Cfg *cfg);
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Control Entity Info Extraction
|
||||
|
||||
@@ -941,7 +939,7 @@ internal Rng1U64 rd_whole_range_from_eval_space(E_Space space);
|
||||
//~ rjf: Evaluation Visualization
|
||||
|
||||
//- rjf: writing values back to child processes
|
||||
internal B32 rd_commit_eval_value_string(E_Eval dst_eval, String8 string, B32 string_needs_unescaping);
|
||||
internal B32 rd_commit_eval_value_string(E_Eval dst_eval, String8 string);
|
||||
|
||||
//- rjf: eval <-> file path
|
||||
internal String8 rd_file_path_from_eval(Arena *arena, E_Eval eval);
|
||||
@@ -971,12 +969,12 @@ internal E_Value rd_view_cfg_value_from_string(String8 string);
|
||||
|
||||
//- rjf: evaluation & tag (a view's 'call') parameter extraction
|
||||
internal U64 rd_base_offset_from_eval(E_Eval eval);
|
||||
internal Rng1U64 rd_range_from_eval_tag(E_Eval eval, E_Expr *tag);
|
||||
internal TXT_LangKind rd_lang_kind_from_eval_tag(E_Eval eval, E_Expr *tag);
|
||||
internal Arch rd_arch_from_eval_tag(E_Eval eval, E_Expr *tag);
|
||||
internal Vec2S32 rd_dim2s32_from_eval_tag(E_Eval eval, E_Expr *tag);
|
||||
internal R_Tex2DFormat rd_tex2dformat_from_eval_tag(E_Eval eval, E_Expr *tag);
|
||||
internal E_Value rd_value_from_eval_tag_key(E_Eval eval, E_Expr *tag, String8 key);
|
||||
internal Rng1U64 rd_range_from_eval(E_Eval eval);
|
||||
internal TXT_LangKind rd_lang_kind_from_eval(E_Eval eval);
|
||||
internal Arch rd_arch_from_eval(E_Eval eval);
|
||||
internal Vec2S32 rd_dim2s32_from_eval(E_Eval eval);
|
||||
internal R_Tex2DFormat rd_tex2dformat_from_eval(E_Eval eval);
|
||||
internal E_Value rd_value_from_eval_key(E_Eval eval, String8 key);
|
||||
|
||||
//- rjf: pushing/attaching view resources
|
||||
internal void *rd_view_state_by_size(U64 size);
|
||||
|
||||
+28
-31
@@ -1051,14 +1051,7 @@ rd_watch_row_info_from_row(Arena *arena, EV_Row *row)
|
||||
}
|
||||
|
||||
// rjf: determine view ui rule
|
||||
// TODO(rjf): @eval
|
||||
info.view_ui_rule = &rd_nil_view_ui_rule; // rd_view_ui_rule_from_string(row->block->expand_rule->string);
|
||||
#if 0 // TODO(rjf): @eval
|
||||
if(info.view_ui_rule != &rd_nil_view_ui_rule)
|
||||
{
|
||||
info.view_ui_tag = row->block->expand_tag;
|
||||
}
|
||||
#endif
|
||||
info.view_ui_rule = rd_view_ui_rule_from_string(row->block->viz_expand_rule->string);
|
||||
|
||||
// rjf: fill row's cells
|
||||
{
|
||||
@@ -1311,9 +1304,9 @@ rd_watch_row_info_from_row(Arena *arena, EV_Row *row)
|
||||
RD_Cfg *w_cfg = style->first;
|
||||
F32 next_pct = 0;
|
||||
#define take_pct() (next_pct = (F32)f64_from_str8(w_cfg->string), w_cfg = w_cfg->next, next_pct)
|
||||
rd_watch_cell_list_push_new(arena, &info.cells, RD_WatchCellKind_CallStackFrame, .default_pct = 0.05f, .pct = take_pct());
|
||||
rd_watch_cell_list_push_new(arena, &info.cells, RD_WatchCellKind_Eval, .default_pct = 0.55f, .pct = take_pct());
|
||||
rd_watch_cell_list_push_new(arena, &info.cells, RD_WatchCellKind_Eval, .string = str8_lit("lens:hex((U64)($expr))"), .default_pct = 0.20f, .pct = take_pct());
|
||||
rd_watch_cell_list_push_new(arena, &info.cells, RD_WatchCellKind_CallStackFrame, .default_pct = 0.05f, .pct = take_pct());
|
||||
rd_watch_cell_list_push_new(arena, &info.cells, RD_WatchCellKind_Eval, .default_pct = 0.55f, .pct = take_pct());
|
||||
rd_watch_cell_list_push_new(arena, &info.cells, RD_WatchCellKind_Eval, .string = str8_lit("lens:hex((uint64)($expr))"), .default_pct = 0.20f, .pct = take_pct());
|
||||
rd_watch_cell_list_push_new(arena, &info.cells, RD_WatchCellKind_Eval,
|
||||
.eval = (module == &ctrl_entity_nil ? (E_Eval)zero_struct : module_eval),
|
||||
.string = str8_lit(" "),
|
||||
@@ -1332,7 +1325,7 @@ rd_watch_row_info_from_row(Arena *arena, EV_Row *row)
|
||||
#define take_pct() (next_pct = (F32)f64_from_str8(w_cfg->string), w_cfg = w_cfg->next, next_pct)
|
||||
rd_watch_cell_list_push_new(arena, &info.cells, RD_WatchCellKind_Expr, .default_pct = 0.25f, .pct = take_pct());
|
||||
rd_watch_cell_list_push_new(arena, &info.cells, RD_WatchCellKind_Eval, .default_pct = 0.35f, .pct = take_pct());
|
||||
rd_watch_cell_list_push_new(arena, &info.cells, RD_WatchCellKind_Eval, .string = str8_lit("typeof($expr => default)"), .default_pct = 0.15f, .pct = take_pct());
|
||||
rd_watch_cell_list_push_new(arena, &info.cells, RD_WatchCellKind_Eval, .string = str8_lit("typeof($expr)"), .default_pct = 0.15f, .pct = take_pct());
|
||||
rd_watch_cell_list_push_new(arena, &info.cells, RD_WatchCellKind_Tag, .default_pct = 0.25f, .pct = take_pct());
|
||||
#undef take_pct
|
||||
}
|
||||
@@ -1353,7 +1346,6 @@ rd_info_from_watch_row_cell(Arena *arena, EV_Row *row, EV_StringFlags string_fla
|
||||
|
||||
//- rjf: fill basics/defaults
|
||||
result.view_ui_rule = &rd_nil_view_ui_rule;
|
||||
result.view_ui_tag = &e_expr_nil;
|
||||
result.fstrs = cell->fstrs;
|
||||
result.flags = cell->flags;
|
||||
result.cfg = &rd_nil_cfg;
|
||||
@@ -1495,16 +1487,22 @@ rd_info_from_watch_row_cell(Arena *arena, EV_Row *row, EV_StringFlags string_fla
|
||||
//- rjf: evaluate wrapped expression
|
||||
result.eval = (cell->eval.irtree.mode != E_Mode_Null ? cell->eval : e_eval_from_expr(arena, root_expr));
|
||||
|
||||
//- rjf: determine default radix
|
||||
U32 default_radix = 10;
|
||||
if(result.eval.space.kind == RD_EvalSpaceKind_MetaCtrlEntity &&
|
||||
rd_ctrl_entity_from_eval_space(result.eval.space)->kind == CTRL_EntityKind_Module)
|
||||
//- rjf: determine string generation parameters based on evaluation
|
||||
EV_StringParams string_params = {string_flags, 10};
|
||||
{
|
||||
default_radix = 16;
|
||||
if(result.eval.space.kind == RD_EvalSpaceKind_MetaCfg ||
|
||||
result.eval.space.kind == RD_EvalSpaceKind_MetaCtrlEntity)
|
||||
{
|
||||
string_params.flags |= EV_StringFlag_DisableStringQuotes;
|
||||
}
|
||||
if(result.eval.space.kind == RD_EvalSpaceKind_MetaCtrlEntity &&
|
||||
rd_ctrl_entity_from_eval_space(result.eval.space)->kind == CTRL_EntityKind_Module)
|
||||
{
|
||||
string_params.radix = 16;
|
||||
}
|
||||
}
|
||||
|
||||
//- rjf: generate strings/flags based on that expression & fill
|
||||
EV_StringParams string_params = {.flags = string_flags, .radix = default_radix};
|
||||
result.string = rd_value_string_from_eval_NEW(arena, rd_view_query_input(), &string_params, font, font_size, max_size_px, result.eval);
|
||||
result.flags |= !!(ev_type_key_is_editable(result.eval.irtree.type_key) && result.eval.irtree.mode == E_Mode_Offset) * RD_WatchCellFlag_CanEdit;
|
||||
E_Type *type = e_type_from_key__cached(result.eval.irtree.type_key);
|
||||
@@ -1529,7 +1527,6 @@ rd_info_from_watch_row_cell(Arena *arena, EV_Row *row, EV_StringFlags string_fla
|
||||
{
|
||||
result.eval = (cell->eval.irtree.mode != E_Mode_Null ? cell->eval : row->eval);
|
||||
result.view_ui_rule = row_info->view_ui_rule;
|
||||
result.view_ui_tag = row_info->view_ui_tag;
|
||||
}break;
|
||||
}
|
||||
|
||||
@@ -1743,9 +1740,9 @@ RD_VIEW_UI_FUNCTION_DEF(text)
|
||||
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; }
|
||||
Rng1U64 range = rd_range_from_eval_tag(eval, tag);
|
||||
Rng1U64 range = rd_range_from_eval(eval);
|
||||
rd_regs()->text_key = rd_key_from_eval_space_range(eval.space, range, 1);
|
||||
rd_regs()->lang_kind = rd_lang_kind_from_eval_tag(eval, tag);
|
||||
rd_regs()->lang_kind = rd_lang_kind_from_eval(eval);
|
||||
U128 hash = {0};
|
||||
TXT_TextInfo info = txt_text_info_from_key_lang(txt_scope, rd_regs()->text_key, rd_regs()->lang_kind, &hash);
|
||||
String8 data = hs_data_from_hash(hs_scope, hash);
|
||||
@@ -2002,8 +1999,8 @@ RD_VIEW_UI_FUNCTION_DEF(disasm)
|
||||
{
|
||||
space = auto_space;
|
||||
}
|
||||
Rng1U64 range = rd_range_from_eval_tag(eval, tag);
|
||||
Arch arch = rd_arch_from_eval_tag(eval, tag);
|
||||
Rng1U64 range = rd_range_from_eval(eval);
|
||||
Arch arch = rd_arch_from_eval(eval);
|
||||
CTRL_Entity *space_entity = rd_ctrl_entity_from_eval_space(space);
|
||||
CTRL_Entity *dasm_module = &ctrl_entity_nil;
|
||||
DI_Key dbgi_key = {0};
|
||||
@@ -2170,7 +2167,7 @@ RD_VIEW_UI_FUNCTION_DEF(memory)
|
||||
//////////////////////////////
|
||||
//- rjf: unpack parameterization info
|
||||
//
|
||||
Rng1U64 space_range = rd_range_from_eval_tag(eval, tag);
|
||||
Rng1U64 space_range = rd_range_from_eval(eval);
|
||||
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);
|
||||
@@ -3085,8 +3082,8 @@ RD_VIEW_UI_FUNCTION_DEF(bitmap)
|
||||
//////////////////////////////
|
||||
//- rjf: evaluate expression
|
||||
//
|
||||
Vec2S32 dim = rd_dim2s32_from_eval_tag(eval, tag);
|
||||
R_Tex2DFormat fmt = rd_tex2dformat_from_eval_tag(eval, tag);
|
||||
Vec2S32 dim = rd_dim2s32_from_eval(eval);
|
||||
R_Tex2DFormat fmt = rd_tex2dformat_from_eval(eval);
|
||||
U64 base_offset = rd_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);
|
||||
@@ -3283,7 +3280,7 @@ RD_VIEW_UI_FUNCTION_DEF(checkbox)
|
||||
E_Eval value_eval = e_value_eval_from_eval(eval);
|
||||
if(ui_clicked(rd_icon_buttonf(value_eval.value.u64 == 0 ? RD_IconKind_CheckHollow : RD_IconKind_CheckFilled, 0, "###check")))
|
||||
{
|
||||
rd_commit_eval_value_string(eval, value_eval.value.u64 == 0 ? str8_lit("1") : str8_lit("0"), 0);
|
||||
rd_commit_eval_value_string(eval, value_eval.value.u64 == 0 ? str8_lit("1") : str8_lit("0"));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3484,9 +3481,9 @@ RD_VIEW_UI_FUNCTION_DEF(geo3d)
|
||||
//////////////////////////////
|
||||
//- rjf: unpack parameters
|
||||
//
|
||||
U64 count = rd_value_from_eval_tag_key(eval, tag, str8_lit("count")).u64;
|
||||
U64 vtx_base_off = rd_value_from_eval_tag_key(eval, tag, str8_lit("vtx")).u64;
|
||||
U64 vtx_size = rd_value_from_eval_tag_key(eval, tag, str8_lit("vtx_size")).u64;
|
||||
U64 count = rd_value_from_eval_key(eval, str8_lit("count")).u64;
|
||||
U64 vtx_base_off = rd_value_from_eval_key(eval, str8_lit("vtx")).u64;
|
||||
U64 vtx_size = rd_value_from_eval_key(eval, str8_lit("vtx_size")).u64;
|
||||
F32 yaw_target = rd_view_cfg_value_from_string(str8_lit("yaw")).f32;
|
||||
F32 pitch_target = rd_view_cfg_value_from_string(str8_lit("pitch")).f32;
|
||||
F32 zoom_target = rd_view_cfg_value_from_string(str8_lit("zoom")).f32;
|
||||
|
||||
@@ -118,7 +118,6 @@ struct RD_WatchRowCellInfo
|
||||
String8 error_tooltip;
|
||||
String8 inheritance_tooltip;
|
||||
RD_ViewUIRule *view_ui_rule;
|
||||
E_Expr *view_ui_tag;
|
||||
};
|
||||
|
||||
typedef enum RD_WatchViewColumnKind
|
||||
|
||||
Reference in New Issue
Block a user