From ce4b7b8b7d54e889413cf2d43d85f2e4f4a0b007 Mon Sep 17 00:00:00 2001 From: Ginger Bill Date: Mon, 10 Jul 2017 20:39:42 +0100 Subject: Nested record declarations --- src/ir.cpp | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) (limited to 'src/ir.cpp') diff --git a/src/ir.cpp b/src/ir.cpp index 9335a71fd..477ae799e 100644 --- a/src/ir.cpp +++ b/src/ir.cpp @@ -3632,10 +3632,13 @@ void ir_pop_target_list(irProcedure *proc) { void ir_gen_global_type_name(irModule *m, Entity *e, String name) { + if (e->type == nullptr) return; + irValue *t = ir_value_type_name(m->allocator, name, e->type); ir_module_add_value(m, e, t); map_set(&m->members, hash_string(name), t); + #if 0 if (is_type_union(e->type)) { Type *bt = base_type(e->type); // NOTE(bill): Zeroth entry is null (for `match type` stmts) @@ -3643,6 +3646,20 @@ void ir_gen_global_type_name(irModule *m, Entity *e, String name) { ir_mangle_add_sub_type_name(m, bt->Record.variants[j], name); } } + #endif + + Type *bt = base_type(e->type); + if (bt->kind == Type_Record) { + Scope *s = bt->Record.scope; + if (s != nullptr) { + for_array(i, s->elements.entries) { + Entity *e = s->elements.entries[i].value; + if (e->kind == Entity_TypeName) { + ir_mangle_add_sub_type_name(m, e, name); + } + } + } + } } -- cgit v1.2.3