From f3a1ea57244608c1795e7f90cb3077c6a01686a9 Mon Sep 17 00:00:00 2001 From: nsfisis Date: Wed, 3 Sep 2025 20:27:16 +0900 Subject: feat: rewrite function declaration parsing --- src/ast.c | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) (limited to 'src/ast.c') diff --git a/src/ast.c b/src/ast.c index 78fb2b9..1e444ba 100644 --- a/src/ast.c +++ b/src/ast.c @@ -45,6 +45,8 @@ const char* type_kind_stringify(TypeKind k) { return ""; else if (k == TypeKind_array) return ""; + else if (k == TypeKind_func) + return ""; else unreachable(); } @@ -60,16 +62,14 @@ Type* type_new(TypeKind kind) { } Type* type_new_ptr(Type* base) { - Type* ty = calloc(1, sizeof(Type)); - ty->kind = TypeKind_ptr; + Type* ty = type_new(TypeKind_ptr); ty->base = base; return ty; } -Type* type_new_array(Type* elem, int size) { - Type* ty = calloc(1, sizeof(Type)); - ty->kind = TypeKind_array; - ty->base = elem; +Type* type_new_array(Type* base, int size) { + Type* ty = type_new(TypeKind_array); + ty->base = base; ty->array_size = size; return ty; } @@ -82,8 +82,15 @@ Type* type_array_to_ptr(Type* ty) { return type_new_ptr(ty->base); } +Type* type_new_func(Type* result, AstNode* params) { + Type* ty = type_new(TypeKind_func); + ty->result = result; + ty->params = params; + return ty; +} + BOOL type_is_unsized(Type* ty) { - return ty->kind == TypeKind_void; + return ty->kind == TypeKind_void || ty->kind == TypeKind_func; } int type_sizeof(Type* ty) { -- cgit v1.2.3-70-g09d2