aboutsummaryrefslogtreecommitdiff
path: root/src/check_expr.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/check_expr.cpp')
-rw-r--r--src/check_expr.cpp17
1 files changed, 17 insertions, 0 deletions
diff --git a/src/check_expr.cpp b/src/check_expr.cpp
index 6079fa202..8b3e6dfe7 100644
--- a/src/check_expr.cpp
+++ b/src/check_expr.cpp
@@ -4496,6 +4496,23 @@ CallArgumentData check_call_arguments(CheckerContext *c, Operand *operand, Type
Array<Entity *> procs = proc_group_entities(c, *operand);
+ if (procs.count == 1) {
+ Ast *ident = operand->expr;
+ while (ident->kind == Ast_SelectorExpr) {
+ Ast *s = ident->SelectorExpr.selector;
+ ident = s;
+ }
+
+ Entity *e = procs[0];
+
+ CallArgumentData data = {};
+ CallArgumentError err = call_checker(c, call, e->type, e, operands, CallArgumentMode_ShowErrors, &data);
+ Entity *entity_to_use = data.gen_entity != nullptr ? data.gen_entity : e;
+ add_entity_use(c, ident, entity_to_use);
+
+ return data;
+ }
+
ValidIndexAndScore *valids = gb_alloc_array(heap_allocator(), ValidIndexAndScore, procs.count);
isize valid_count = 0;
defer (gb_free(heap_allocator(), valids));