From 171f38b9b5c0e46de98829b3f775cef5e27279be Mon Sep 17 00:00:00 2001 From: gingerBill Date: Thu, 18 May 2023 11:06:02 +0100 Subject: Allow implicit conversion between boolean types within `or_return` This is to improve the experience using third-party code, especially foreign C-like code which may use a distinct boolean or a different sized one --- src/check_expr.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) (limited to 'src/check_expr.cpp') diff --git a/src/check_expr.cpp b/src/check_expr.cpp index 6eb517251..0db12aba0 100644 --- a/src/check_expr.cpp +++ b/src/check_expr.cpp @@ -7887,8 +7887,11 @@ gb_internal ExprKind check_or_return_expr(CheckerContext *c, Operand *o, Ast *no rhs.type = right_type; rhs.mode = Addressing_Value; - // TODO(bill): better error message - if (!check_is_assignable_to(c, &rhs, end_type)) { + if (is_type_boolean(right_type) && is_type_boolean(end_type)) { + // NOTE(bill): allow implicit conversion between boolean types + // within 'or_return' to improve the experience using third-party code + } else if (!check_is_assignable_to(c, &rhs, end_type)) { + // TODO(bill): better error message gbString a = type_to_string(right_type); gbString b = type_to_string(end_type); gbString ret_type = type_to_string(result_type); -- cgit v1.2.3