diff options
Diffstat (limited to 'src/check_type.cpp')
| -rw-r--r-- | src/check_type.cpp | 15 |
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) { |