From 59fe6c79cb5b5a515f07204f62ae7d97e737ba48 Mon Sep 17 00:00:00 2001 From: Ryan Fleury Date: Mon, 3 Feb 2025 10:07:20 -0800 Subject: [PATCH] distinguish root block from non-root blocks; in root case, we do not want to do a lookup-range to generate the block's expression (but in all other cases we do) --- src/eval/eval_ir.c | 2 +- src/eval/eval_ir.h | 9 +++++++++ src/eval_visualization/eval_visualization_core.c | 14 +++++++++++--- src/eval_visualization/eval_visualization_core.h | 2 +- 4 files changed, 22 insertions(+), 5 deletions(-) diff --git a/src/eval/eval_ir.c b/src/eval/eval_ir.c index f83ea8a4..0c270083 100644 --- a/src/eval/eval_ir.c +++ b/src/eval/eval_ir.c @@ -101,7 +101,7 @@ e_lookup_rule_map_insert(Arena *arena, E_LookupRuleMap *map, E_LookupRule *rule) internal E_LookupRule * e_lookup_rule_from_string(String8 string) { - E_LookupRule *result = &e_lookup_rule__default; + E_LookupRule *result = &e_lookup_rule__nil; if(e_ir_ctx->lookup_rule_map != 0 && e_ir_ctx->lookup_rule_map->slots_count != 0) { U64 hash = e_hash_from_string(5381, string); diff --git a/src/eval/eval_ir.h b/src/eval/eval_ir.h index 0e0a0710..dace3b8b 100644 --- a/src/eval/eval_ir.h +++ b/src/eval/eval_ir.h @@ -242,6 +242,15 @@ struct E_IRCtx //////////////////////////////// //~ rjf: Globals +local_persist read_only E_LookupRule e_lookup_rule__nil = +{ + str8_lit_comp("nil"), + E_LOOKUP_INFO_FUNCTION_NAME(default), + E_LOOKUP_ACCESS_FUNCTION_NAME(default), + E_LOOKUP_RANGE_FUNCTION_NAME(default), + E_LOOKUP_ID_FROM_NUM_FUNCTION_NAME(default), + E_LOOKUP_NUM_FROM_ID_FUNCTION_NAME(default), +}; local_persist read_only E_LookupRule e_lookup_rule__default = { str8_lit_comp("default"), diff --git a/src/eval_visualization/eval_visualization_core.c b/src/eval_visualization/eval_visualization_core.c index 3b547ff0..d2deaba4 100644 --- a/src/eval_visualization/eval_visualization_core.c +++ b/src/eval_visualization/eval_visualization_core.c @@ -508,7 +508,7 @@ ev_block_tree_from_expr(Arena *arena, EV_View *view, String8 filter, String8 str { E_LookupRule *lookup_rule_candidate = e_lookup_rule_from_string(tag->first->string); EV_ViewRuleInfo *expand_rule_candidate = ev_view_rule_info_from_string(tag->first->string); - if(lookup_rule_candidate != &e_lookup_rule__default) + if(lookup_rule_candidate != &e_lookup_rule__nil) { lookup_rule = lookup_rule_candidate; lookup_rule_tag = tag; @@ -946,6 +946,7 @@ ev_windowed_row_list_from_block_range_list(Arena *arena, EV_View *view, String8 if(block_relative_range__windowed.max > block_relative_range__windowed.min) { // rjf: get info about expansion range + B32 is_root = 0; U64 range_exprs_count = dim_1u64(block_relative_range__windowed); E_Expr **range_exprs = push_array(arena, E_Expr *, range_exprs_count); String8 *range_exprs_strings = push_array(arena, String8 ,range_exprs_count); @@ -953,10 +954,17 @@ ev_windowed_row_list_from_block_range_list(Arena *arena, EV_View *view, String8 { range_exprs[idx] = &e_expr_nil; } - n->v.block->lookup_rule->range(arena, n->v.block->expr, block_relative_range__windowed, range_exprs, range_exprs_strings, n->v.block->lookup_rule_user_data); + if(n->v.block->lookup_rule == &e_lookup_rule__nil) + { + is_root = 1; + } + else + { + n->v.block->lookup_rule->range(arena, n->v.block->expr, block_relative_range__windowed, range_exprs, range_exprs_strings, n->v.block->lookup_rule_user_data); + } // rjf: no expansion operator applied -> push row for block expression; pass through block info - if(range_exprs_count == 0) + if(is_root) { EV_WindowedRowNode *row_node = push_array(arena, EV_WindowedRowNode, 1); SLLQueuePush(rows.first, rows.last, row_node); diff --git a/src/eval_visualization/eval_visualization_core.h b/src/eval_visualization/eval_visualization_core.h index 696adcc4..5f537113 100644 --- a/src/eval_visualization/eval_visualization_core.h +++ b/src/eval_visualization/eval_visualization_core.h @@ -283,7 +283,7 @@ global read_only EV_ViewRuleInfo ev_nil_view_rule_info = }; thread_static EV_ViewRuleInfoTable *ev_view_rule_info_table = 0; thread_static EV_AutoViewRuleTable *ev_auto_view_rule_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__default, &ev_nil_view_rule_info}; +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_view_rule_info}; //////////////////////////////// //~ rjf: Key Functions