From 70586b1cf81dcf7940bd39ce7b2c18ed8f0d2aa5 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Thu, 9 Aug 2018 17:58:11 +0100 Subject: `auto_cast` prefix for procedure parameters --- src/check_expr.cpp | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) (limited to 'src/check_expr.cpp') 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]; -- cgit v1.2.3