From 240da5c8e047acf14802fe1fc2a9d93fc374ca72 Mon Sep 17 00:00:00 2001 From: Ginger Bill Date: Tue, 4 Jul 2017 16:06:08 +0100 Subject: Allow aliasing of aliases --- src/check_decl.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) (limited to 'src/check_decl.cpp') diff --git a/src/check_decl.cpp b/src/check_decl.cpp index 76558e948..a1d96f548 100644 --- a/src/check_decl.cpp +++ b/src/check_decl.cpp @@ -212,6 +212,7 @@ void check_const_decl(Checker *c, Entity *e, AstNode *type_expr, AstNode *init, return; } break; + // NOTE(bill): Check to see if the expression it to be aliases case Addressing_Builtin: if (e->type != NULL) { error(type_expr, "A constant alias of a built-in procedure may not have a type initializer"); @@ -230,6 +231,11 @@ void check_const_decl(Checker *c, Entity *e, AstNode *type_expr, AstNode *init, if (entity != NULL) { switch (entity->kind) { + case Entity_Alias: + e->kind = Entity_Alias; + e->type = entity->type; + e->Alias.base = entity->Alias.base; + return; case Entity_Procedure: e->kind = Entity_Alias; e->type = entity->type; @@ -390,10 +396,10 @@ void check_proc_decl(Checker *c, Entity *e, DeclInfo *d) { } #endif - bool prev_allow_polymorphic_types = c->context.allow_polymorphic_types; + auto prev_context = c->context; c->context.allow_polymorphic_types = true; check_procedure_type(c, proc_type, pl->type); - c->context.allow_polymorphic_types = prev_allow_polymorphic_types; + c->context = prev_context; bool is_foreign = (pl->tags & ProcTag_foreign) != 0; bool is_link_name = (pl->tags & ProcTag_link_name) != 0; -- cgit v1.2.3