From f661ae9d095b4b7d6e8a51f7b539612afe4162a0 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Sun, 28 Jan 2018 09:19:23 +0000 Subject: [PATCH] Fix issue with proc group cycles #176 --- src/check_decl.cpp | 5 ++++- src/check_expr.cpp | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/check_decl.cpp b/src/check_decl.cpp index 549cdd9e1..75d37a22d 100644 --- a/src/check_decl.cpp +++ b/src/check_decl.cpp @@ -718,6 +718,10 @@ void check_proc_group_decl(Checker *c, Entity *pg_entity, DeclInfo *d) { array_init(&pge->entities, c->allocator, pg->args.count); + // NOTE(bill): This must be set here to prevent cycles in checking if someone + // places the entity within itself + pg_entity->type = t_invalid; + PtrSet entity_map = {}; ptr_set_init(&entity_map, heap_allocator()); defer (ptr_set_destroy(&entity_map)); @@ -815,7 +819,6 @@ void check_proc_group_decl(Checker *c, Entity *pg_entity, DeclInfo *d) { } } - pg_entity->type = t_invalid; } void check_entity_decl(Checker *c, Entity *e, DeclInfo *d, Type *named_type) { diff --git a/src/check_expr.cpp b/src/check_expr.cpp index c839ad2af..2725447c4 100644 --- a/src/check_expr.cpp +++ b/src/check_expr.cpp @@ -60,7 +60,7 @@ Type * make_optional_ok_type (gbAllocator a, Type *value); void check_type_decl (Checker *c, Entity *e, AstNode *type_expr, Type *def, bool alias); Entity * check_selector (Checker *c, Operand *operand, AstNode *node, Type *type_hint); Entity * check_ident (Checker *c, Operand *o, AstNode *n, Type *named_type, Type *type_hint, bool allow_import_name); -Entity * find_polymorphic_struct_entity(Checker *c, Type *original_type, isize param_count, Array ordered_operands); +Entity * find_polymorphic_struct_entity (Checker *c, Type *original_type, isize param_count, Array ordered_operands); void check_not_tuple (Checker *c, Operand *operand); void convert_to_typed (Checker *c, Operand *operand, Type *target_type); gbString expr_to_string (AstNode *expression);