diff options
| author | nsfisis <nsfisis@gmail.com> | 2026-02-07 19:06:29 +0900 |
|---|---|---|
| committer | nsfisis <nsfisis@gmail.com> | 2026-02-07 19:06:38 +0900 |
| commit | 0ae64ed2c00f66c7f3ddec8689169bacafff87ea (patch) | |
| tree | c72db385bca5de58910f2769168a7b0918309c21 /src/ast.c | |
| parent | 7ba8a506a215846d14d71487807f5e525e9e5c16 (diff) | |
| download | ducc-0ae64ed2c00f66c7f3ddec8689169bacafff87ea.tar.gz ducc-0ae64ed2c00f66c7f3ddec8689169bacafff87ea.tar.zst ducc-0ae64ed2c00f66c7f3ddec8689169bacafff87ea.zip | |
feat: partially support float/double
Diffstat (limited to 'src/ast.c')
| -rw-r--r-- | src/ast.c | 18 |
1 files changed, 14 insertions, 4 deletions
@@ -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)); |
