diff options
| author | gingerBill <bill@gingerbill.org> | 2018-08-05 23:57:34 +0100 |
|---|---|---|
| committer | gingerBill <bill@gingerbill.org> | 2018-08-05 23:57:34 +0100 |
| commit | 60711dd355540b0b315a4508fc40b0e3b4df7bc9 (patch) | |
| tree | e6110b311e74b6ac41f7bc6367571bc0f4ba158f /src/check_expr.cpp | |
| parent | fad3947e26266ada585f6879652fccf7c142e044 (diff) | |
Refactor default parameter values
Diffstat (limited to 'src/check_expr.cpp')
| -rw-r--r-- | src/check_expr.cpp | 23 |
1 files changed, 6 insertions, 17 deletions
diff --git a/src/check_expr.cpp b/src/check_expr.cpp index 029d4562c..c5b8b80c5 100644 --- a/src/check_expr.cpp +++ b/src/check_expr.cpp @@ -4168,9 +4168,7 @@ CALL_ARGUMENT_CHECKER(check_call_arguments_internal) { } if (e->kind == Entity_Variable) { - if (e->Variable.default_value.kind != ExactValue_Invalid || - e->Variable.default_is_nil || - e->Variable.default_is_location) { + if (e->Variable.param_value.kind != ParameterValue_Invalid) { param_count--; continue; } @@ -4190,9 +4188,7 @@ CALL_ARGUMENT_CHECKER(check_call_arguments_internal) { } if (e->kind == Entity_Variable) { - if (e->Variable.default_value.kind != ExactValue_Invalid || - e->Variable.default_is_nil || - e->Variable.default_is_location) { + if (e->Variable.param_value.kind != ParameterValue_Invalid) { param_count_excluding_defaults--; continue; } @@ -4442,10 +4438,7 @@ CALL_ARGUMENT_CHECKER(check_named_call_arguments) { continue; } if (e->kind == Entity_Variable) { - if (e->Variable.default_value.kind != ExactValue_Invalid) { - score += assign_score_function(1); - continue; - } else if (e->Variable.default_is_nil) { + if (e->Variable.param_value.kind != ParameterValue_Invalid) { score += assign_score_function(1); continue; } @@ -5218,8 +5211,8 @@ ExprKind check_expr_base_internal(CheckerContext *c, Operand *o, Ast *node, Type case_ast_node(i, Implicit, node) switch (i->kind) { case Token_context: - if (c->proc_name.len == 0) { - error(node, "'context' is only allowed within procedures"); + if (c->proc_name.len == 0 && c->curr_proc_sig == nullptr) { + error(node, "'context' is only allowed within procedures %p", c->curr_proc_decl); return kind; } @@ -5500,11 +5493,7 @@ ExprKind check_expr_base_internal(CheckerContext *c, Operand *o, Ast *node, Type for (isize i = min_field_count-1; i >= 0; i--) { Entity *e = t->Struct.fields[i]; GB_ASSERT(e->kind == Entity_Variable); - if (e->Variable.default_is_nil) { - min_field_count--; - } else if (e->Variable.default_is_undef) { - min_field_count--; - } else if (e->Variable.default_value.kind != ExactValue_Invalid) { + if (e->Variable.param_value.kind != ParameterValue_Invalid) { min_field_count--; } else { break; |