aboutsummaryrefslogtreecommitdiff
path: root/src/checker.cpp
diff options
context:
space:
mode:
authorgingerBill <bill@gingerbill.org>2024-07-04 13:48:52 +0100
committergingerBill <bill@gingerbill.org>2024-07-04 13:48:52 +0100
commit657bc88535eb3b160d86fed5f5e5d0d6ea67c78c (patch)
treee67b19721746e14e0a48a922b62b5935b6ecf883 /src/checker.cpp
parent45b2a6a19eb48059566caa9efbf15a8ac644b5ce (diff)
Allow `x :: y when cond else proc(...){...}`
Diffstat (limited to 'src/checker.cpp')
-rw-r--r--src/checker.cpp12
1 files changed, 12 insertions, 0 deletions
diff --git a/src/checker.cpp b/src/checker.cpp
index deee93dcc..503494c76 100644
--- a/src/checker.cpp
+++ b/src/checker.cpp
@@ -1470,6 +1470,7 @@ gb_internal Entity *implicit_entity_of_node(Ast *clause) {
}
gb_internal Entity *entity_of_node(Ast *expr) {
+retry:;
expr = unparen_expr(expr);
switch (expr->kind) {
case_ast_node(ident, Ident, expr);
@@ -1490,6 +1491,17 @@ gb_internal Entity *entity_of_node(Ast *expr) {
case_ast_node(ce, CallExpr, expr);
return ce->entity_procedure_of;
case_end;
+
+ case_ast_node(we, TernaryWhenExpr, expr);
+ if (we->cond == nullptr) {
+ break;
+ }
+ if (we->cond->tav.value.kind != ExactValue_Bool) {
+ break;
+ }
+ expr = we->cond->tav.value.value_bool ? we->x : we->y;
+ goto retry;
+ case_end;
}
return nullptr;
}