aboutsummaryrefslogtreecommitdiffhomepage
path: root/parse.c
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2025-07-29 19:40:40 +0900
committernsfisis <nsfisis@gmail.com>2025-08-15 10:04:40 +0900
commit3df0d758471d7654d4b85ef15a1675b4d62e7c41 (patch)
tree48d6a1abceb5566779cfeddb8b9f1d7148ea2ea8 /parse.c
parent144875f4687e8cfa77f8b1b7e5ff8790f8f5b684 (diff)
downloadducc-3df0d758471d7654d4b85ef15a1675b4d62e7c41.tar.gz
ducc-3df0d758471d7654d4b85ef15a1675b4d62e7c41.tar.zst
ducc-3df0d758471d7654d4b85ef15a1675b4d62e7c41.zip
feat: implement array type
Diffstat (limited to 'parse.c')
-rw-r--r--parse.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/parse.c b/parse.c
index d08269e..0b682e2 100644
--- a/parse.c
+++ b/parse.c
@@ -702,6 +702,17 @@ AstNode* parse_var_decl(Parser* p) {
}
String* name = parse_ident(p);
+ if (peek_token(p)->kind == TokenKind_bracket_l) {
+ next_token(p);
+ AstNode* size_expr = parse_expr(p);
+ if (size_expr->kind != AstNodeKind_int_expr) {
+ fatal_error("parse_var_decl: invalid array size");
+ }
+ int size = size_expr->node_int_value;
+ expect(p, TokenKind_bracket_r);
+ ty = type_new_array(ty, size);
+ }
+
AstNode* init = NULL;
if (peek_token(p)->kind == TokenKind_assign) {
next_token(p);