From 30f5a3bb9358ded6a48e8d8ba6f5eb0b3743a807 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Fri, 23 Mar 2018 20:48:30 +0000 Subject: Move cycle checking to much earlier on in the semantic stage --- src/check_decl.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) (limited to 'src/check_decl.cpp') diff --git a/src/check_decl.cpp b/src/check_decl.cpp index b16536f70..a2a7a1fb4 100644 --- a/src/check_decl.cpp +++ b/src/check_decl.cpp @@ -227,6 +227,8 @@ void check_type_decl(Checker *c, Entity *e, AstNode *type_expr, Type *def) { error(decl->attributes[0], "Attributes are not allowed on type declarations"); } + + bool is_distinct = is_type_distinct(type_expr); AstNode *te = remove_type_alias_clutter(type_expr); e->type = t_invalid; @@ -238,7 +240,10 @@ void check_type_decl(Checker *c, Entity *e, AstNode *type_expr, Type *def) { } e->type = named; - Type *bt = check_type(c, te, named); + check_type_path_push(c, e); + Type *bt = check_type_expr(c, te, named); + check_type_path_pop(c); + named->Named.base = base_type(bt); if (!is_distinct) { e->type = bt; @@ -985,7 +990,7 @@ void check_proc_body(Checker *c, Token token, DeclInfo *decl, Type *type, AstNod for_array(i, scope->elements.entries) { Entity *f = scope->elements.entries[i].value; if (f->kind == Entity_Variable) { - Entity *uvar = make_entity_using_variable(c->allocator, e, f->token, f->type); + Entity *uvar = alloc_entity_using_variable(e, f->token, f->type); uvar->Variable.is_immutable = is_immutable; if (is_value) uvar->flags |= EntityFlag_Value; -- cgit v1.2.3