diff options
| author | Bruce Hill <bruce@bruce-hill.com> | 2025-11-24 20:16:50 -0500 |
|---|---|---|
| committer | Bruce Hill <bruce@bruce-hill.com> | 2025-11-24 20:16:50 -0500 |
| commit | 04ea51a81720be79170f185879a465e7020ed42b (patch) | |
| tree | beae6029ae3bd062c8521a72898c31959e9851a7 | |
| parent | 9b8c4beb1e64579792fca7c161c9e3b0691e67d4 (diff) | |
Fix case where a conditional failure was mistaken for an always failure
| -rw-r--r-- | src/typecheck.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/src/typecheck.c b/src/typecheck.c index 4e1f5554..b89f7eca 100644 --- a/src/typecheck.c +++ b/src/typecheck.c @@ -1402,7 +1402,10 @@ type_t *get_type(env_t *env, ast_t *ast) { type_t *true_t = get_type(truthy_scope, if_->body); ast_t *else_body = if_->else_body; - if (!else_body) else_body = WrapAST(ast, None, .type = true_t); + if (!else_body) { + if (true_t->tag == AbortType) return Type(VoidType); + else_body = WrapAST(ast, None, .type = true_t); + } type_t *false_t = get_type(falsey_scope, if_->else_body); type_t *t_either = type_or_type(true_t, false_t); if (!t_either) |
