diff options
| author | Bruce Hill <bruce@bruce-hill.com> | 2024-09-06 12:33:28 -0400 |
|---|---|---|
| committer | Bruce Hill <bruce@bruce-hill.com> | 2024-09-06 12:33:28 -0400 |
| commit | 7239ec4083128cc002ad8bd16824824d71b20116 (patch) | |
| tree | a6dabf3c22b9c4d9eca6ed5c1b851303811cdc8c | |
| parent | 507b6df5c0f629f99692ebff929e00ead3945a79 (diff) | |
Bugfixes for lambdas that have a trailing abort statement (and print
statements aren't those)
| -rw-r--r-- | typecheck.c | 6 |
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."); |
