fix slice view rule to apply correctly to pointers/refs->structs too

This commit is contained in:
Ryan Fleury
2025-03-14 12:41:48 -07:00
parent 41aa23b71b
commit 24ddab0db2
2 changed files with 19 additions and 3 deletions
+1 -1
View File
@@ -159,7 +159,7 @@
#endif
#if !defined(BUILD_VERSION_PATCH)
# define BUILD_VERSION_PATCH 15
# define BUILD_VERSION_PATCH 16
#endif
#define BUILD_VERSION_STRING_LITERAL Stringify(BUILD_VERSION_MAJOR) "." Stringify(BUILD_VERSION_MINOR) "." Stringify(BUILD_VERSION_PATCH)
+18 -2
View File
@@ -368,11 +368,27 @@ E_LOOKUP_INFO_FUNCTION_DEF(slice)
E_LookupInfo info = {0};
{
Temp scratch = scratch_begin(&arena, 1);
E_TypeKind type_kind = e_type_kind_from_key(lhs->type_key);
// rjf: unpack struct type
E_TypeKey struct_type_key = e_type_unwrap(lhs->type_key);
for(;;)
{
if(e_type_kind_is_pointer_or_ref(e_type_kind_from_key(struct_type_key)))
{
struct_type_key = e_type_unwrap(e_type_direct_from_key(struct_type_key));
}
else
{
break;
}
}
// rjf: build info from struct type
E_TypeKind type_kind = e_type_kind_from_key(struct_type_key);
if(type_kind == E_TypeKind_Struct || type_kind == E_TypeKind_Class)
{
// rjf: unpack members
E_MemberArray members = e_type_data_members_from_key__cached(lhs->type_key);
E_MemberArray members = e_type_data_members_from_key__cached(struct_type_key);
// rjf: choose base pointer & count members
E_Member *base_ptr_member = 0;