eval: more progress on 'sets', plug primary watch group into it; rd: more progress on watch ui based on new sets/lookups

This commit is contained in:
Ryan Fleury
2025-01-30 15:43:41 -08:00
parent 12784d9ae9
commit 68966ba55f
8 changed files with 214 additions and 49 deletions
@@ -104,7 +104,8 @@ struct EV_DefaultExpandAccel
{
E_MemberArray members;
E_EnumValArray enum_vals;
void *lookup_accel;
E_LookupRule *lookup_rule;
void *lookup_user_data;
U64 array_count;
B32 array_need_extra_deref;
B32 is_ptr2ptr;
@@ -181,7 +182,11 @@ EV_VIEW_RULE_EXPR_EXPAND_INFO_FUNCTION_DEF(default)
else if(type_kind == E_TypeKind_Set)
{
E_Type *type = e_type_from_key(scratch.arena, type_key);
//E_LookupRule *rule = e_lookup_rule_from_string(type->name);
E_LookupRule *rule = e_lookup_rule_from_string(type->name);
E_LookupInfo lookup_info = rule->lookup_info(arena, expr);
total_row_count = Max(lookup_info.named_expr_count, lookup_info.idxed_expr_count);
accel->lookup_rule = rule;
accel->lookup_user_data = lookup_info.user_data;
}
////////////////////////////
@@ -273,6 +278,23 @@ EV_VIEW_RULE_EXPR_EXPAND_RANGE_INFO_FUNCTION_DEF(default)
result.row_members[0] = &e_member_nil;
}
////////////////////////////
//- rjf: fill with lookups
//
else if(accel->lookup_rule != 0)
{
result.row_exprs_count = needed_row_count;
result.row_exprs = push_array(arena, E_Expr *, result.row_exprs_count);
result.row_strings = push_array(arena, String8, result.row_exprs_count);
result.row_view_rules = push_array(arena, String8, result.row_exprs_count);
result.row_members = push_array(arena, E_Member *, result.row_exprs_count);
for EachIndex(row_expr_idx, result.row_exprs_count)
{
result.row_exprs[row_expr_idx] = e_expr_ref_array_index(arena, expr, idx_range.min + row_expr_idx);
result.row_members[row_expr_idx] = &e_member_nil;
}
}
return result;
}