checkpoint in moving from old lookup hooks -> new type hooks; elimination of unnecessary recomputation of ir-trees/evals, just use information in already-computed evals

This commit is contained in:
Ryan Fleury
2025-04-08 14:39:28 -07:00
parent fbd78525d2
commit d3f0a9a672
19 changed files with 3369 additions and 3200 deletions
@@ -146,15 +146,13 @@ struct EV_Block
// rjf: split index, relative to parent's space
U64 split_relative_idx;
// rjf: expression / visualization info
String8 string;
E_Expr *expr;
E_Expr *lookup_tag;
E_Expr *expand_tag;
E_LookupRule *lookup_rule;
EV_ExpandRule *expand_rule;
void *lookup_rule_user_data;
void *expand_rule_user_data;
// rjf: evaluation info
String8 string;
E_Eval eval;
E_TypeExpandInfo type_expand_info;
E_TypeExpandRule *type_expand_rule;
EV_ExpandInfo viz_expand_info;
EV_ExpandRule *viz_expand_rule;
// rjf: expansion info
U64 row_count;
@@ -201,8 +199,8 @@ struct EV_Row
EV_Block *block;
EV_Key key;
U64 visual_size;
String8 string;
E_Expr *expr;
String8 string;
E_Eval eval;
};
typedef struct EV_WindowedRowNode EV_WindowedRowNode;
@@ -282,7 +280,7 @@ global read_only EV_ExpandRule ev_nil_expand_rule =
EV_EXPAND_RULE_INFO_FUNCTION_NAME(nil),
};
thread_static EV_ExpandRuleTable *ev_view_rule_info_table = 0;
global read_only EV_Block ev_nil_block = {&ev_nil_block, &ev_nil_block, &ev_nil_block, &ev_nil_block, &ev_nil_block, {0}, 0, {0}, &e_expr_nil, &e_expr_nil, &e_expr_nil, &e_lookup_rule__nil, &ev_nil_expand_rule};
global read_only EV_Block ev_nil_block = {&ev_nil_block, &ev_nil_block, &ev_nil_block, &ev_nil_block, &ev_nil_block, {0}, 0, {0}, {zero_struct, zero_struct, &e_expr_nil, &e_irnode_nil}};
////////////////////////////////
//~ rjf: Key Functions
@@ -340,12 +338,14 @@ internal void ev_keyed_expr_push_tags(Arena *arena, EV_View *view, EV_Block *blo
////////////////////////////////
//~ rjf: Block Building
internal EV_BlockTree ev_block_tree_from_exprs(Arena *arena, EV_View *view, String8 filter, E_ExprChain exprs);
internal EV_BlockTree ev_block_tree_from_expr(Arena *arena, EV_View *view, String8 filter, E_Expr *expr);
internal U64 ev_depth_from_block(EV_Block *block);
////////////////////////////////
//~ rjf: Block Coordinate Spaces
internal U64 ev_block_id_from_num(EV_Block *block, U64 num);
internal U64 ev_block_num_from_id(EV_Block *block, U64 id);
internal EV_BlockRangeList ev_block_range_list_from_tree(Arena *arena, EV_BlockTree *block_tree);
internal EV_BlockRange ev_block_range_from_num(EV_BlockRangeList *block_ranges, U64 num);
internal EV_Key ev_key_from_num(EV_BlockRangeList *block_ranges, U64 num);
@@ -359,7 +359,6 @@ internal U64 ev_num_from_vnum(EV_BlockRangeList *block_ranges, U64 vidx);
internal EV_WindowedRowList ev_windowed_row_list_from_block_range_list(Arena *arena, EV_View *view, String8 filter, EV_BlockRangeList *block_ranges, Rng1U64 vnum_range);
internal EV_Row *ev_row_from_num(Arena *arena, EV_View *view, String8 filter, EV_BlockRangeList *block_ranges, U64 num);
internal EV_WindowedRowList ev_rows_from_num_range(Arena *arena, EV_View *view, String8 filter, EV_BlockRangeList *block_ranges, Rng1U64 num_range);
internal String8 ev_expr_string_from_row(Arena *arena, EV_Row *row, EV_StringFlags flags);
internal B32 ev_row_is_expandable(EV_Row *row);
internal B32 ev_row_is_editable(EV_Row *row);