mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-06-15 08:32:22 -07:00
view params, pulled either from cfg trees or view rule params (tag calls); expr chain parsing; correctly use tags in nested single-line eval visualization
This commit is contained in:
@@ -273,3 +273,38 @@ e_member_eval_from_eval_member_name(E_Eval eval, String8 member_name)
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
internal E_Value
|
||||
e_value_from_string(String8 string)
|
||||
{
|
||||
Temp scratch = scratch_begin(0, 0);
|
||||
E_Eval eval = e_eval_from_string(scratch.arena, string);
|
||||
E_Eval value_eval = e_value_eval_from_eval(eval);
|
||||
E_Value result = value_eval.value;
|
||||
scratch_end(scratch);
|
||||
return result;
|
||||
}
|
||||
|
||||
internal E_Value
|
||||
e_value_from_stringf(char *fmt, ...)
|
||||
{
|
||||
Temp scratch = scratch_begin(0, 0);
|
||||
va_list args;
|
||||
va_start(args, fmt);
|
||||
String8 string = push_str8fv(scratch.arena, fmt, args);
|
||||
E_Value result = e_value_from_string(string);
|
||||
va_end(args);
|
||||
scratch_end(scratch);
|
||||
return result;
|
||||
}
|
||||
|
||||
internal E_Value
|
||||
e_value_from_expr(E_Expr *expr)
|
||||
{
|
||||
Temp scratch = scratch_begin(0, 0);
|
||||
E_Eval eval = e_eval_from_expr(scratch.arena, expr);
|
||||
E_Eval value_eval = e_value_eval_from_eval(eval);
|
||||
E_Value result = value_eval.value;
|
||||
scratch_end(scratch);
|
||||
return result;
|
||||
}
|
||||
@@ -30,5 +30,8 @@ internal E_Eval e_dynamically_typed_eval_from_eval(E_Eval eval);
|
||||
internal E_Eval e_value_eval_from_eval(E_Eval eval);
|
||||
internal E_Eval e_element_eval_from_array_eval_index(E_Eval eval, U64 index);
|
||||
internal E_Eval e_member_eval_from_eval_member_name(E_Eval eval, String8 member_name);
|
||||
internal E_Value e_value_from_string(String8 string);
|
||||
internal E_Value e_value_from_stringf(char *fmt, ...);
|
||||
internal E_Value e_value_from_expr(E_Expr *expr);
|
||||
|
||||
#endif // EVAL_BUNDLES_H
|
||||
|
||||
+1037
-994
File diff suppressed because it is too large
Load Diff
+114
-11
@@ -1220,7 +1220,7 @@ rd_title_fstrs_from_cfg(Arena *arena, RD_Cfg *cfg, Vec4F32 secondary_color, F32
|
||||
if(expr_string.size != 0)
|
||||
{
|
||||
String8 query_name = rd_query_from_eval_string(arena, expr_string);
|
||||
if(query_name.size != 0)
|
||||
if(query_name.size != 0 && !str8_match(query_name, str8_lit("watches"), 0))
|
||||
{
|
||||
String8 query_code_name = query_name;
|
||||
String8 query_display_name = rd_display_from_code_name(query_code_name);
|
||||
@@ -1303,11 +1303,11 @@ rd_title_fstrs_from_cfg(Arena *arena, RD_Cfg *cfg, Vec4F32 secondary_color, F32
|
||||
}
|
||||
else if(file_path.size != 0)
|
||||
{
|
||||
dr_fancy_string_list_push_new(arena, &result, rd_font_from_slot(RD_FontSlot_Main), running_size, running_rgba, file_path);
|
||||
dr_fancy_string_list_push_new(arena, &result, rd_font_from_slot(RD_FontSlot_Main), running_size, running_rgba, str8_skip_last_slash(file_path));
|
||||
dr_fancy_string_list_push_new(arena, &result, rd_font_from_slot(RD_FontSlot_Code), size, secondary_color, str8_lit(" "));
|
||||
start_secondary();
|
||||
}
|
||||
else if(expr_string.size != 0)
|
||||
else if(expr_string.size != 0 && !str8_match(cfg->string, str8_lit("watch"), 0))
|
||||
{
|
||||
dr_fancy_string_list_push_new(arena, &result, rd_font_from_slot(RD_FontSlot_Code), running_size, running_rgba, expr_string);
|
||||
dr_fancy_string_list_push_new(arena, &result, rd_font_from_slot(RD_FontSlot_Code), size, secondary_color, str8_lit(" "));
|
||||
@@ -3222,13 +3222,12 @@ rd_base_offset_from_eval(E_Eval eval)
|
||||
internal Rng1U64
|
||||
rd_range_from_eval_tag(E_Eval eval, E_Expr *tag)
|
||||
{
|
||||
Temp scratch = scratch_begin(0, 0);
|
||||
U64 size = 0;
|
||||
for(E_Expr *param = tag->first->next; param != &e_expr_nil; param = param->next)
|
||||
{
|
||||
if(param->kind == E_ExprKind_Define && str8_match(param->first->string, str8_lit("size"), 0))
|
||||
{
|
||||
size = e_eval_from_expr(scratch.arena, param->first->next).value.u64;
|
||||
size = e_value_from_expr(param->first->next).u64;
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -3257,7 +3256,6 @@ rd_range_from_eval_tag(E_Eval eval, E_Expr *tag)
|
||||
Rng1U64 result = {0};
|
||||
result.min = rd_base_offset_from_eval(eval);
|
||||
result.max = result.min + size;
|
||||
scratch_end(scratch);
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -3283,19 +3281,124 @@ 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)
|
||||
{
|
||||
// rjf: try implicitly from either `eval` itself, or from context
|
||||
CTRL_Entity *ctrl_entity = rd_ctrl_entity_from_eval_space(eval.space);
|
||||
CTRL_Entity *process = ctrl_process_from_entity(ctrl_entity);
|
||||
if(process == &ctrl_entity_nil)
|
||||
{
|
||||
process = ctrl_entity_from_handle(d_state->ctrl_entity_store, rd_regs()->process);
|
||||
}
|
||||
Arch arch = process->arch;
|
||||
if(arch == Arch_Null)
|
||||
{
|
||||
arch = arch_from_context();
|
||||
}
|
||||
|
||||
// rjf: try arch parameters
|
||||
for(E_Expr *param = tag->first->next; param != &e_expr_nil; param = param->next)
|
||||
{
|
||||
String8 param_arch_string = param->string;
|
||||
if(param->kind == E_ExprKind_Define && str8_match(param->first->string, str8_lit("arch"), 0))
|
||||
{
|
||||
param_arch_string = param->first->next->string;
|
||||
}
|
||||
if(str8_match(param->first->next->string, str8_lit("x64"), 0))
|
||||
{
|
||||
arch = Arch_x64;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return arch;
|
||||
}
|
||||
|
||||
internal Vec2S32
|
||||
rd_dim2s32_from_eval_tag(E_Eval eval, E_Expr *tag)
|
||||
{
|
||||
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)
|
||||
{
|
||||
if(param->kind == E_ExprKind_Define)
|
||||
{
|
||||
if(str8_match(param->first->string, str8_lit("w"), 0))
|
||||
{
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// rjf: try ordered non-define arguments
|
||||
for(E_Expr *param = tag->first->next; param != &e_expr_nil; param = param->next)
|
||||
{
|
||||
if(param->kind != E_ExprKind_Define)
|
||||
{
|
||||
if(!got_x)
|
||||
{
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return dim;
|
||||
}
|
||||
|
||||
internal R_Tex2DFormat
|
||||
rd_tex2dformat_from_eval_tag(E_Eval eval, E_Expr *tag)
|
||||
{
|
||||
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)
|
||||
{
|
||||
if(param->kind == E_ExprKind_Define && str8_match(param->first->string, str8_lit("fmt"), 0))
|
||||
{
|
||||
got_fmt = 1;
|
||||
for EachEnumVal(R_Tex2DFormat, f)
|
||||
{
|
||||
if(str8_match(param->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(param->kind == E_ExprKind_LeafIdent)
|
||||
{
|
||||
for EachEnumVal(R_Tex2DFormat, f)
|
||||
{
|
||||
if(str8_match(param->string, r_tex2d_format_display_string_table[f], StringMatchFlag_CaseInsensitive))
|
||||
{
|
||||
fmt = f;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return fmt;
|
||||
}
|
||||
|
||||
//- rjf: pushing/attaching view resources
|
||||
@@ -9222,7 +9325,7 @@ E_LOOKUP_NUM_FROM_ID_FUNCTION_DEF(debug_info_table)
|
||||
}
|
||||
|
||||
internal F32
|
||||
rd_append_value_strings_from_eval(Arena *arena, EV_StringFlags flags, U32 default_radix, FNT_Tag font, F32 font_size, F32 max_size, S32 depth, E_Eval eval, String8List *out)
|
||||
rd_append_value_strings_from_eval(Arena *arena, EV_StringFlags flags, U32 default_radix, FNT_Tag font, F32 font_size, F32 max_size, S32 depth, E_Expr *root_expr, E_Eval eval, String8List *out)
|
||||
{
|
||||
ProfBeginFunction();
|
||||
Temp scratch = scratch_begin(&arena, 1);
|
||||
@@ -9234,7 +9337,7 @@ rd_append_value_strings_from_eval(Arena *arena, EV_StringFlags flags, U32 defaul
|
||||
B32 no_addr = 0;
|
||||
B32 no_string = 0;
|
||||
B32 has_array = 0;
|
||||
for(E_Expr *tag = eval.expr->first_tag; tag != &e_expr_nil; tag = tag->next)
|
||||
for(E_Expr *tag = root_expr->first_tag; tag != &e_expr_nil; tag = tag->next)
|
||||
{
|
||||
if(0){}
|
||||
else if(str8_match(tag->string, str8_lit("dec"), 0)) {radix = 10;}
|
||||
@@ -9430,7 +9533,7 @@ rd_append_value_strings_from_eval(Arena *arena, EV_StringFlags flags, U32 defaul
|
||||
{
|
||||
E_Expr *deref_expr = e_expr_ref_deref(scratch.arena, eval.expr);
|
||||
E_Eval deref_eval = e_eval_from_expr(scratch.arena, deref_expr);
|
||||
space_taken += rd_append_value_strings_from_eval(arena, flags, radix, font, font_size, max_size-space_taken, depth+1, deref_eval, out);
|
||||
space_taken += rd_append_value_strings_from_eval(arena, flags, radix, font, font_size, max_size-space_taken, depth+1, root_expr, deref_eval, out);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -9553,7 +9656,7 @@ rd_append_value_strings_from_eval(Arena *arena, EV_StringFlags flags, U32 defaul
|
||||
}
|
||||
is_first = 0;
|
||||
E_Eval child_eval = e_eval_from_expr(scratch.arena, expr);
|
||||
space_taken += rd_append_value_strings_from_eval(arena, flags, radix, font, font_size, max_size-space_taken, depth+1, child_eval, out);
|
||||
space_taken += rd_append_value_strings_from_eval(arena, flags, radix, font, font_size, max_size-space_taken, depth+1, root_expr, child_eval, out);
|
||||
if(space_taken > max_size && idx+1 < total_possible_child_count)
|
||||
{
|
||||
String8 ellipses = str8_lit(", ...");
|
||||
@@ -9589,7 +9692,7 @@ rd_value_string_from_eval(Arena *arena, EV_StringFlags flags, U32 default_radix,
|
||||
{
|
||||
Temp scratch = scratch_begin(&arena, 1);
|
||||
String8List strs = {0};
|
||||
rd_append_value_strings_from_eval(scratch.arena, flags, default_radix, font, font_size, max_size, 0, eval, &strs);
|
||||
rd_append_value_strings_from_eval(scratch.arena, flags, default_radix, font, font_size, max_size, 0, eval.expr, eval, &strs);
|
||||
String8 result = str8_list_join(arena, &strs, 0);
|
||||
scratch_end(scratch);
|
||||
return result;
|
||||
|
||||
@@ -1152,7 +1152,7 @@ internal void rd_window_frame(void);
|
||||
////////////////////////////////
|
||||
//~ rjf: Eval Visualization
|
||||
|
||||
internal F32 rd_append_value_strings_from_eval(Arena *arena, EV_StringFlags flags, U32 default_radix, FNT_Tag font, F32 font_size, F32 max_size, S32 depth, E_Eval eval, String8List *out);
|
||||
internal F32 rd_append_value_strings_from_eval(Arena *arena, EV_StringFlags flags, U32 default_radix, FNT_Tag font, F32 font_size, F32 max_size, S32 depth, E_Expr *root_expr, E_Eval eval, String8List *out);
|
||||
internal String8 rd_value_string_from_eval(Arena *arena, EV_StringFlags flags, U32 default_radix, FNT_Tag font, F32 font_size, F32 max_size, E_Eval eval);
|
||||
|
||||
////////////////////////////////
|
||||
|
||||
@@ -5409,8 +5409,8 @@ RD_VIEW_UI_FUNCTION_DEF(bitmap)
|
||||
//////////////////////////////
|
||||
//- rjf: evaluate expression
|
||||
//
|
||||
Vec2S32 dim = {0}; // TODO(rjf): @cfg rd_dim2s32_from_eval_params(eval, params);
|
||||
R_Tex2DFormat fmt = R_Tex2DFormat_RGBA8; // TODO(rjf): @cfg rd_tex2dformat_from_eval_params(eval, params);
|
||||
Vec2S32 dim = rd_dim2s32_from_eval_tag(eval, tag);
|
||||
R_Tex2DFormat fmt = rd_tex2dformat_from_eval_tag(eval, tag);
|
||||
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);
|
||||
@@ -5418,11 +5418,11 @@ RD_VIEW_UI_FUNCTION_DEF(bitmap)
|
||||
//////////////////////////////
|
||||
//- rjf: unpack params
|
||||
//
|
||||
F32 zoom = 1.f; // TODO(rjf): @cfg rd_value_from_params_key(params, str8_lit("zoom")).f32;
|
||||
F32 zoom = rd_view_cfg_value_from_string(str8_lit("zoom")).f32;
|
||||
Vec2F32 view_center_pos =
|
||||
{
|
||||
0.f, // TODO(rjf): @cfg rd_value_from_params_key(params, str8_lit("x")).f32,
|
||||
0.f, // TODO(rjf): @cfg rd_value_from_params_key(params, str8_lit("y")).f32,
|
||||
rd_view_cfg_value_from_string(str8_lit("x")).f32,
|
||||
rd_view_cfg_value_from_string(str8_lit("y")).f32,
|
||||
};
|
||||
if(zoom == 0)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user