Handle function type annotations without returns better
This commit is contained in:
parent
d94c1057ac
commit
7c0a77df33
3
parse.c
3
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);
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user