diff options
Diffstat (limited to 'src/check_expr.cpp')
| -rw-r--r-- | src/check_expr.cpp | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/src/check_expr.cpp b/src/check_expr.cpp index c3f252cf7..5427fcd65 100644 --- a/src/check_expr.cpp +++ b/src/check_expr.cpp @@ -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]; |