aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBruce Hill <bruce@bruce-hill.com>2024-09-06 12:33:28 -0400
committerBruce Hill <bruce@bruce-hill.com>2024-09-06 12:33:28 -0400
commit7239ec4083128cc002ad8bd16824824d71b20116 (patch)
treea6dabf3c22b9c4d9eca6ed5c1b851303811cdc8c
parent507b6df5c0f629f99692ebff929e00ead3945a79 (diff)
Bugfixes for lambdas that have a trailing abort statement (and print
statements aren't those)
-rw-r--r--typecheck.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/typecheck.c b/typecheck.c
index c9227844..519d83d1 100644
--- a/typecheck.c
+++ b/typecheck.c
@@ -855,10 +855,10 @@ type_t *get_type(env_t *env, ast_t *ast)
}
return Type(ReturnType, .ret=(val ? get_type(env, val) : Type(VoidType)));
}
- case Stop: case Skip: case PrintStatement: {
+ case Stop: case Skip: {
return Type(AbortType);
}
- case Pass: case Defer: return Type(VoidType);
+ case Pass: case Defer: case PrintStatement: return Type(VoidType);
case Negative: {
ast_t *value = Match(ast, Negative)->value;
type_t *t = get_type(env, value);
@@ -1099,6 +1099,8 @@ type_t *get_type(env_t *env, ast_t *ast)
assert(ret);
if (ret->tag == ReturnType)
ret = Match(ret, ReturnType)->ret;
+ if (ret->tag == AbortType)
+ ret = Type(VoidType);
if (has_stack_memory(ret))
code_err(ast, "Functions can't return stack references because the reference may outlive its stack frame.");