eliminate all old eval visualization block/row code

This commit is contained in:
Ryan Fleury
2024-09-27 10:29:55 -07:00
parent 45226e8a81
commit ecaa2c55c0
9 changed files with 147 additions and 1597 deletions
@@ -265,187 +265,6 @@ EV_VIEW_RULE_EXPR_EXPAND_RANGE_INFO_FUNCTION_DEF(default)
return result;
}
#if 0 // TODO(rjf): @blocks
EV_VIEW_RULE_BLOCK_PROD_FUNCTION_DEF(default)
{
Temp scratch = scratch_begin(&arena, 1);
////////////////////////////
//- rjf: unpack expression type info
//
E_IRTreeAndType irtree = e_irtree_and_type_from_expr(scratch.arena, expr);
E_TypeKey type_key = e_type_unwrap(irtree.type_key);
E_TypeKind type_kind = e_type_kind_from_key(type_key);
E_TypeKey direct_type_key = e_type_unwrap(e_type_direct_from_key(type_key));
E_TypeKind direct_type_kind = e_type_kind_from_key(direct_type_key);
////////////////////////////
//- rjf: do struct/union/class member block generation
//
if((type_kind == E_TypeKind_Struct ||
type_kind == E_TypeKind_Union ||
type_kind == E_TypeKind_Class) ||
(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)))
{
// rjf: type -> filtered data members
E_MemberArray data_members = e_type_data_members_from_key(arena, e_type_kind_is_pointer_or_ref(type_kind) ? direct_type_key : type_key);
// rjf: build blocks for all members, split by sub-expansions
EV_Block *last_vb = ev_block_begin(arena, EV_BlockKind_Members, key, ev_key_make(ev_hash_from_key(key), 0), depth);
{
last_vb->expr = expr;
last_vb->view_rules = view_rules;
last_vb->visual_idx_range = last_vb->semantic_idx_range = r1u64(0, data_members.count);
last_vb->members = data_members;
}
for(EV_ExpandNode *child = expand_node->first; child != 0; child = child->next)
{
// rjf: unpack expansion info; skip out-of-bounds splits
U64 child_id = child->key.child_id;
U64 child_idx = child_id-1;
E_Expr *child_expr = ev_expr_from_block_index(arena, last_vb, child_idx);
if(child_idx >= last_vb->semantic_idx_range.max)
{
continue;
}
// rjf: form split: truncate & complete last block; begin next block
last_vb = ev_block_split_and_continue(arena, out, last_vb, child_idx);
// rjf: build child view rules
EV_ViewRuleList *child_view_rules = ev_view_rule_list_from_inheritance(arena, view_rules);
{
String8 view_rule_string = ev_view_rule_from_key(view, child->key);
if(view_rule_string.size == 0)
{
Temp scratch = scratch_begin(&arena, 1);
E_IRTreeAndType irtree = e_irtree_and_type_from_expr(arena, child_expr);
view_rule_string = ev_auto_view_rule_from_type_key(irtree.type_key);
scratch_end(scratch);
}
if(view_rule_string.size != 0)
{
ev_view_rule_list_push_string(arena, child_view_rules, view_rule_string);
}
}
// rjf: recurse for child
ev_append_expr_blocks__rec(arena, view, filter, key, child->key, str8_zero(), child_expr, child_view_rules, depth, out);
}
ev_block_end(out, last_vb);
}
////////////////////////////
//- rjf: do enum member block generation
//
// (just a single block for all enum members; enum members can never be expanded)
//
else if(type_kind == E_TypeKind_Enum ||
(e_type_kind_is_pointer_or_ref(type_kind) && direct_type_kind == E_TypeKind_Enum))
{
E_Type *type = e_type_from_key(arena, e_type_kind_is_pointer_or_ref(type_kind) ? direct_type_key : type_key);
EV_Block *last_vb = ev_block_begin(arena, EV_BlockKind_EnumMembers, key, ev_key_make(ev_hash_from_key(key), 0), depth);
{
last_vb->expr = expr;
last_vb->view_rules = view_rules;
last_vb->visual_idx_range = last_vb->semantic_idx_range = r1u64(0, type->count);
last_vb->enum_vals.v = type->enum_vals;
last_vb->enum_vals.count = type->count;
}
ev_block_end(out, last_vb);
}
////////////////////////////
//- rjf: do array element block generation
//
else if(type_kind == E_TypeKind_Array ||
(e_type_kind_is_pointer_or_ref(type_kind) && direct_type_kind == E_TypeKind_Array))
{
// rjf: unpack array type info
E_Type *array_type = e_type_from_key(scratch.arena, e_type_kind_is_pointer_or_ref(type_kind) ? direct_type_key : type_key);
U64 array_count = array_type->count;
B32 need_extra_deref = e_type_kind_is_pointer_or_ref(type_kind);
// rjf: build blocks for all elements, split by sub-expansions
EV_Block *last_vb = ev_block_begin(arena, EV_BlockKind_Elements, key, ev_key_make(ev_hash_from_key(key), 0), depth);
{
last_vb->expr = need_extra_deref ? e_expr_ref_deref(arena, expr) : expr;
last_vb->view_rules = view_rules;
last_vb->visual_idx_range = last_vb->semantic_idx_range = r1u64(0, array_count);
}
for(EV_ExpandNode *child = expand_node->first; child != 0; child = child->next)
{
// rjf: unpack expansion info; skip out-of-bounds splits
U64 child_id = child->key.child_id;
U64 child_idx = child_id-1;
E_Expr *child_expr = ev_expr_from_block_index(arena, last_vb, child_idx);
if(child_idx >= last_vb->semantic_idx_range.max)
{
continue;
}
// rjf: form split: truncate & complete last block; begin next block
last_vb = ev_block_split_and_continue(arena, out, last_vb, child_idx);
// rjf: build child view rules
EV_ViewRuleList *child_view_rules = ev_view_rule_list_from_inheritance(arena, view_rules);
{
String8 view_rule_string = ev_view_rule_from_key(view, child->key);
if(view_rule_string.size == 0)
{
Temp scratch = scratch_begin(&arena, 1);
E_IRTreeAndType irtree = e_irtree_and_type_from_expr(arena, child_expr);
view_rule_string = ev_auto_view_rule_from_type_key(irtree.type_key);
scratch_end(scratch);
}
if(view_rule_string.size != 0)
{
ev_view_rule_list_push_string(arena, child_view_rules, view_rule_string);
}
}
// rjf: recurse for child
ev_append_expr_blocks__rec(arena, view, filter, key, child->key, str8_zero(), child_expr, child_view_rules, depth, out);
}
ev_block_end(out, last_vb);
}
////////////////////////////
//- rjf: do pointer-to-pointer block generation
//
else if(e_type_kind_is_pointer_or_ref(type_kind) && e_type_kind_is_pointer_or_ref(direct_type_kind))
{
// rjf: compute key, compute expr
EV_Key child_key = ev_key_make(ev_hash_from_key(key), 1);
E_Expr *child_expr = e_expr_ref_deref(arena, expr);
// rjf: build child view rules
EV_ViewRuleList *child_view_rules = ev_view_rule_list_from_inheritance(arena, view_rules);
{
String8 view_rule_string = ev_view_rule_from_key(view, child_key);
if(view_rule_string.size == 0)
{
Temp scratch = scratch_begin(&arena, 1);
E_IRTreeAndType irtree = e_irtree_and_type_from_expr(arena, child_expr);
view_rule_string = ev_auto_view_rule_from_type_key(irtree.type_key);
scratch_end(scratch);
}
if(view_rule_string.size != 0)
{
ev_view_rule_list_push_string(arena, child_view_rules, view_rule_string);
}
}
// rjf: recurse for child
ev_append_expr_blocks__rec(arena, view, filter, key, child_key, str8_zero(), child_expr, child_view_rules, depth, out);
}
scratch_end(scratch);
}
#endif
////////////////////////////////
//~ rjf: "array"