aboutsummaryrefslogtreecommitdiff
path: root/src/check_type.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/check_type.cpp')
-rw-r--r--src/check_type.cpp15
1 files changed, 14 insertions, 1 deletions
diff --git a/src/check_type.cpp b/src/check_type.cpp
index 73f732b45..976c945fd 100644
--- a/src/check_type.cpp
+++ b/src/check_type.cpp
@@ -329,12 +329,25 @@ void add_polymorphic_record_entity(CheckerContext *ctx, Ast *node, Type *named_t
auto *found_gen_types = map_get(&ctx->checker->info.gen_types, hash_pointer(original_type));
if (found_gen_types) {
- array_add(found_gen_types, e);
+ array_add(found_gen_types, e);
} else {
auto array = array_make<Entity *>(heap_allocator());
array_add(&array, e);
map_set(&ctx->checker->info.gen_types, hash_pointer(original_type), array);
}
+
+ {
+ Type *dst_bt = base_type(named_type);
+ Type *src_bt = base_type(original_type);
+ if ((dst_bt != nullptr && src_bt != nullptr) &&
+ (dst_bt->kind == src_bt->kind)){
+ if (dst_bt->kind == Type_Struct) {
+ if (dst_bt->Struct.atom_op_table == nullptr) {
+ dst_bt->Struct.atom_op_table = src_bt->Struct.atom_op_table;
+ }
+ }
+ }
+ }
}
void check_struct_type(CheckerContext *ctx, Type *struct_type, Ast *node, Array<Operand> *poly_operands, Type *named_type, Type *original_type_for_poly) {