aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--parse.c3
-rw-r--r--typecheck.c2
2 files changed, 2 insertions, 3 deletions
diff --git a/parse.c b/parse.c
index 14d18682..c39532c9 100644
--- a/parse.c
+++ b/parse.c
@@ -479,8 +479,7 @@ type_ast_t *parse_func_type(parse_ctx_t *ctx, const char *pos) {
arg_ast_t *args = parse_args(ctx, &pos, true);
expect_closing(ctx, &pos, ")", "I wasn't able to parse the rest of this function type");
spaces(&pos);
- if (!match(&pos, "->")) return NULL;
- type_ast_t *ret = optional(ctx, &pos, parse_type);
+ type_ast_t *ret = match(&pos, "->") ? optional(ctx, &pos, parse_type) : NULL;
return NewTypeAST(ctx->file, start, pos, FunctionTypeAST, .args=args, .ret=ret);
}
diff --git a/typecheck.c b/typecheck.c
index 4a73b32d..a48fa8ee 100644
--- a/typecheck.c
+++ b/typecheck.c
@@ -53,7 +53,7 @@ type_t *parse_type_ast(env_t *env, type_ast_t *ast)
}
case FunctionTypeAST: {
auto fn = Match(ast, FunctionTypeAST);
- type_t *ret_t = parse_type_ast(env, fn->ret);
+ type_t *ret_t = fn->ret ? parse_type_ast(env, fn->ret) : Type(VoidType);
if (has_stack_memory(ret_t))
code_err(fn->ret, "Functions are not allowed to return stack references, because the reference may no longer exist on the stack.");
arg_t *type_args = NULL;