mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-08-01 03:40:02 +00:00
eliminate old eval/eval-viz paths
This commit is contained in:
@@ -4702,382 +4702,6 @@ df_append_viz_blocks_for_parent__rec(Arena *arena, DF_EvalView *eval_view, DF_Ex
|
||||
|
||||
scratch_end(scratch);
|
||||
ProfEnd();
|
||||
|
||||
//-
|
||||
//-
|
||||
//-
|
||||
// TODO(rjf): OLD vvvvvvvvvvvvvvvvvvvv
|
||||
#if 0
|
||||
|
||||
//////////////////////////////
|
||||
//- rjf: (pointers) extract type & info to use for members and/or arrays
|
||||
//
|
||||
E_Eval udt_eval = eval;
|
||||
E_Eval arr_eval = eval;
|
||||
E_Eval ptr_eval = zero_struct;
|
||||
E_TypeKind udt_type_kind = eval_type_kind;
|
||||
E_TypeKind arr_type_kind = eval_type_kind;
|
||||
E_TypeKind ptr_type_kind = E_TypeKind_Null;
|
||||
if(eval_type_kind == E_TypeKind_Ptr || eval_type_kind == E_TypeKind_LRef || eval_type_kind == E_TypeKind_RRef)
|
||||
{
|
||||
E_TypeKey direct_type_key = e_type_ptee_from_key(eval_type_key);
|
||||
E_TypeKind direct_type_kind = e_type_kind_from_key(direct_type_key);
|
||||
E_Eval ptr_val_eval = e_value_eval_from_eval(eval);
|
||||
|
||||
// rjf: ptrs to udts
|
||||
if(parent_is_expanded &&
|
||||
(direct_type_kind == E_TypeKind_Struct ||
|
||||
direct_type_kind == E_TypeKind_Union ||
|
||||
direct_type_kind == E_TypeKind_Class ||
|
||||
direct_type_kind == E_TypeKind_IncompleteStruct ||
|
||||
direct_type_kind == E_TypeKind_IncompleteUnion ||
|
||||
direct_type_kind == E_TypeKind_IncompleteClass))
|
||||
{
|
||||
udt_eval.type_key = direct_type_key;
|
||||
udt_eval.mode = E_Mode_Offset;
|
||||
udt_eval.space = ptr_val_eval.space;
|
||||
udt_eval.value = ptr_val_eval.value;
|
||||
udt_type_kind = e_type_kind_from_key(direct_type_key);
|
||||
}
|
||||
|
||||
// rjf: ptrs to arrays
|
||||
if(direct_type_kind == E_TypeKind_Array)
|
||||
{
|
||||
arr_eval.type_key = direct_type_key;
|
||||
arr_eval.mode = E_Mode_Offset;
|
||||
arr_eval.space = ptr_val_eval.space;
|
||||
arr_eval.value = ptr_val_eval.value;
|
||||
arr_type_kind = e_type_kind_from_key(direct_type_key);
|
||||
}
|
||||
|
||||
// rjf: ptrs to ptrs
|
||||
if(direct_type_kind == E_TypeKind_Ptr || direct_type_kind == E_TypeKind_LRef || direct_type_kind == E_TypeKind_RRef)
|
||||
{
|
||||
ptr_eval.type_key = direct_type_key;
|
||||
ptr_eval.mode = E_Mode_Offset;
|
||||
ptr_eval.space = ptr_val_eval.space;
|
||||
ptr_eval.value = ptr_val_eval.value;
|
||||
ptr_type_kind = e_type_kind_from_key(direct_type_key);
|
||||
}
|
||||
}
|
||||
|
||||
//////////////////////////////
|
||||
//- rjf: determine rule for building expansion children
|
||||
//
|
||||
typedef enum DF_EvalVizExpandRule
|
||||
{
|
||||
DF_EvalVizExpandRule_Default,
|
||||
DF_EvalVizExpandRule_List,
|
||||
DF_EvalVizExpandRule_ViewRule,
|
||||
}
|
||||
DF_EvalVizExpandRule;
|
||||
DF_EvalVizExpandRule expand_rule = DF_EvalVizExpandRule_Default;
|
||||
DF_CoreViewRuleSpec *expand_view_rule_spec = &df_g_nil_core_view_rule_spec;
|
||||
DF_CfgVal *expand_view_rule_cfg = &df_g_nil_cfg_val;
|
||||
String8 list_next_link_member_name = {0};
|
||||
{
|
||||
//- rjf: look for view rules which have their own custom viz block building rules
|
||||
if(expand_rule == DF_EvalVizExpandRule_Default && parent_is_expanded)
|
||||
{
|
||||
for(DF_CfgVal *val = cfg_table->first_val; val != 0 && val != &df_g_nil_cfg_val; val = val->linear_next)
|
||||
{
|
||||
DF_CoreViewRuleSpec *spec = df_core_view_rule_spec_from_string(val->string);
|
||||
if(str8_match(spec->info.string, str8_lit("list"), 0) ||
|
||||
str8_match(spec->info.string, str8_lit("omit"), 0) ||
|
||||
str8_match(spec->info.string, str8_lit("only"), 0))
|
||||
{
|
||||
// TODO(rjf): "list" view rule needs to be formally moved into the visualization
|
||||
// engine hooks when the system is mature enough to support it
|
||||
// also "omit", "only"
|
||||
continue;
|
||||
}
|
||||
if(spec->info.flags & DF_CoreViewRuleSpecInfoFlag_VizBlockProd)
|
||||
{
|
||||
expand_rule = DF_EvalVizExpandRule_ViewRule;
|
||||
expand_view_rule_spec = spec;
|
||||
expand_view_rule_cfg = val;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//- rjf: get linked list viz view rule info for structs
|
||||
if(expand_rule == DF_EvalVizExpandRule_Default &&
|
||||
parent_is_expanded &&
|
||||
(udt_type_kind == E_TypeKind_Struct ||
|
||||
udt_type_kind == E_TypeKind_Union ||
|
||||
udt_type_kind == E_TypeKind_Class))
|
||||
{
|
||||
DF_CfgVal *list_cfg = df_cfg_val_from_string(cfg_table, str8_lit("list"));
|
||||
if(list_cfg != &df_g_nil_cfg_val)
|
||||
{
|
||||
list_next_link_member_name = list_cfg->first->first->string;
|
||||
expand_rule = DF_EvalVizExpandRule_List;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//////////////////////////////
|
||||
//- rjf: (all) descend to make blocks according to lens
|
||||
//
|
||||
if(parent_is_expanded && expand_rule == DF_EvalVizExpandRule_ViewRule &&
|
||||
expand_view_rule_spec != &df_g_nil_core_view_rule_spec &&
|
||||
expand_view_rule_cfg != &df_g_nil_cfg_val)
|
||||
ProfScope("build viz blocks for lens")
|
||||
{
|
||||
expand_view_rule_spec->info.viz_block_prod(arena, eval_view, eval, string, cfg_table, parent_key, key, depth+1, expand_view_rule_cfg->last, list_out);
|
||||
}
|
||||
|
||||
//////////////////////////////
|
||||
//- rjf: (structs, unions, classes) descend to members & make block(s), normally
|
||||
//
|
||||
if(parent_is_expanded && expand_rule == DF_EvalVizExpandRule_Default &&
|
||||
(udt_type_kind == E_TypeKind_Struct ||
|
||||
udt_type_kind == E_TypeKind_Union ||
|
||||
udt_type_kind == E_TypeKind_Class))
|
||||
ProfScope("build viz blocks for UDT members")
|
||||
{
|
||||
//- rjf: type -> filtered data members
|
||||
E_MemberArray data_members = e_type_data_members_from_key(scratch.arena, udt_eval.type_key);
|
||||
E_MemberArray filtered_data_members = df_filtered_data_members_from_members_cfg_table(scratch.arena, data_members, cfg_table);
|
||||
|
||||
//- rjf: build blocks for all members, split by sub-expansions
|
||||
DF_EvalVizBlock *last_vb = df_eval_viz_block_begin(arena, DF_EvalVizBlockKind_Members, key, df_expand_key_make(df_hash_from_expand_key(key), 0), depth+1);
|
||||
{
|
||||
last_vb->eval = udt_eval;
|
||||
last_vb->string = eval_string;
|
||||
last_vb->cfg_table = cfg_table;
|
||||
last_vb->visual_idx_range = last_vb->semantic_idx_range = r1u64(0, filtered_data_members.count);
|
||||
}
|
||||
for(DF_ExpandNode *child = node->first; child != 0; child = child->next)
|
||||
{
|
||||
// rjf: unpack expansion info; skip out-of-bounds splits
|
||||
U64 child_num = child->key.child_num;
|
||||
U64 child_idx = child_num-1;
|
||||
if(child_idx >= filtered_data_members.count)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
// rjf: form split: truncate & complete last block; begin next block
|
||||
last_vb = df_eval_viz_block_split_and_continue(arena, list_out, last_vb, child_idx);
|
||||
|
||||
// rjf: recurse for sub-expansion
|
||||
{
|
||||
DF_CfgTable child_cfg = *cfg_table;
|
||||
{
|
||||
String8 view_rule_string = df_eval_view_rule_from_key(eval_view, df_expand_key_make(df_hash_from_expand_key(key), child_num));
|
||||
child_cfg = df_cfg_table_from_inheritance(arena, cfg_table);
|
||||
if(view_rule_string.size != 0)
|
||||
{
|
||||
df_cfg_table_push_unparsed_string(arena, &child_cfg, view_rule_string, DF_CfgSrc_User);
|
||||
}
|
||||
}
|
||||
E_Member *member = &filtered_data_members.v[child_idx];
|
||||
E_Eval child_eval = zero_struct;
|
||||
{
|
||||
child_eval.type_key = member->type_key;
|
||||
child_eval.mode = udt_eval.mode;
|
||||
child_eval.space = udt_eval.space;
|
||||
child_eval.value.u64 = udt_eval.value.u64 + member->off;
|
||||
}
|
||||
df_append_viz_blocks_for_parent__rec(arena, eval_view, key, child->key, member->name, child_eval, member, &child_cfg, depth+1, list_out);
|
||||
}
|
||||
}
|
||||
df_eval_viz_block_end(list_out, last_vb);
|
||||
}
|
||||
|
||||
//////////////////////////////
|
||||
//- rjf: (enums) descend to members & make block(s)
|
||||
//
|
||||
if(parent_is_expanded && expand_rule == DF_EvalVizExpandRule_Default &&
|
||||
udt_eval.mode == E_Mode_Null &&
|
||||
udt_type_kind == E_TypeKind_Enum)
|
||||
ProfScope("build viz blocks for UDT type-eval enums")
|
||||
{
|
||||
//- rjf: type -> full type info
|
||||
E_Type *type = e_type_from_key(scratch.arena, udt_eval.type_key);
|
||||
|
||||
//- rjf: build block for all members (cannot be expanded)
|
||||
DF_EvalVizBlock *last_vb = df_eval_viz_block_begin(arena, DF_EvalVizBlockKind_EnumMembers, key, df_expand_key_make(df_hash_from_expand_key(key), 0), depth+1);
|
||||
{
|
||||
last_vb->eval = udt_eval;
|
||||
last_vb->string = eval_string;
|
||||
last_vb->cfg_table = cfg_table;
|
||||
last_vb->visual_idx_range = last_vb->semantic_idx_range = r1u64(0, type->count);
|
||||
}
|
||||
df_eval_viz_block_end(list_out, last_vb);
|
||||
}
|
||||
|
||||
//////////////////////////////
|
||||
//- rjf: (structs, unions, classes) descend to members & make block(s), with linked list view
|
||||
//
|
||||
if(parent_is_expanded && expand_rule == DF_EvalVizExpandRule_List &&
|
||||
(udt_type_kind == E_TypeKind_Struct ||
|
||||
udt_type_kind == E_TypeKind_Union ||
|
||||
udt_type_kind == E_TypeKind_Class))
|
||||
ProfScope("(structs, unions, classes) descend to members & make block(s), with linked list view")
|
||||
{
|
||||
//- rjf: type -> data members
|
||||
E_MemberArray data_members = e_type_data_members_from_key(scratch.arena, udt_eval.type_key);
|
||||
|
||||
//- rjf: find link member
|
||||
E_Member *link_member = 0;
|
||||
E_TypeKind link_member_type_kind = E_TypeKind_Null;
|
||||
E_TypeKey link_member_ptee_type_key = zero_struct;
|
||||
for(U64 idx = 0; idx < data_members.count; idx += 1)
|
||||
{
|
||||
E_Member *mem = &data_members.v[idx];
|
||||
if(str8_match(mem->name, list_next_link_member_name, 0))
|
||||
{
|
||||
link_member = mem;
|
||||
link_member_type_kind = e_type_kind_from_key(link_member->type_key);
|
||||
link_member_ptee_type_key = e_type_ptee_from_key(link_member->type_key);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
//- rjf: check if link member is good
|
||||
B32 link_member_is_good = 1;
|
||||
if(link_member == 0 ||
|
||||
link_member_type_kind != E_TypeKind_Ptr ||
|
||||
!e_type_key_match(link_member_ptee_type_key, udt_eval.type_key))
|
||||
{
|
||||
link_member_is_good = 0;
|
||||
}
|
||||
|
||||
//- rjf: gather link bases
|
||||
DF_EvalLinkBaseChunkList link_bases = {0};
|
||||
if(link_member_is_good)
|
||||
{
|
||||
link_bases = df_eval_link_base_chunk_list_from_eval(scratch.arena, link_member->type_key, link_member->off, udt_eval, 512);
|
||||
}
|
||||
|
||||
//- rjf: build blocks for all links, split by sub-expansions
|
||||
if(link_member_is_good)
|
||||
{
|
||||
DF_EvalVizBlock *last_vb = df_eval_viz_block_begin(arena, DF_EvalVizBlockKind_Links, key, df_expand_key_make(df_hash_from_expand_key(key), 0), depth+1);
|
||||
{
|
||||
last_vb->eval = udt_eval;
|
||||
last_vb->string = eval_string;
|
||||
last_vb->cfg_table = cfg_table;
|
||||
last_vb->link_member_type_key = link_member->type_key;
|
||||
last_vb->link_member_off = link_member->off;
|
||||
last_vb->visual_idx_range = r1u64(0, link_bases.count);
|
||||
last_vb->semantic_idx_range = r1u64(0, link_bases.count);
|
||||
}
|
||||
for(DF_ExpandNode *child = node->first; child != 0; child = child->next)
|
||||
{
|
||||
// rjf: unpack expansion info; skip out-of-bounds splits
|
||||
U64 child_num = child->key.child_num;
|
||||
U64 child_idx = child_num-1;
|
||||
if(child_idx >= link_bases.count)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
// rjf: form split: truncate & complete last block; begin next block
|
||||
last_vb = df_eval_viz_block_split_and_continue(arena, list_out, last_vb, child_idx);
|
||||
|
||||
// rjf: find mode/offset of this link
|
||||
DF_EvalLinkBase link_base = df_eval_link_base_from_chunk_list_index(&link_bases, child_idx);
|
||||
|
||||
// rjf: recurse for sub-expansion
|
||||
{
|
||||
DF_CfgTable child_cfg = *cfg_table;
|
||||
{
|
||||
String8 view_rule_string = df_eval_view_rule_from_key(eval_view, df_expand_key_make(df_hash_from_expand_key(key), child_num));
|
||||
child_cfg = df_cfg_table_from_inheritance(arena, cfg_table);
|
||||
if(view_rule_string.size != 0)
|
||||
{
|
||||
df_cfg_table_push_unparsed_string(arena, &child_cfg, view_rule_string, DF_CfgSrc_User);
|
||||
}
|
||||
}
|
||||
E_Eval child_eval = zero_struct;
|
||||
{
|
||||
child_eval.type_key = udt_eval.type_key;
|
||||
child_eval.mode = E_Mode_Offset;
|
||||
child_eval.space = udt_eval.space;
|
||||
child_eval.value.u64= link_base.offset;
|
||||
}
|
||||
df_append_viz_blocks_for_parent__rec(arena, eval_view, key, child->key, push_str8f(arena, "[%I64u]", child_idx), child_eval, 0, &child_cfg, depth+1, list_out);
|
||||
}
|
||||
}
|
||||
df_eval_viz_block_end(list_out, last_vb);
|
||||
}
|
||||
}
|
||||
|
||||
//////////////////////////////
|
||||
//- rjf: (arrays) descend to elements & make block(s), normally
|
||||
//
|
||||
if(parent_is_expanded && expand_rule == DF_EvalVizExpandRule_Default &&
|
||||
arr_type_kind == E_TypeKind_Array)
|
||||
ProfScope("(arrays) descend to elements & make block(s)")
|
||||
{
|
||||
//- rjf: unpack array type info
|
||||
E_Type *array_type = e_type_from_key(scratch.arena, arr_eval.type_key);
|
||||
U64 array_count = array_type->count;
|
||||
E_TypeKey element_type_key = array_type->direct_type_key;
|
||||
U64 element_type_byte_size = e_type_byte_size_from_key(element_type_key);
|
||||
|
||||
//- rjf: build blocks for all elements, split by sub-expansions
|
||||
DF_EvalVizBlock *last_vb = df_eval_viz_block_begin(arena, DF_EvalVizBlockKind_Elements, key, df_expand_key_make(df_hash_from_expand_key(key), 0), depth+1);
|
||||
{
|
||||
last_vb->eval = arr_eval;
|
||||
last_vb->string = eval_string;
|
||||
last_vb->cfg_table = cfg_table;
|
||||
last_vb->visual_idx_range = last_vb->semantic_idx_range = r1u64(0, array_count);
|
||||
}
|
||||
for(DF_ExpandNode *child = node->first; child != 0; child = child->next)
|
||||
{
|
||||
// rjf: unpack expansion info; skip out-of-bounds splits
|
||||
U64 child_num = child->key.child_num;
|
||||
U64 child_idx = child_num-1;
|
||||
if(child_idx >= array_count)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
// rjf: form split: truncate & complete last block; begin next block
|
||||
last_vb = df_eval_viz_block_split_and_continue(arena, list_out, last_vb, child_idx);
|
||||
|
||||
// rjf: recurse for sub-expansion
|
||||
{
|
||||
DF_CfgTable child_cfg = *cfg_table;
|
||||
{
|
||||
String8 view_rule_string = df_eval_view_rule_from_key(eval_view, df_expand_key_make(df_hash_from_expand_key(key), child_num));
|
||||
child_cfg = df_cfg_table_from_inheritance(arena, cfg_table);
|
||||
if(view_rule_string.size != 0)
|
||||
{
|
||||
df_cfg_table_push_unparsed_string(arena, &child_cfg, view_rule_string, DF_CfgSrc_User);
|
||||
}
|
||||
}
|
||||
E_Eval child_eval = zero_struct;
|
||||
{
|
||||
child_eval.type_key = element_type_key;
|
||||
child_eval.mode = arr_eval.mode;
|
||||
child_eval.space = arr_eval.space;
|
||||
child_eval.value.u64= arr_eval.value.u64 + child_idx*element_type_byte_size;
|
||||
}
|
||||
df_append_viz_blocks_for_parent__rec(arena, eval_view, key, child->key, push_str8f(arena, "[%I64u]", child_idx), child_eval, 0, &child_cfg, depth+1, list_out);
|
||||
}
|
||||
}
|
||||
df_eval_viz_block_end(list_out, last_vb);
|
||||
}
|
||||
|
||||
//////////////////////////////
|
||||
//- rjf: (ptr to ptrs) descend to make blocks for pointed-at-pointer
|
||||
//
|
||||
if(parent_is_expanded && expand_rule == DF_EvalVizExpandRule_Default && (ptr_type_kind == E_TypeKind_Ptr || ptr_type_kind == E_TypeKind_LRef || ptr_type_kind == E_TypeKind_RRef))
|
||||
ProfScope("build viz blocks for ptr-to-ptrs")
|
||||
{
|
||||
String8 subexpr = push_str8f(arena, "*(%S)", string);
|
||||
df_append_viz_blocks_for_parent__rec(arena, eval_view, key, df_expand_key_make(df_hash_from_expand_key(key), 1), subexpr, ptr_eval, 0, cfg_table, depth+1, list_out);
|
||||
}
|
||||
|
||||
scratch_end(scratch);
|
||||
ProfEnd();
|
||||
#endif
|
||||
}
|
||||
|
||||
internal DF_EvalVizBlockList
|
||||
|
||||
Reference in New Issue
Block a user