Handle function type annotations without returns better

This commit is contained in:
Bruce Hill 2024-03-18 15:27:07 -04:00
parent d94c1057ac
commit 7c0a77df33
2 changed files with 2 additions and 3 deletions

View File

@ -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);
}

View File

@ -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;