aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorgingerBill <bill@gingerbill.org>2018-01-28 09:19:23 +0000
committergingerBill <bill@gingerbill.org>2018-01-28 09:19:23 +0000
commitf661ae9d095b4b7d6e8a51f7b539612afe4162a0 (patch)
treee3206c3bf2657488bcceeaf0166c8a0dd036dad8
parentbee4cb57f20d0310a3bbaa39ccdfa1165d82974a (diff)
Fix issue with proc group cycles #176
-rw-r--r--src/check_decl.cpp5
-rw-r--r--src/check_expr.cpp2
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 *> 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<Operand> ordered_operands);
+Entity * find_polymorphic_struct_entity (Checker *c, Type *original_type, isize param_count, Array<Operand> 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);