From 1ca752ce049b934df5d03af2f06265e219f5f402 Mon Sep 17 00:00:00 2001 From: Ginger Bill Date: Fri, 9 Sep 2016 19:48:28 +0100 Subject: Remove duplicates in type info data. --- src/checker/expr.cpp | 57 ---------------------------------------------------- 1 file changed, 57 deletions(-) (limited to 'src/checker/expr.cpp') diff --git a/src/checker/expr.cpp b/src/checker/expr.cpp index df4c97f86..8ec744016 100644 --- a/src/checker/expr.cpp +++ b/src/checker/expr.cpp @@ -46,63 +46,6 @@ b32 check_is_assignable_to_using_subtype(Type *dst, Type *src) { } -void add_type_info_type(Checker *c, Type *t) { - if (t == NULL) { - return; - } - t = default_type(t); - if (map_get(&c->info.type_info_types, hash_pointer(t)) != NULL) { - // Types have already been added - return; - } - - map_set(&c->info.type_info_types, hash_pointer(t), t); - - if (t->kind == Type_Named) { - // NOTE(bill): Just in case - add_type_info_type(c, t->Named.base); - return; - } - - Type *bt = get_base_type(t); - switch (bt->kind) { - case Type_Basic: { - if (bt->Basic.kind == Basic_string) { - add_type_info_type(c, make_type_pointer(c->allocator, t_u8)); - add_type_info_type(c, t_int); - } - } break; - case Type_Array: - add_type_info_type(c, bt->Array.elem); - add_type_info_type(c, make_type_pointer(c->allocator, bt->Array.elem)); - add_type_info_type(c, t_int); - break; - case Type_Slice: - add_type_info_type(c, bt->Slice.elem); - add_type_info_type(c, make_type_pointer(c->allocator, bt->Slice.elem)); - add_type_info_type(c, t_int); - break; - case Type_Vector: add_type_info_type(c, bt->Vector.elem); break; - case Type_Pointer: add_type_info_type(c, bt->Pointer.elem); break; - case Type_Record: { - switch (bt->Record.kind) { - case TypeRecord_Enum: - add_type_info_type(c, bt->Record.enum_base); - break; - default: - for (isize i = 0; i < bt->Record.field_count; i++) { - Entity *f = bt->Record.fields[i]; - add_type_info_type(c, f->type); - } - break; - } - } break; - } - // TODO(bill): Type info for procedures and tuples - // TODO(bill): Remove duplicate identical types efficiently -} - - b32 check_is_assignable_to(Checker *c, Operand *operand, Type *type, b32 is_argument = false) { if (operand->mode == Addressing_Invalid || type == t_invalid) { -- cgit v1.2.3