aboutsummaryrefslogtreecommitdiff
path: root/src/check_expr.cpp
diff options
context:
space:
mode:
authorgingerBill <bill@gingerbill.org>2023-05-18 11:06:02 +0100
committergingerBill <bill@gingerbill.org>2023-05-18 11:06:02 +0100
commit171f38b9b5c0e46de98829b3f775cef5e27279be (patch)
tree91da5b558a833c1d8a072db768c4f57b15a51a13 /src/check_expr.cpp
parent31c21a054ba56e10c21d556961c6e08ef5acc816 (diff)
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
Diffstat (limited to 'src/check_expr.cpp')
-rw-r--r--src/check_expr.cpp7
1 files changed, 5 insertions, 2 deletions
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);