aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorVictor Sohier <1sohiervic@gmail.com>2024-05-05 21:08:33 -0400
committerVictor Sohier <1sohiervic@gmail.com>2024-05-05 21:08:33 -0400
commit8e4f9cb777b91ade22fc1f00d166af1ea06624c5 (patch)
treea972d068f81a337c75c1f8a279f68cc01bab05b1 /src
parent15f7148eae89a36696916e15ed4c83fb7fed01c5 (diff)
Fix: Fixed #soa arrays
Diffstat (limited to 'src')
-rw-r--r--src/check_expr.cpp13
1 files changed, 11 insertions, 2 deletions
diff --git a/src/check_expr.cpp b/src/check_expr.cpp
index c143cfce0..939466a64 100644
--- a/src/check_expr.cpp
+++ b/src/check_expr.cpp
@@ -102,6 +102,7 @@ gb_internal Type * check_init_variable (CheckerContext *c, Entity *
gb_internal void check_assignment_error_suggestion(CheckerContext *c, Operand *o, Type *type, i64 max_bit_size=0);
gb_internal void add_map_key_type_dependencies(CheckerContext *ctx, Type *key);
+gb_internal Type *make_soa_struct_fixed(CheckerContext *ctx, Ast *array_typ_expr, Ast *elem_expr, Type *elem, i64 count, Type *generic_type);
gb_internal Type *make_soa_struct_slice(CheckerContext *ctx, Ast *array_typ_expr, Ast *elem_expr, Type *elem);
gb_internal Type *make_soa_struct_dynamic_array(CheckerContext *ctx, Ast *array_typ_expr, Ast *elem_expr, Type *elem);
@@ -1409,11 +1410,19 @@ gb_internal bool is_polymorphic_type_assignable(CheckerContext *c, Type *poly, T
poly->Struct.soa_kind != StructSoa_None) {
bool ok = is_polymorphic_type_assignable(c, poly->Struct.soa_elem, source->Struct.soa_elem, true, modify_type);
if (ok) switch (source->Struct.soa_kind) {
- case StructSoa_Fixed:
default:
GB_PANIC("Unhandled SOA Kind");
break;
-
+ case StructSoa_Fixed:
+ if (modify_type) {
+ bool breakpoint = true;
+ Type *type = make_soa_struct_fixed(
+ c, nullptr, poly->Struct.node,
+ poly->Struct.soa_elem, poly->Struct.soa_count,
+ nullptr);
+ gb_memmove(poly, type, gb_size_of(*type));
+ }
+ break;
case StructSoa_Slice:
if (modify_type) {
Type *type = make_soa_struct_slice(c, nullptr, poly->Struct.node, poly->Struct.soa_elem);