From a0ae02168a5cdd7c1ac8bbb392c3a94cfa4348c6 Mon Sep 17 00:00:00 2001 From: Ginger Bill Date: Sun, 30 Jul 2017 20:13:23 +0100 Subject: Update `add_type_info_type` to ignore polymorphic types --- src/checker.cpp | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) (limited to 'src/checker.cpp') diff --git a/src/checker.cpp b/src/checker.cpp index f6c20c048..e0ba73875 100644 --- a/src/checker.cpp +++ b/src/checker.cpp @@ -1073,6 +1073,9 @@ void add_type_info_type(Checker *c, Type *t) { if (is_type_untyped(t)) { return; // Could be nil } + if (is_type_polymorphic(base_type(t))) { + return; + } if (map_get(&c->info.type_info_map, hash_type(t)) != nullptr) { // Types have already been added @@ -1165,12 +1168,19 @@ void add_type_info_type(Checker *c, Type *t) { case Type_Union: add_type_info_type(c, t_int); + add_type_info_type(c, t_type_info_ptr); for_array(i, bt->Union.variants) { add_type_info_type(c, bt->Union.variants[i]); } break; case Type_Struct: { + if (bt->Struct.scope != nullptr) { + for_array(i, bt->Struct.scope->elements.entries) { + Entity *e = bt->Struct.scope->elements.entries[i].value; + add_type_info_type(c, e->type); + } + } for_array(i, bt->Struct.fields) { Entity *f = bt->Struct.fields[i]; add_type_info_type(c, f->type); @@ -2391,7 +2401,7 @@ void check_parsed_files(Checker *c) { // i64 size = type_size_of(c->sizes, c->allocator, e->type); i64 align = type_align_of(c->allocator, e->type); if (align > 0) { - // add_type_info_type(c, e->type); + add_type_info_type(c, e->type); } } } -- cgit v1.2.3