aboutsummaryrefslogtreecommitdiff
path: root/src/check_expr.cpp
diff options
context:
space:
mode:
authorgingerBill <bill@gingerbill.org>2023-07-17 12:57:33 +0100
committergingerBill <bill@gingerbill.org>2023-07-17 12:57:33 +0100
commit88485d5467653d2768a925b90b0345b9a9bb62a9 (patch)
tree79340f348f525579d059bef01e2a8f1d84853930 /src/check_expr.cpp
parent921530dd01e940600692caba0b19185399daa2e0 (diff)
Improve scoring for polymorphic procedures
Diffstat (limited to 'src/check_expr.cpp')
-rw-r--r--src/check_expr.cpp14
1 files changed, 8 insertions, 6 deletions
diff --git a/src/check_expr.cpp b/src/check_expr.cpp
index bb953ee2e..87b6e52d8 100644
--- a/src/check_expr.cpp
+++ b/src/check_expr.cpp
@@ -6258,14 +6258,18 @@ gb_internal CallArgumentData check_call_arguments_proc_group(CheckerContext *c,
}
isize index = i;
+ ValidIndexAndScore item = {};
+ item.score = data.score;
+
if (data.gen_entity != nullptr) {
array_add(&proc_entities, data.gen_entity);
index = proc_entities.count-1;
+
+ // prefer non-polymorphic procedures over polymorphic
+ item.score += assign_score_function(1);
}
- ValidIndexAndScore item = {};
item.index = index;
- item.score = data.score;
array_add(&valids, item);
}
}
@@ -6348,8 +6352,6 @@ gb_internal CallArgumentData check_call_arguments_proc_group(CheckerContext *c,
String name = proc->token.string;
max_name_length = gb_max(max_name_length, prefix.len + prefix_sep.len + name.len);
-
-
gbString pt;
if (t->Proc.node != nullptr) {
pt = expr_to_string(t->Proc.node);
@@ -6417,8 +6419,8 @@ gb_internal CallArgumentData check_call_arguments_proc_group(CheckerContext *c,
error(operand->expr, "Ambiguous procedure group call '%s' that match with the given arguments", expr_name);
print_argument_types();
- for (isize i = 0; i < valids.count; i++) {
- Entity *proc = proc_entities[valids[i].index];
+ for (auto const &valid : valids) {
+ Entity *proc = proc_entities[valid.index];
GB_ASSERT(proc != nullptr);
TokenPos pos = proc->token.pos;
Type *t = base_type(proc->type); GB_ASSERT(t->kind == Type_Proc);