aboutsummaryrefslogtreecommitdiff
path: root/src/typecheck.c
diff options
context:
space:
mode:
authorBruce Hill <bruce@bruce-hill.com>2025-11-24 20:16:50 -0500
committerBruce Hill <bruce@bruce-hill.com>2025-11-24 20:16:50 -0500
commit04ea51a81720be79170f185879a465e7020ed42b (patch)
treebeae6029ae3bd062c8521a72898c31959e9851a7 /src/typecheck.c
parent9b8c4beb1e64579792fca7c161c9e3b0691e67d4 (diff)
Fix case where a conditional failure was mistaken for an always failure
Diffstat (limited to 'src/typecheck.c')
-rw-r--r--src/typecheck.c5
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)