auto_cast prefix for procedure parameters

This commit is contained in:
gingerBill
2018-08-09 17:58:11 +01:00
parent 877a78d6ba
commit 70586b1cf8
6 changed files with 40 additions and 17 deletions

View File

@@ -3879,10 +3879,18 @@ CALL_ARGUMENT_CHECKER(check_call_arguments_internal) {
i64 s = 0;
if (!check_is_assignable_to_with_score(c, &o, t, &s)) {
if (show_error) {
check_assignment(c, &o, t, str_lit("argument"));
bool ok = false;
if (e->flags & EntityFlag_AutoCast) {
ok = check_is_castable_to(c, &o, t);
}
if (ok) {
s = assign_score_function(10);
} else {
if (show_error) {
check_assignment(c, &o, t, str_lit("argument"));
}
err = CallArgumentError_WrongTypes;
}
err = CallArgumentError_WrongTypes;
}
score += s;
}
@@ -6107,6 +6115,9 @@ gbString write_expr_to_string(gbString str, Ast *node) {
if (f->flags&FieldFlag_c_vararg) {
str = gb_string_appendc(str, "#c_vararg ");
}
if (f->flags&FieldFlag_auto_cast) {
str = gb_string_appendc(str, "auto_cast ");
}
for_array(i, f->names) {
Ast *name = f->names[i];