From c976154284c2e4645076d1c926756aa8eb6cc0c3 Mon Sep 17 00:00:00 2001 From: Ryan Fleury Date: Wed, 25 Sep 2024 09:34:23 -0700 Subject: [PATCH] eval: add cache for type data member gathering & member lookup; eval_visualization: sketch out new hook organization which has single hook for both view rule expansion info, + expansion expr production, in a single combined path (the two often require the same information so it is maybe a good idea to combine them - if not, it will be easy to separate into two stages (expand + expr-child production), but basically just trying to get view rules out of 'block production', and more into just providing the information that actually varies per view rule --- src/eval/eval_types.c | 73 ++++++++++++ src/eval/eval_types.h | 50 ++++++++ .../eval_visualization.mdesk | 29 ++--- .../eval_visualization_builtin_view_rules.c | 107 ++++++++++++++++++ .../eval_visualization_core.h | 29 +++-- .../generated/eval_visualization.meta.c | 22 ++-- .../generated/eval_visualization.meta.h | 1 + 7 files changed, 277 insertions(+), 34 deletions(-) diff --git a/src/eval/eval_types.c b/src/eval/eval_types.c index 566de57c..51c6be1f 100644 --- a/src/eval/eval_types.c +++ b/src/eval/eval_types.c @@ -248,6 +248,8 @@ e_select_type_ctx(E_TypeCtx *ctx) e_type_state->cons_key_slots_count = 256; e_type_state->cons_content_slots = push_array(e_type_state->arena, E_ConsTypeSlot, e_type_state->cons_content_slots_count); e_type_state->cons_key_slots = push_array(e_type_state->arena, E_ConsTypeSlot, e_type_state->cons_key_slots_count); + e_type_state->member_cache_slots_count = 256; + e_type_state->member_cache_slots = push_array(e_type_state->arena, E_MemberCacheSlot, e_type_state->member_cache_slots_count); } //////////////////////////////// @@ -1820,3 +1822,74 @@ e_type_key_list_copy(Arena *arena, E_TypeKeyList *src) } return dst; } + +//////////////////////////////// +//~ rjf: Cache Lookups + +internal E_MemberCacheNode * +e_member_cache_node_from_type_key(E_TypeKey key) +{ + U64 hash = e_hash_from_string(5381, str8_struct(&key)); + U64 slot_idx = hash%e_type_state->member_cache_slots_count; + E_MemberCacheSlot *slot = &e_type_state->member_cache_slots[slot_idx]; + E_MemberCacheNode *node = 0; + for(E_MemberCacheNode *n = slot->first; n != 0; n = n->next) + { + if(e_type_key_match(n->key, key)) + { + node = n; + break; + } + } + if(node == 0) + { + node = push_array(e_type_state->arena, E_MemberCacheNode, 1); + SLLQueuePush(slot->first, slot->last, node); + node->key = key; + node->members = e_type_data_members_from_key(e_type_state->arena, key); + node->member_hash_slots_count = node->members.count; + node->member_hash_slots = push_array(e_type_state->arena, E_MemberHashSlot, node->member_hash_slots_count); + for EachIndex(idx, node->members.count) + { + U64 hash = e_hash_from_string(5381, node->members.v[idx].name); + U64 slot_idx = hash%node->member_hash_slots_count; + E_MemberHashNode *n = push_array(e_type_state->arena, E_MemberHashNode, 1); + SLLQueuePush(node->member_hash_slots[slot_idx].first, node->member_hash_slots[slot_idx].last, n); + n->member_idx = idx; + } + } + return node; +} + +internal E_MemberArray +e_type_data_members_from_key__cached(E_TypeKey key) +{ + E_MemberArray members = {0}; + E_MemberCacheNode *node = e_member_cache_node_from_type_key(key); + if(node != 0) + { + members = node->members; + } + return members; +} + +internal E_Member +e_type_member_from_key_name__cached(E_TypeKey key, String8 name) +{ + E_Member result = {0}; + E_MemberCacheNode *node = e_member_cache_node_from_type_key(key); + if(node != 0) + { + U64 hash = e_hash_from_string(5381, name); + U64 slot_idx = hash%node->member_hash_slots_count; + for(E_MemberHashNode *n = node->member_hash_slots[slot_idx].first; n != 0; n = n->next) + { + if(str8_match(node->members.v[n->member_idx].name, name, 0)) + { + result = node->members.v[n->member_idx]; + break; + } + } + } + return result; +} diff --git a/src/eval/eval_types.h b/src/eval/eval_types.h index f2e112dd..643dc3e2 100644 --- a/src/eval/eval_types.h +++ b/src/eval/eval_types.h @@ -138,6 +138,8 @@ struct E_Type //////////////////////////////// //~ rjf: Evaluation Context +//- rjf: constructed type cache types + typedef struct E_ConsTypeParams E_ConsTypeParams; struct E_ConsTypeParams { @@ -167,6 +169,41 @@ struct E_ConsTypeSlot E_ConsTypeNode *last; }; +//- rjf: member lookup cache types + +typedef struct E_MemberHashNode E_MemberHashNode; +struct E_MemberHashNode +{ + E_MemberHashNode *next; + U64 member_idx; +}; + +typedef struct E_MemberHashSlot E_MemberHashSlot; +struct E_MemberHashSlot +{ + E_MemberHashNode *first; + E_MemberHashNode *last; +}; + +typedef struct E_MemberCacheNode E_MemberCacheNode; +struct E_MemberCacheNode +{ + E_MemberCacheNode *next; + E_TypeKey key; + E_MemberArray members; + U64 member_hash_slots_count; + E_MemberHashSlot *member_hash_slots; +}; + +typedef struct E_MemberCacheSlot E_MemberCacheSlot; +struct E_MemberCacheSlot +{ + E_MemberCacheNode *first; + E_MemberCacheNode *last; +}; + +//- rjf: context parameterization + typedef struct E_TypeCtx E_TypeCtx; struct E_TypeCtx { @@ -180,6 +217,8 @@ struct E_TypeCtx E_Module *primary_module; }; +//- rjf: stateful machine part of context (not provided by user) + typedef struct E_TypeState E_TypeState; struct E_TypeState { @@ -195,6 +234,10 @@ struct E_TypeState U64 cons_key_slots_count; E_ConsTypeSlot *cons_content_slots; E_ConsTypeSlot *cons_key_slots; + + // rjf: member cache table + U64 member_cache_slots_count; + E_MemberCacheSlot *member_cache_slots; }; //////////////////////////////// @@ -276,4 +319,11 @@ internal String8 e_type_string_from_key(Arena *arena, E_TypeKey key); internal void e_type_key_list_push(Arena *arena, E_TypeKeyList *list, E_TypeKey key); internal E_TypeKeyList e_type_key_list_copy(Arena *arena, E_TypeKeyList *src); +//////////////////////////////// +//~ rjf: Cache Lookups + +internal E_MemberCacheNode *e_member_cache_node_from_type_key(E_TypeKey key); +internal E_MemberArray e_type_data_members_from_key__cached(E_TypeKey key); +internal E_Member e_type_member_from_key_name__cached(E_TypeKey key, String8 name); + #endif // EVAL_TYPES_H diff --git a/src/eval_visualization/eval_visualization.mdesk b/src/eval_visualization/eval_visualization.mdesk index 5f60631c..9ce37cca 100644 --- a/src/eval_visualization/eval_visualization.mdesk +++ b/src/eval_visualization/eval_visualization.mdesk @@ -88,20 +88,20 @@ // For any view rules in this layer which also have graphical features, they // are specified in both tables under the same name. -@table(coverage_check name name_lower string ih ex xp vb display_name docs schema description) +@table(coverage_check name name_lower string ih ex xr xe vb display_name docs schema description) EV_ViewRuleTable: { - {x Default default "default" - - - x "Default" - "" "" } - {x Array array "array" - - x - "Array" x "x:{expr}" "Specifies that a pointer points to N elements, rather than only 1." } - {x Slice slice "slice" - - x - "Slice" x "" "Specifies that a pointer within a struct, also containing an integer, points to the number of elements encoded by the integer." } - {x ByteSwap bswap "bswap" x - x - "Byte Swap" x "" "Specifies that all integral evaluations should be byte-swapped, such that their endianness is reversed." } - {x Cast cast "cast" - - x - "Cast" x "x:{type}" "Specifies that the expression to which the view rule is applied should be casted to the provided type." } - {x Only only "only" x - x - "Only" x "" "Specifies that only the provided member names should be shown in user-defined-type expansions." } - {x Omit omit "omit" x - x - "Omit" x "" "Specifies that the provided member names should not be shown in user-defined-type expansions." } - {x Bin bin "bin" x - - - "Display In Binary" x "" "Specifies that all numeric values should be shown in base 2 (binary)." } - {x Oct oct "oct" x - - - "Display In Octal" x "" "Specifies that all numeric values should be shown in base 8 (octal)." } - {x Dec dec "dec" x - - - "Display In Decimal" x "" "Specifies that all numeric values should be shown in base 10 (decimal)." } - {x Hex hex "hex" x - - - "Display In Hexadecimal" x "" "Specifies that all numeric values should be shown in base 16 (hexadecimal)." } + {x Default default "default" - - - x x "Default" - "" "" } + {x Array array "array" - - x - - "Array" x "x:{expr}" "Specifies that a pointer points to N elements, rather than only 1." } + {x Slice slice "slice" - - x - - "Slice" x "" "Specifies that a pointer within a struct, also containing an integer, points to the number of elements encoded by the integer." } + {x ByteSwap bswap "bswap" x - x - - "Byte Swap" x "" "Specifies that all integral evaluations should be byte-swapped, such that their endianness is reversed." } + {x Cast cast "cast" - - x - - "Cast" x "x:{type}" "Specifies that the expression to which the view rule is applied should be casted to the provided type." } + {x Only only "only" x - x - - "Only" x "" "Specifies that only the provided member names should be shown in user-defined-type expansions." } + {x Omit omit "omit" x - x - - "Omit" x "" "Specifies that the provided member names should not be shown in user-defined-type expansions." } + {x Bin bin "bin" x - - - - "Display In Binary" x "" "Specifies that all numeric values should be shown in base 2 (binary)." } + {x Oct oct "oct" x - - - - "Display In Octal" x "" "Specifies that all numeric values should be shown in base 8 (octal)." } + {x Dec dec "dec" x - - - - "Display In Decimal" x "" "Specifies that all numeric values should be shown in base 10 (decimal)." } + {x Hex hex "hex" x - - - - "Display In Hexadecimal" x "" "Specifies that all numeric values should be shown in base 16 (hexadecimal)." } } @enum EV_ViewRuleKind: @@ -112,12 +112,13 @@ EV_ViewRuleTable: @gen { - @expand(EV_ViewRuleTable a) `$(a.xp == "x" -> "EV_VIEW_RULE_EXPR_RESOLUTION_FUNCTION_DEF(" .. a.name_lower .. ");")`; + @expand(EV_ViewRuleTable a) `$(a.xr == "x" -> "EV_VIEW_RULE_EXPR_RESOLUTION_FUNCTION_DEF(" .. a.name_lower .. ");")`; + @expand(EV_ViewRuleTable a) `$(a.xe == "x" -> "EV_VIEW_RULE_EXPR_EXPAND_FUNCTION_DEF(" .. a.name_lower .. ");")`; @expand(EV_ViewRuleTable a) `$(a.vb == "x" -> "EV_VIEW_RULE_BLOCK_PROD_FUNCTION_DEF(" .. a.name_lower .. ");")`; } @data(EV_ViewRuleInfo) @c_file ev_builtin_view_rule_info_table: { @expand(EV_ViewRuleTable a) - ```{str8_lit_comp("$(a.string)"), (EV_ViewRuleInfoFlag_Inherited*$(a.ih == "x"))|(EV_ViewRuleInfoFlag_Expandable*$(a.ex == "x")), $(a.xp == "x" -> "EV_VIEW_RULE_EXPR_RESOLUTION_FUNCTION_NAME("..a.name_lower..")") $(a.xp != "x" -> 0), $(a.vb == "x" -> "EV_VIEW_RULE_BLOCK_PROD_FUNCTION_NAME("..a.name_lower..")") $(a.vb != "x" -> 0), }```; + ```{str8_lit_comp("$(a.string)"), (EV_ViewRuleInfoFlag_Inherited*$(a.ih == "x"))|(EV_ViewRuleInfoFlag_Expandable*$(a.ex == "x")), $(a.xr == "x" -> "EV_VIEW_RULE_EXPR_RESOLUTION_FUNCTION_NAME("..a.name_lower..")") $(a.xr != "x" -> 0), $(a.xe == "x" -> "EV_VIEW_RULE_EXPR_EXPAND_FUNCTION_NAME("..a.name_lower..")") $(a.xe != "x" -> 0), $(a.vb == "x" -> "EV_VIEW_RULE_BLOCK_PROD_FUNCTION_NAME("..a.name_lower..")") $(a.vb != "x" -> 0), }```; } diff --git a/src/eval_visualization/eval_visualization_builtin_view_rules.c b/src/eval_visualization/eval_visualization_builtin_view_rules.c index d46e4e71..688581dd 100644 --- a/src/eval_visualization/eval_visualization_builtin_view_rules.c +++ b/src/eval_visualization/eval_visualization_builtin_view_rules.c @@ -99,6 +99,113 @@ ev_arch_from_eval_params(E_Eval eval, MD_Node *params) //////////////////////////////// //~ rjf: default +EV_VIEW_RULE_EXPR_EXPAND_FUNCTION_DEF(default) +{ + EV_ExpandResult result = {0}; + 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: structs/unions/classes -> expansions generate rows for all members + // + 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))) + { + E_MemberArray members = e_type_data_members_from_key__cached(e_type_kind_is_pointer_or_ref(type_kind) ? direct_type_key : type_key); + result.total_semantic_row_count = result.total_visual_row_count = members.count; + result.row_exprs_count = dim_1u64(idx_range); + result.row_exprs = push_array(arena, E_Expr *, result.row_exprs_count); + for EachIndex(row_expr_idx, result.row_exprs_count) + { + result.row_exprs[row_expr_idx] = &e_expr_nil; + U64 member_idx = idx_range.min + row_expr_idx; + if(member_idx < members.count) + { + E_Member *member = &members.v[member_idx]; + result.row_exprs[row_expr_idx] = e_expr_ref_member_access(arena, expr, member->name); + } + } + } + + //////////////////////////// + //- rjf: enums -> expansions generate rows for all members + // + 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); + result.total_semantic_row_count = result.total_visual_row_count = type->count; + result.row_exprs_count = dim_1u64(idx_range); + result.row_exprs = push_array(arena, E_Expr *, result.row_exprs_count); + for EachIndex(row_expr_idx, result.row_exprs_count) + { + result.row_exprs[row_expr_idx] = &e_expr_nil; + U64 enumval_idx = idx_range.min + row_expr_idx; + if(enumval_idx < type->count) + { + E_EnumVal *enumval = &type->enum_vals[enumval_idx]; + result.row_exprs[row_expr_idx] = e_expr_ref_member_access(arena, expr, enumval->name); + } + } + } + + //////////////////////////// + //- rjf: arrays -> expansions generate rows for all elements + // + else if(type_kind == E_TypeKind_Array || + (e_type_kind_is_pointer_or_ref(type_kind) && direct_type_kind == E_TypeKind_Array)) + { + B32 need_extra_deref = e_type_kind_is_pointer_or_ref(type_kind); + E_Expr *array_expr = need_extra_deref ? e_expr_ref_deref(arena, expr) : expr; + E_Type *type = e_type_from_key(arena, need_extra_deref ? direct_type_key : type_key); + result.total_semantic_row_count = result.total_visual_row_count = type->count; + result.row_exprs_count = dim_1u64(idx_range); + result.row_exprs = push_array(arena, E_Expr *, result.row_exprs_count); + for EachIndex(row_expr_idx, result.row_exprs_count) + { + result.row_exprs[row_expr_idx] = &e_expr_nil; + U64 element_idx = idx_range.min + row_expr_idx; + if(element_idx < type->count) + { + result.row_exprs[row_expr_idx] = e_expr_ref_array_index(arena, array_expr, element_idx); + } + } + } + + //////////////////////////// + //- rjf: pointer-to-pointer -> expansions generate dereference + // + else if(e_type_kind_is_pointer_or_ref(type_kind) && e_type_kind_is_pointer_or_ref(direct_type_kind)) + { + result.total_semantic_row_count = result.total_visual_row_count = 1; + result.row_exprs_count = dim_1u64(idx_range); + result.row_exprs = push_array(arena, E_Expr *, result.row_exprs_count); + for EachIndex(row_expr_idx, result.row_exprs_count) + { + result.row_exprs[row_expr_idx] = &e_expr_nil; + if(idx_range.min + row_expr_idx < 1) + { + result.row_exprs[row_expr_idx] = e_expr_ref_deref(arena, expr); + } + } + } + + scratch_end(scratch); + return result; +} + EV_VIEW_RULE_BLOCK_PROD_FUNCTION_DEF(default) { Temp scratch = scratch_begin(&arena, 1); diff --git a/src/eval_visualization/eval_visualization_core.h b/src/eval_visualization/eval_visualization_core.h index cfca881c..74f11484 100644 --- a/src/eval_visualization/eval_visualization_core.h +++ b/src/eval_visualization/eval_visualization_core.h @@ -98,6 +98,18 @@ struct EV_ViewRuleList U64 count; }; +//////////////////////////////// +//~ rjf: Expansion Hook Output + +typedef struct EV_ExpandResult EV_ExpandResult; +struct EV_ExpandResult +{ + U64 total_semantic_row_count; + U64 total_visual_row_count; + U64 row_exprs_count; + E_Expr **row_exprs; +}; + //////////////////////////////// //~ rjf: Blocks @@ -157,21 +169,17 @@ struct EV_BlockList U64 total_semantic_row_count; }; -typedef struct EV_BlockArray EV_BlockArray; -struct EV_BlockArray -{ - EV_Block *v; - U64 count; - U64 total_visual_row_count; - U64 total_semantic_row_count; -}; - //////////////////////////////// //~ rjf: View Rule Info Types #define EV_VIEW_RULE_EXPR_RESOLUTION_FUNCTION_SIG(name) E_Expr *name(Arena *arena, E_Expr *expr, MD_Node *params) #define EV_VIEW_RULE_EXPR_RESOLUTION_FUNCTION_NAME(name) ev_view_rule_expr_resolution__##name #define EV_VIEW_RULE_EXPR_RESOLUTION_FUNCTION_DEF(name) internal EV_VIEW_RULE_EXPR_RESOLUTION_FUNCTION_SIG(EV_VIEW_RULE_EXPR_RESOLUTION_FUNCTION_NAME(name)) + +#define EV_VIEW_RULE_EXPR_EXPAND_FUNCTION_SIG(name) EV_ExpandResult name(Arena *arena, E_Expr *expr, MD_Node *params, Rng1U64 idx_range) +#define EV_VIEW_RULE_EXPR_EXPAND_FUNCTION_NAME(name) ev_view_rule_expr_expand__##name +#define EV_VIEW_RULE_EXPR_EXPAND_FUNCTION_DEF(name) internal EV_VIEW_RULE_EXPR_EXPAND_FUNCTION_SIG(EV_VIEW_RULE_EXPR_EXPAND_FUNCTION_NAME(name)) + #define EV_VIEW_RULE_BLOCK_PROD_FUNCTION_SIG(name) void name(Arena *arena, \ EV_View *view, \ String8 filter, \ @@ -186,7 +194,9 @@ S32 depth, \ struct EV_BlockList *out) #define EV_VIEW_RULE_BLOCK_PROD_FUNCTION_NAME(name) ev_view_rule_block_prod__##name #define EV_VIEW_RULE_BLOCK_PROD_FUNCTION_DEF(name) internal EV_VIEW_RULE_BLOCK_PROD_FUNCTION_SIG(EV_VIEW_RULE_BLOCK_PROD_FUNCTION_NAME(name)) + typedef EV_VIEW_RULE_EXPR_RESOLUTION_FUNCTION_SIG(EV_ViewRuleExprResolutionHookFunctionType); +typedef EV_VIEW_RULE_EXPR_EXPAND_FUNCTION_SIG(EV_ViewRuleExprExpandHookFunctionType); typedef EV_VIEW_RULE_BLOCK_PROD_FUNCTION_SIG(EV_ViewRuleBlockProdHookFunctionType); typedef U32 EV_ViewRuleInfoFlags; // NOTE(rjf): see @view_rule_info @@ -202,6 +212,7 @@ struct EV_ViewRuleInfo String8 string; EV_ViewRuleInfoFlags flags; EV_ViewRuleExprResolutionHookFunctionType *expr_resolution; + EV_ViewRuleExprExpandHookFunctionType *expr_expand; EV_ViewRuleBlockProdHookFunctionType *block_prod; }; diff --git a/src/eval_visualization/generated/eval_visualization.meta.c b/src/eval_visualization/generated/eval_visualization.meta.c index a42076d8..b05de641 100644 --- a/src/eval_visualization/generated/eval_visualization.meta.c +++ b/src/eval_visualization/generated/eval_visualization.meta.c @@ -6,17 +6,17 @@ C_LINKAGE_BEGIN EV_ViewRuleInfo ev_builtin_view_rule_info_table[11] = { -{str8_lit_comp("default"), (EV_ViewRuleInfoFlag_Inherited*0)|(EV_ViewRuleInfoFlag_Expandable*0), 0, EV_VIEW_RULE_BLOCK_PROD_FUNCTION_NAME(default) , }, -{str8_lit_comp("array"), (EV_ViewRuleInfoFlag_Inherited*0)|(EV_ViewRuleInfoFlag_Expandable*0), EV_VIEW_RULE_EXPR_RESOLUTION_FUNCTION_NAME(array) , 0, }, -{str8_lit_comp("slice"), (EV_ViewRuleInfoFlag_Inherited*0)|(EV_ViewRuleInfoFlag_Expandable*0), EV_VIEW_RULE_EXPR_RESOLUTION_FUNCTION_NAME(slice) , 0, }, -{str8_lit_comp("bswap"), (EV_ViewRuleInfoFlag_Inherited*1)|(EV_ViewRuleInfoFlag_Expandable*0), EV_VIEW_RULE_EXPR_RESOLUTION_FUNCTION_NAME(bswap) , 0, }, -{str8_lit_comp("cast"), (EV_ViewRuleInfoFlag_Inherited*0)|(EV_ViewRuleInfoFlag_Expandable*0), EV_VIEW_RULE_EXPR_RESOLUTION_FUNCTION_NAME(cast) , 0, }, -{str8_lit_comp("only"), (EV_ViewRuleInfoFlag_Inherited*1)|(EV_ViewRuleInfoFlag_Expandable*0), EV_VIEW_RULE_EXPR_RESOLUTION_FUNCTION_NAME(only) , 0, }, -{str8_lit_comp("omit"), (EV_ViewRuleInfoFlag_Inherited*1)|(EV_ViewRuleInfoFlag_Expandable*0), EV_VIEW_RULE_EXPR_RESOLUTION_FUNCTION_NAME(omit) , 0, }, -{str8_lit_comp("bin"), (EV_ViewRuleInfoFlag_Inherited*1)|(EV_ViewRuleInfoFlag_Expandable*0), 0, 0, }, -{str8_lit_comp("oct"), (EV_ViewRuleInfoFlag_Inherited*1)|(EV_ViewRuleInfoFlag_Expandable*0), 0, 0, }, -{str8_lit_comp("dec"), (EV_ViewRuleInfoFlag_Inherited*1)|(EV_ViewRuleInfoFlag_Expandable*0), 0, 0, }, -{str8_lit_comp("hex"), (EV_ViewRuleInfoFlag_Inherited*1)|(EV_ViewRuleInfoFlag_Expandable*0), 0, 0, }, +{str8_lit_comp("default"), (EV_ViewRuleInfoFlag_Inherited*0)|(EV_ViewRuleInfoFlag_Expandable*0), 0, EV_VIEW_RULE_EXPR_EXPAND_FUNCTION_NAME(default) , EV_VIEW_RULE_BLOCK_PROD_FUNCTION_NAME(default) , }, +{str8_lit_comp("array"), (EV_ViewRuleInfoFlag_Inherited*0)|(EV_ViewRuleInfoFlag_Expandable*0), EV_VIEW_RULE_EXPR_RESOLUTION_FUNCTION_NAME(array) , 0, 0, }, +{str8_lit_comp("slice"), (EV_ViewRuleInfoFlag_Inherited*0)|(EV_ViewRuleInfoFlag_Expandable*0), EV_VIEW_RULE_EXPR_RESOLUTION_FUNCTION_NAME(slice) , 0, 0, }, +{str8_lit_comp("bswap"), (EV_ViewRuleInfoFlag_Inherited*1)|(EV_ViewRuleInfoFlag_Expandable*0), EV_VIEW_RULE_EXPR_RESOLUTION_FUNCTION_NAME(bswap) , 0, 0, }, +{str8_lit_comp("cast"), (EV_ViewRuleInfoFlag_Inherited*0)|(EV_ViewRuleInfoFlag_Expandable*0), EV_VIEW_RULE_EXPR_RESOLUTION_FUNCTION_NAME(cast) , 0, 0, }, +{str8_lit_comp("only"), (EV_ViewRuleInfoFlag_Inherited*1)|(EV_ViewRuleInfoFlag_Expandable*0), EV_VIEW_RULE_EXPR_RESOLUTION_FUNCTION_NAME(only) , 0, 0, }, +{str8_lit_comp("omit"), (EV_ViewRuleInfoFlag_Inherited*1)|(EV_ViewRuleInfoFlag_Expandable*0), EV_VIEW_RULE_EXPR_RESOLUTION_FUNCTION_NAME(omit) , 0, 0, }, +{str8_lit_comp("bin"), (EV_ViewRuleInfoFlag_Inherited*1)|(EV_ViewRuleInfoFlag_Expandable*0), 0, 0, 0, }, +{str8_lit_comp("oct"), (EV_ViewRuleInfoFlag_Inherited*1)|(EV_ViewRuleInfoFlag_Expandable*0), 0, 0, 0, }, +{str8_lit_comp("dec"), (EV_ViewRuleInfoFlag_Inherited*1)|(EV_ViewRuleInfoFlag_Expandable*0), 0, 0, 0, }, +{str8_lit_comp("hex"), (EV_ViewRuleInfoFlag_Inherited*1)|(EV_ViewRuleInfoFlag_Expandable*0), 0, 0, 0, }, }; C_LINKAGE_END diff --git a/src/eval_visualization/generated/eval_visualization.meta.h b/src/eval_visualization/generated/eval_visualization.meta.h index ce02f4ab..53e0563c 100644 --- a/src/eval_visualization/generated/eval_visualization.meta.h +++ b/src/eval_visualization/generated/eval_visualization.meta.h @@ -28,5 +28,6 @@ EV_VIEW_RULE_EXPR_RESOLUTION_FUNCTION_DEF(bswap); EV_VIEW_RULE_EXPR_RESOLUTION_FUNCTION_DEF(cast); EV_VIEW_RULE_EXPR_RESOLUTION_FUNCTION_DEF(only); EV_VIEW_RULE_EXPR_RESOLUTION_FUNCTION_DEF(omit); +EV_VIEW_RULE_EXPR_EXPAND_FUNCTION_DEF(default); EV_VIEW_RULE_BLOCK_PROD_FUNCTION_DEF(default); #endif // EVAL_VISUALIZATION_META_H