aboutsummaryrefslogtreecommitdiff
path: root/src/check_expr.cpp
diff options
context:
space:
mode:
authorgingerBill <bill@gingerbill.org>2018-08-05 23:57:34 +0100
committergingerBill <bill@gingerbill.org>2018-08-05 23:57:34 +0100
commit60711dd355540b0b315a4508fc40b0e3b4df7bc9 (patch)
treee6110b311e74b6ac41f7bc6367571bc0f4ba158f /src/check_expr.cpp
parentfad3947e26266ada585f6879652fccf7c142e044 (diff)
Refactor default parameter values
Diffstat (limited to 'src/check_expr.cpp')
-rw-r--r--src/check_expr.cpp23
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;