diff options
| author | gingerBill <bill@gingerbill.org> | 2023-08-05 15:01:21 +0100 |
|---|---|---|
| committer | gingerBill <bill@gingerbill.org> | 2023-08-05 15:01:21 +0100 |
| commit | 1481015dc4fdfc557aab6c21fe80278006161ae4 (patch) | |
| tree | ed5af39a1f0aa2047682dec6bf3c2fe1118eefb9 /src/check_expr.cpp | |
| parent | 8cdedd4cd262beea3fae538d3301963d47f13967 (diff) | |
Fix #2690
Diffstat (limited to 'src/check_expr.cpp')
| -rw-r--r-- | src/check_expr.cpp | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/src/check_expr.cpp b/src/check_expr.cpp index b9419bf9e..5b6e8be3d 100644 --- a/src/check_expr.cpp +++ b/src/check_expr.cpp @@ -5478,6 +5478,8 @@ gb_internal CallArgumentError check_call_arguments_internal(CheckerContext *c, A auto variadic_operands = slice(slice_from_array(positional_operands), positional_operand_count, positional_operands.count); + bool named_variadic_param = false; + if (named_operands.count != 0) { GB_ASSERT(ce->split_args->named.count == named_operands.count); for_array(i, ce->split_args->named) { @@ -5503,6 +5505,9 @@ gb_internal CallArgumentError check_call_arguments_internal(CheckerContext *c, A err = CallArgumentError_ParameterNotFound; continue; } + if (pt->variadic && param_index == pt->variadic_index) { + named_variadic_param = true; + } if (visited[param_index]) { if (show_error) { error(arg, "Duplicate parameter '%.*s' in procedure call", LIT(name)); @@ -5704,11 +5709,6 @@ gb_internal CallArgumentError check_call_arguments_internal(CheckerContext *c, A } continue; } - - if (param_is_variadic) { - continue; - } - score += eval_param_and_score(c, o, e->type, err, param_is_variadic, e, show_error); } } |