diff options
| author | Ginger Bill <bill@gingerbill.org> | 2017-07-04 16:06:08 +0100 |
|---|---|---|
| committer | Ginger Bill <bill@gingerbill.org> | 2017-07-04 16:06:08 +0100 |
| commit | 240da5c8e047acf14802fe1fc2a9d93fc374ca72 (patch) | |
| tree | a4a1d7e98d92d21ece52ed17b03e03fdd0fbeac0 /src/check_decl.cpp | |
| parent | 689a0c0b4955e5325c5409855632a3d4a154b41e (diff) | |
Allow aliasing of aliases
Diffstat (limited to 'src/check_decl.cpp')
| -rw-r--r-- | src/check_decl.cpp | 10 |
1 files changed, 8 insertions, 2 deletions
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; |