2
0
Эх сурвалжийг харах

Checking if entity is exported before checking if it's a procedure group

LeandroLibanio28H 3 сар өмнө
parent
commit
7b612a3a15
1 өөрчлөгдсөн 12 нэмэгдсэн , 10 устгасан
  1. 12 10
      src/check_expr.cpp

+ 12 - 10
src/check_expr.cpp

@@ -1,3 +1,5 @@
+#include <iostream>
+
 enum CallArgumentError {
 	CallArgumentError_None,
 	CallArgumentError_NoneProcedureType,
@@ -5373,16 +5375,6 @@ gb_internal Entity *check_selector(CheckerContext *c, Operand *operand, Ast *nod
 				return nullptr;
 			}
 
-			check_entity_decl(c, entity, nullptr, nullptr);
-			if (entity->kind == Entity_ProcGroup) {
-				operand->mode = Addressing_ProcGroup;
-				operand->proc_group = entity;
-
-				add_type_and_value(c, operand->expr, operand->mode, operand->type, operand->value);
-				return entity;
-			}
-			GB_ASSERT_MSG(entity->type != nullptr, "%.*s (%.*s)", LIT(entity->token.string), LIT(entity_strings[entity->kind]));
-
 			if (!is_entity_exported(entity, allow_builtin)) {
 				gbString sel_str = expr_to_string(selector);
 				error(node, "'%s' is not exported by '%.*s'", sel_str, LIT(import_name));
@@ -5393,6 +5385,16 @@ gb_internal Entity *check_selector(CheckerContext *c, Operand *operand, Ast *nod
 				// return nullptr;
 			}
 
+			check_entity_decl(c, entity, nullptr, nullptr);
+			if (entity->kind == Entity_ProcGroup) {
+				operand->mode = Addressing_ProcGroup;
+				operand->proc_group = entity;
+
+				add_type_and_value(c, operand->expr, operand->mode, operand->type, operand->value);
+				return entity;
+			}
+			GB_ASSERT_MSG(entity->type != nullptr, "%.*s (%.*s)", LIT(entity->token.string), LIT(entity_strings[entity->kind]));
+
 			if (entity->kind == Entity_ProcGroup) {
 				Array<Entity *> procs = entity->ProcGroup.entities;
 				bool skip = false;