diff options
| author | gingerBill <bill@gingerbill.org> | 2024-07-04 13:48:52 +0100 |
|---|---|---|
| committer | gingerBill <bill@gingerbill.org> | 2024-07-04 13:48:52 +0100 |
| commit | 657bc88535eb3b160d86fed5f5e5d0d6ea67c78c (patch) | |
| tree | e67b19721746e14e0a48a922b62b5935b6ecf883 /src/checker.cpp | |
| parent | 45b2a6a19eb48059566caa9efbf15a8ac644b5ce (diff) | |
Allow `x :: y when cond else proc(...){...}`
Diffstat (limited to 'src/checker.cpp')
| -rw-r--r-- | src/checker.cpp | 12 |
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; } |