From 0ae64ed2c00f66c7f3ddec8689169bacafff87ea Mon Sep 17 00:00:00 2001 From: nsfisis Date: Sat, 7 Feb 2026 19:06:29 +0900 Subject: feat: partially support float/double --- src/ast.c | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) (limited to 'src/ast.c') diff --git a/src/ast.c b/src/ast.c index eb478c5..89c8aea 100644 --- a/src/ast.c +++ b/src/ast.c @@ -130,10 +130,10 @@ int type_sizeof(Type* ty) { return 1; else if (ty->kind == TypeKind_short || ty->kind == TypeKind_ushort) return 2; - else if (ty->kind == TypeKind_int || ty->kind == TypeKind_uint) + else if (ty->kind == TypeKind_int || ty->kind == TypeKind_uint || ty->kind == TypeKind_float) return 4; else if (ty->kind == TypeKind_long || ty->kind == TypeKind_ulong || ty->kind == TypeKind_llong || - ty->kind == TypeKind_ullong) + ty->kind == TypeKind_ullong || ty->kind == TypeKind_double) return 8; else if (ty->kind == TypeKind_struct) return type_sizeof_struct(ty); @@ -161,10 +161,10 @@ int type_alignof(Type* ty) { return 1; else if (ty->kind == TypeKind_short || ty->kind == TypeKind_ushort) return 2; - else if (ty->kind == TypeKind_int || ty->kind == TypeKind_uint) + else if (ty->kind == TypeKind_int || ty->kind == TypeKind_uint || ty->kind == TypeKind_float) return 4; else if (ty->kind == TypeKind_long || ty->kind == TypeKind_ulong || ty->kind == TypeKind_llong || - ty->kind == TypeKind_ullong) + ty->kind == TypeKind_ullong || ty->kind == TypeKind_double) return 8; else if (ty->kind == TypeKind_struct) return type_alignof_struct(ty); @@ -240,6 +240,8 @@ const char* astnode_kind_stringify(AstNodeKind k) { return "if_stmt"; case AstNodeKind_int_expr: return "int_expr"; + case AstNodeKind_double_expr: + return "double_expr"; case AstNodeKind_label_stmt: return "label_stmt"; case AstNodeKind_list: @@ -325,6 +327,14 @@ AstNode* ast_new_int(int v) { return e; } +AstNode* ast_new_double(double v) { + AstNode* e = ast_new(AstNodeKind_double_expr); + e->as.double_expr = calloc(1, sizeof(DoubleExprNode)); + e->as.double_expr->value = v; + e->ty = type_new(TypeKind_double); + return e; +} + AstNode* ast_new_unary_expr(int op, AstNode* operand) { AstNode* e = ast_new(AstNodeKind_unary_expr); e->as.unary_expr = calloc(1, sizeof(UnaryExprNode)); -- cgit v1.3-1-g0d28