aboutsummaryrefslogtreecommitdiff
path: root/src/typecheck.c
diff options
context:
space:
mode:
authorBruce Hill <bruce@bruce-hill.com>2025-10-05 17:52:33 -0400
committerBruce Hill <bruce@bruce-hill.com>2025-10-05 17:52:33 -0400
commit398d2cab6988e20c59e7037ff7ef551540339abb (patch)
tree8c5154cfcd32d0664fd40ac8fa93f50f6434859a /src/typecheck.c
parent9b5b6b110bb80f8530dd7ca4e0cc9eb3236d8ad7 (diff)
Fix a bunch of issues with optional types
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 b21fa40f..906236c3 100644
--- a/src/typecheck.c
+++ b/src/typecheck.c
@@ -1067,7 +1067,10 @@ type_t *get_type(env_t *env, ast_t *ast) {
}
case Return: {
ast_t *val = Match(ast, Return)->value;
- if (env->fn) env = with_enum_scope(env, get_function_return_type(env, env->fn));
+ if (env->fn && (env->fn->tag != Lambda || Match(env->fn, Lambda)->ret_type != NULL)) {
+ type_t *ret_type = get_function_return_type(env, env->fn);
+ env = with_enum_scope(env, ret_type);
+ }
return Type(ReturnType, .ret = (val ? get_type(env, val) : Type(VoidType)));
}
case Stop: