From 5ce65557219d57d19e9e45c5670b48bb40e22c3f Mon Sep 17 00:00:00 2001 From: gingerBill Date: Sun, 12 Nov 2017 17:55:16 +0000 Subject: Allow for default arguments after a variadic parameter --- src/check_expr.cpp | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) (limited to 'src/check_expr.cpp') diff --git a/src/check_expr.cpp b/src/check_expr.cpp index 5e24c575e..a19522746 100644 --- a/src/check_expr.cpp +++ b/src/check_expr.cpp @@ -4156,6 +4156,22 @@ CALL_ARGUMENT_CHECKER(check_call_arguments_internal) { param_count = param_tuple->variables.count; if (variadic) { + for (isize i = param_count-1; i >= 0; i--) { + Entity *e = param_tuple->variables[i]; + if (e->kind == Entity_TypeName) { + break; + } + + if (e->kind == Entity_Variable) { + if (e->Variable.default_value.kind != ExactValue_Invalid || + e->Variable.default_is_nil || + e->Variable.default_is_location) { + param_count--; + continue; + } + } + break; + } param_count--; } } @@ -4262,9 +4278,8 @@ CALL_ARGUMENT_CHECKER(check_call_arguments_internal) { continue; } - if (variadic) { - o = operands[operand_index]; - } + + i64 s = 0; if (!check_is_assignable_to_with_score(c, &o, t, &s)) { if (show_error) { -- cgit v1.2.3