derefence pointer/reference evaluations when generating block tree, to match expected behavior, & what the string iterator does

This commit is contained in:
Ryan Fleury
2025-07-25 16:11:15 -07:00
parent cb68abe844
commit 2e14f34cc8
2 changed files with 15 additions and 0 deletions
@@ -528,6 +528,18 @@ ev_block_tree_from_eval(Arena *arena, EV_View *view, String8 filter, E_Eval root
// rjf: unpack eval
E_Mode mode = t->eval.irtree.mode;
E_Eval eval = t->eval;
// rjf: pointers/reference evaluations -> dereference for expansion
{
E_TypeKey type_key = e_type_key_unwrap(eval.irtree.type_key, E_TypeUnwrapFlag_Modifiers|E_TypeUnwrapFlag_Meta);
E_TypeKind type_kind = e_type_kind_from_key(type_key);
if(e_type_kind_is_pointer_or_ref(type_kind))
{
eval = e_eval_wrapf(eval, "*($)");
}
}
// rjf: unpack type key we'll use for expanding this eval
E_TypeKey expansion_type_key = ev_expansion_type_from_key(eval.irtree.type_key);
if(!e_type_key_match(expansion_type_key, e_type_key_zero()))
{
+3
View File
@@ -626,6 +626,9 @@ type_coverage_eval_tests(void)
int_vector.push_back(6);
int_vector.push_back(7);
std::vector<int> *pint_vector = &int_vector;
std::vector<int> &rint_vector = int_vector;
std::vector<Dynamic_Array> dynamic_array_vector;
dynamic_array_vector.push_back(dynamic);
dynamic_array_vector.push_back(dynamic);