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_type.cpp | |
| parent | fad3947e26266ada585f6879652fccf7c142e044 (diff) | |
Refactor default parameter values
Diffstat (limited to 'src/check_type.cpp')
| -rw-r--r-- | src/check_type.cpp | 37 |
1 files changed, 27 insertions, 10 deletions
diff --git a/src/check_type.cpp b/src/check_type.cpp index 9d840b0d1..8ef485a52 100644 --- a/src/check_type.cpp +++ b/src/check_type.cpp @@ -1065,9 +1065,14 @@ Type *check_get_params(CheckerContext *ctx, Scope *scope, Ast *_params, bool *is } param = alloc_entity_param(scope, name->Ident.token, type, is_using, is_in); - param->Variable.default_value = value; - param->Variable.default_is_nil = default_is_nil; - param->Variable.default_is_location = default_is_location; + if (default_is_nil) { + param->Variable.param_value.kind = ParameterValue_Nil; + } else if (default_is_location) { + param->Variable.param_value.kind = ParameterValue_Location; + } else if (value.kind != ExactValue_Invalid) { + param->Variable.param_value.kind = ParameterValue_Constant; + param->Variable.param_value.value = value; + } } if (p->flags&FieldFlag_no_alias) { param->flags |= EntityFlag_NoAlias; @@ -1194,8 +1199,12 @@ Type *check_get_results(CheckerContext *ctx, Scope *scope, Ast *_results) { Token token = ast_token(field->type); token.string = str_lit(""); Entity *param = alloc_entity_param(scope, token, type, false, false); - param->Variable.default_value = value; - param->Variable.default_is_nil = default_is_nil; + if (default_is_nil) { + param->Variable.param_value.kind = ParameterValue_Nil; + } else if (value.kind != ExactValue_Invalid) { + param->Variable.param_value.kind = ParameterValue_Constant; + param->Variable.param_value.value = value; + } array_add(&variables, param); } else { for_array(j, field->names) { @@ -1218,8 +1227,12 @@ Type *check_get_results(CheckerContext *ctx, Scope *scope, Ast *_results) { Entity *param = alloc_entity_param(scope, token, type, false, false); param->flags |= EntityFlag_Result; - param->Variable.default_value = value; - param->Variable.default_is_nil = default_is_nil; + if (default_is_nil) { + param->Variable.param_value.kind = ParameterValue_Nil; + } else if (value.kind != ExactValue_Invalid) { + param->Variable.param_value.kind = ParameterValue_Constant; + param->Variable.param_value.value = value; + } array_add(&variables, param); add_entity(ctx->checker, scope, name, param); } @@ -1465,9 +1478,13 @@ bool check_procedure_type(CheckerContext *ctx, Type *type, Ast *proc_type_node, if (param_count > 0) { for_array(i, params->Tuple.variables) { Entity *param = params->Tuple.variables[i]; - if (param->kind == Entity_Variable && param->Variable.default_value.kind == ExactValue_Procedure) { - type->Proc.has_proc_default_values = true; - break; + if (param->kind == Entity_Variable) { + ParameterValue pv = param->Variable.param_value; + if (pv.kind == ParameterValue_Constant && + pv.value.kind == ExactValue_Procedure) { + type->Proc.has_proc_default_values = true; + break; + } } } } |